解决方案
从Python 3开始,input返回一个字符串,你必须显式地将其转换为int,就像这样
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的输入函数计算接收到的数据,隐式地将其转换为整数(阅读下一节以了解其含义),但Python 3的输入函数不再这样做了。
Python 2与Python 3的输入等价的是raw_input函数。
Python 2. x
有两个函数用于获取用户输入,分别称为input和raw_input。它们之间的区别是,raw_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看作是由eval调用组成的raw_input。
>>> data = eval(raw_input("Enter a number: "))
Enter a number: 5 + 17
>>> data, type(data)
(22, <type 'int'>)
注意:在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的输入和Python 2。Python 3.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'>)