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, )
Данные 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, )
Примечание: вы должны быть осторожны, когда используете 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', )
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', )
Решение
Чтобы ответить на ваш вопрос, поскольку Python 3.x не оценивает и не конвертирует тип данных, вам необходимо явно преобразовать его в int
s, с int
, как это
x = int(input("Enter a number: "))
y = int(input("Enter a number: "))
Вы можете принимать номера любой базы и преобразовывать их непосредственно в base-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 "", line 1, in
ValueError: invalid literal for int() with base 2: '1234'
Кроме того, ваша программа может быть немного изменена, например
while True:
...
...
if input("Play again? ") == "no":
break
Вы можете избавиться от переменной play
, используя break
и while True
.
PS: Python не ожидает ;
в конце строки:)