为什么 x
和 y
在下面的代码中是字符串而不是整数?
(Note: in Python 2.x use raw_input()
. In Python 3.x use input()
. raw_input()
was renamed to input()
in 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
原文由 user2509848 发布,翻译遵循 CC BY-SA 4.0 许可协议
解决方案
从 Python 3 开始,
input
返回一个字符串,您必须将其显式转换为int
s,使用int
,像这样您可以接受任何基数,并使用
int
函数将它们直接转换为基数 10,如下所示第二个参数告诉输入的数字的基数是什么,然后在内部理解并转换它。如果输入的数据有误,它会抛出
ValueError
。对于可以包含小数部分的值,类型将是
float
而不是int
:Python 2 和 3 之间的区别
概括
input
函数评估接收到的数据,将其隐式转换为整数(阅读下一节以了解其含义),但 Python 3 的input
函数不再执行此操作。input
是raw_input
函数。Python 2.x
有两个函数可以获取用户输入,称为
input
和raw_input
。它们之间的区别在于,raw_input
不评估数据并按原样以字符串形式返回。但是,input
将评估您输入的任何内容并返回评估结果。例如,对数据
5 + 17
进行评估,结果为22
。当它计算表达式5 + 17
时,它检测到您正在添加两个数字,因此结果也将是相同的int
类型。因此,类型转换是免费完成的,22
作为input
的结果返回并存储在data
变量中。您可以将input
视为raw_input
由eval
调用组成。注意: 在 Python 2.x 中使用
input
时要小心。我在 这个答案 中解释了为什么在使用它时要小心。但是,
raw_input
不评估输入并按原样作为字符串返回。Python 3.x
Python 3.x 的
input
和 Python 2.x 的raw_input
相似并且raw_input
在 Python 3.x 中不可用