Вопрос-Ответ

How can I read inputs as numbers?

Как я могу считывать входные данные как числа?

Почему в приведенном ниже коде вместо целых чисел используются x и y strings?

(Примечание: в Python 2.x используйте raw_input(). В Python 3.x используйте input(). raw_input() был переименован в input() в Python 3.x)

play = True

while play:

x = input("Enter a number: ")
y = input("Enter a number: ")

print(x + y)
print(x - y)
print(x * y)
print(x / y)
print(x % y)

if input("Play again? ") == "no":
play = False
Переведено автоматически
Ответ 1

Начиная с 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: "))
python python-3.x python-2.7