Python 2.7 получает пользовательский ввод и манипулирует как строку без котировок
Я хочу получить строку от пользователя, а затем манипулировать ею.
testVar = input("Ask user for something.")
Есть ли способ для testVar быть строкой без меня, когда пользователь вводит свой ответ в кавычки? то есть "Hello" или Hello
Если пользователь вводит Hello, я получаю следующую ошибку:
NameError: имя "Hello" не определено
Ответы
Ответ 1
Используйте raw_input()
вместо input()
:
testVar = raw_input("Ask user for something.")
input()
фактически оценивает ввод как код Python. Я предлагаю никогда не использовать его. raw_input()
возвращает строку, введенную пользователем.
Ответ 2
Функция input
также будет оценивать данные, которые она только что прочитала, как код python, что на самом деле не так.
Общий подход заключается в том, чтобы обрабатывать ввод пользователя (от sys.stdin
), как и любой другой файл. Попробуйте
import sys
sys.stdin.readline()
Если вы хотите сохранить его коротким, вы можете использовать raw_input
, который совпадает с input
, но пропускает оценку.
Ответ 3
Если вы хотите использовать ввод вместо raw_input в python 2.x, тогда этот трюк будет удобен
if hasattr(__builtins__, 'raw_input'):
input=raw_input
После чего
testVar = input("Ask user for something.")
будет работать нормально.
Ответ 4
testVar = raw_input("Ask user for something.")
Ответ 5
мы можем использовать функцию raw_inpu() в функции python 2 и input() в python 3
По умолчанию входная функция принимает ввод в виде формата строки
для другого типа данных вам необходимо ввести пользовательский ввод
В Python 2 мы используем функцию raw_input(). он ждет, когда пользователь наберет какой-то ввод и нажмите "возврат", и нам нужно сохранить значение в переменной путем кастинга в качестве нашего типа данных желания. Будьте осторожны при использовании литья типа
x = raw_input ( "Введите число:" ) # Строковый ввод
x = int (raw_input ( "Введите число:" )) # integer input
x = float (raw_input ( "Введите число с плавающей точкой:" )) #float input
x = eval (raw_input ( "Введите число с плавающей запятой:" )) #eval input
В Python 3 мы используем функцию input(), которая возвращает значение пользовательского ввода
x = input ( "Введите число:" ) # Строковый ввод
если вы введете строку, int, float, eval, она примет в качестве ввода строки
x = int (ввод ( "Введите число:" )) Вход #integer
если вы введете строку для int cast ValueError: недействительный литерал для int() с базой 10:
x = float (ввод ( "Введите число с плавающей точкой:" )) #float input
если вы введете строку для float cast ValueError: не удалось преобразовать строку в float
x = eval (ввод ( "Введите число с плавающей точкой:" )) # Обычный вход
если вы введете строку для eval cast NameError: имя '' не определено
Эти ошибки также применимы для python 2
Ответ 6
Мой рабочий код с исправлениями:
import random
import math
print "Welcome to Sam Math Test"
num1= random.randint(1, 10)
num2= random.randint(1, 10)
num3= random.randint(1, 10)
list=[num1, num2, num3]
maxNum= max(list)
minNum= min(list)
sqrtOne= math.sqrt(num1)
correct= False
while(correct == False):
guess1= input("Which number is the highest? "+ str(list) + ": ")
if maxNum == guess1:
print("Correct!")
correct = True
else:
print("Incorrect, try again")
correct= False
while(correct == False):
guess2= input("Which number is the lowest? " + str(list) +": ")
if minNum == guess2:
print("Correct!")
correct = True
else:
print("Incorrect, try again")
correct= False
while(correct == False):
guess3= raw_input("Is the square root of " + str(num1) + " greater than or equal to 2? (y/n): ")
if sqrtOne >= 2.0 and str(guess3) == "y":
print("Correct!")
correct = True
elif sqrtOne < 2.0 and str(guess3) == "n":
print("Correct!")
correct = True
else:
print("Incorrect, try again")
print("Thanks for playing!")
Ответ 7
Это моя работа, чтобы избежать безопасности в случае, если мне нужно будет перейти на python 3 в будущем.
def _input(msg):
return raw_input(msg)
Ответ 8
Проблема, похоже, решена в версии 3.4.2 Python.
testVar = input("Ask user for something.")
Будет работать нормально.