python中的数字输入识别

Jos*_*kes 0 python math boolean

我正在尝试创建一个询问数学方程式的脚本,然后用户必须输入他们认为的答案,然后python会输出答案

但是,由于某些原因,python不喜欢与eval语句相关的raw_input().

例如,代码是:

print "What's 5+4"
a = raw_input()
print eval('5+4')
Run Code Online (Sandbox Code Playgroud)

如果我输入10进入var'a',我会收到此错误消息.

Traceback (most recent call last):
File "/tmp/W1SVH/Math.py", line 3, in <module>
print eval('5 +4')
File "<string>", line 1, in <module>
TypeError: cannot concatenate 'str' and 'int' objects
Run Code Online (Sandbox Code Playgroud)

但是,如果我要用数字'5'替换raw_input,脚本看起来像这样.

print "What's 5+4"
a = 9
print eval('5+4')
Run Code Online (Sandbox Code Playgroud)

然后它将返回9,因此5 + 4 = 9.

有没有解决这个问题,以便我可以使用raw_input()来提示用户?

sna*_*erb 5

返回的对象raw_input()是一个字符串.在使用它进行算术运算之前,需要将其转换为整数.您可以使用int 内置功能执行此操作.

print "What's 3+7"
a = int(raw_input())
print eval('a +4')
Run Code Online (Sandbox Code Playgroud)

编辑:

正如ShadowRanger所观察到的那样,使用eval冗余一次a是一个整数,所以你可以让Python评估结果:

print "What's 3+7"
a = int(raw_input())
print(a + 4)
Run Code Online (Sandbox Code Playgroud)

这不仅更容易阅读,而且更安全.使用eval从用户收到的输入是危险的,应该避免.恶意用户可能会输入一些内容,这些内容在评估时可能会导致数据丢失或耗尽您计算机的资源.

  • 当然,一旦它是一个整数,你可以跳过`eval`:`print a + 4` (2认同)