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
Другий параметр вказує, що є базою введених чисел, а потім внутрішньо він це розуміє та перетворює. Якщо введені дані неправильні, він викине a 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
.