自从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之间的区别
摘要
- 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的
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'>)