Python 2.x
Были две функции, чтобы получить пользовательский int, вызванный input
и input
. Разница между ними: raw_input
не оценивает >>> data = eval ( raw_input ( «Введите число:» )) Введите число : 5 + 17 >>> данные , тип ( данные ) ( 22 , < type ' int ' >) и возвращается как есть, в строковой форме. Но, будет оценивать все, что вы ввели, и результат оценки будет возвращен. Например, input
>>> import sys
>>> sys.version
'2.7.6 (default, Mar 22 2014, 22:59:56)
[GCC 4.8.2]'
>>> data = raw_input("Enter a number: ")
Enter a number: 5 + 17
>>> data, type(data)
('5 + 17', <type 'str'>)
Данные input
оцениваются и результат raw_input
. Когда он оценивает выражение raw_input
, он обнаруживает, что вы добавляете два числа, и поэтому результат будет иметь тот же int
тип. Таким образом, преобразование типа выполняется бесплатно и возвращается в результате и сохраняется в переменной. Вы можете думать, как составленный с вызовом.>>> import sys >>> sys.version '3.4.0 (default, Apr 11 2014, 13:05:11) [GCC 4.8.2]' >>> data = input("Enter a number: ") Enter a number: 5 + 17 >>> data, type(data) ('5 + 17', <class 'str'>)
int
data
input
int
eval
x = int(input("Enter a number: "))
y = int(input("Enter a number: "))
Примечание: вы должны быть осторожны, когда используете input
Python 2.x. Я объяснил, почему нужно быть осторожным при его использовании в этом ответе .
Но, 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
Python 3.x
Python 3.x input
и Python 2.x ValueError
аналогичны и недоступны в Python 3.x.>>> 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'
while True:
...
...
if input("Play again? ") == "no":
break
Решение
Чтобы ответить на ваш вопрос, поскольку Python 3.x не оценивает и не конвертирует тип данных, вам необходимо явно преобразовать его в int
s int
, так как, например,
play
Вы можете принимать номера любой базы и преобразовывать их непосредственно в base-10 с помощью int
функции, например
break
Второй параметр указывает, что является базой введенных чисел, а затем внутренне понимает и преобразует его. Если введенные данные ошибочны, он будет бросать a while True
.
;
Кроме того, ваша программа может быть изменена немного, как это
raw_input
Вы можете избавиться от input
переменной, используя input
и raw_input
.
PS : Python не ожидает input
в конце строки :)