Начиная с Python 3, input возвращает строку, которую вы должны явно преобразовать в int, вот так
x = int(input("Enter a number: ")) y = int(input("Enter a number: "))
Вы можете принимать числа с любой базой, например, так
>>> 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:"))
Различия между Python 2 и 3
Краткие сведения
input Функция Python 2 оценивает полученные данные, неявно преобразуя их в целое число (прочитайте следующий раздел, чтобы понять значение), но input функция Python 3 больше этого не делает.
Эквивалентом 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'>)
Ответ 2
В Python 3.x, raw_input был переименован в input, а Python 2.x input был удален.
Это означает, что, точно так же, как raw_input, input в Python 3.x всегда возвращает объект string.
Чтобы устранить проблему, вам нужно явно преобразовать эти входные данные в целые числа, поместив их в int:
x = int(input("Enter a number: ")) y = int(input("Enter a number: "))
Ответ 3
Для нескольких целых чисел в одной строке, map может быть лучше.
arr = map(int, raw_input().split())
Если число уже известно (например, 2 целых числа), вы можете использовать
num1, num2 = map(int, raw_input().split())
Ответ 4
input() (Python 3) и raw_input() (Python 2) всегда возвращают строки. Преобразуйте результат в целое число явно с помощью int().
x = int(input("Enter a number: ")) y = int(input("Enter a number: "))