TLDR
- Python 3 не оценивает данные, полученные с помощью
input
функции, но функция Python 2 input
делает (прочитайте следующий раздел, чтобы понять смысл).
- Эквивалентом Python 2 для Python 3
input
является raw_input
функция.
Python 2.x
Было две функции для получения пользовательского ввода, вызванные input
и raw_input
. Разница между ними заключается в том, что raw_input
они не оценивают данные и возвращают их в виде строк. Но, input
оценит все, что вы ввели, и результат оценки будет возвращен. Например,
>>> import sys
>>> sys.version
'2.7.6 (default, Mar 22 2014, 22:59:56) \n[GCC 4.8.2]'
>>> data = input("Enter a number: ")
Enter a number: 5 + 17
>>> data, type(data)
(22, <type 'int'>)
Данные 5 + 17
оцениваются и результат 22
. Когда он оценивает выражение 5 + 17
, он обнаруживает, что вы добавляете два числа, и поэтому результат также будет того же int
типа. Таким образом, преобразование типов выполняется бесплатно и 22
возвращается как результат input
и сохраняется в data
переменной. Вы можете думать input
как raw_input
составленный с eval
вызовом.
>>> data = eval(raw_input("Enter a number: "))
Enter a number: 5 + 17
>>> data, type(data)
(22, <type 'int'>)
Примечание: вы должны быть осторожны при использовании input
в Python 2.x. Я объяснил, почему нужно быть осторожным при его использовании, в этом ответе .
Но raw_input
не оценивает ввод и возвращает как есть, в виде строки.
>>> import sys
>>> sys.version
'2.7.6 (default, Mar 22 2014, 22:59:56) \n[GCC 4.8.2]'
>>> data = raw_input("Enter a number: ")
Enter a number: 5 + 17
>>> data, type(data)
('5 + 17', <type 'str'>)
Python 3.x
Python 3.x input
и Python 2.x raw_input
похожи и raw_input
не доступны в Python 3.x.
>>> import sys
>>> sys.version
'3.4.0 (default, Apr 11 2014, 13:05:11) \n[GCC 4.8.2]'
>>> data = input("Enter a number: ")
Enter a number: 5 + 17
>>> data, type(data)
('5 + 17', <class 'str'>)
Решение
Чтобы ответить на ваш вопрос, так как Python 3.x не оценивает и не конвертирует тип данных, вы должны явно преобразовать в int
s int
, например, так:
x = int(input("Enter a number: "))
y = int(input("Enter a number: "))
Вы можете принимать числа любой базы и конвертировать их непосредственно в базу-10 с помощью int
функции, подобной этой
>>> data = int(input("Enter a number: "), 8)
Enter a number: 777
>>> data
511
>>> data = int(input("Enter a number: "), 16)
Enter a number: FFFF
>>> data
65535
>>> data = int(input("Enter a number: "), 2)
Enter a number: 10101010101
>>> data
1365
Второй параметр сообщает, что является основой введенных чисел, а затем внутренне понимает и преобразует их. Если введенные данные неверны, будет выброшено ValueError
.
>>> data = int(input("Enter a number: "), 2)
Enter a number: 1234
Traceback (most recent call last):
File "<input>", line 1, in <module>
ValueError: invalid literal for int() with base 2: '1234'
Для значений , которые могут иметь дробную составляющую, тип будет , float
а не int
:
x = float(input("Enter a number:"))
Кроме того, ваша программа может быть немного изменена, как это
while True:
...
...
if input("Play again? ") == "no":
break
Вы можете избавиться от play
переменной с помощью break
и while True
.