解决方案
从 Python 3 开始,input 返回一个字符串,您必须使用int 将其显式转换为ints,就像这样
x = int(input("Enter a number: "))
y = int(input("Enter a number: "))
您可以接受任何基数并使用int 函数将它们直接转换为以 10 为基数,就像这样
>>> 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 之间的区别
总结
- Python 2 的
input 函数评估接收到的数据,将其隐式转换为整数(阅读下一节以了解其含义),但 Python 3 的 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 视为由eval 调用组成的raw_input。
>>> data = eval(raw_input("Enter a number: "))
Enter a number: 5 + 17
>>> data, type(data)
(22, <type 'int'>)
注意:在 Python 2.x 中使用 input 时应小心。我在this answer 中解释了为什么使用它时要小心。
但是,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'>)