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()来提示用户?
返回的对象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从用户收到的输入是危险的,应该避免.恶意用户可能会输入一些内容,这些内容在评估时可能会导致数据丢失或耗尽您计算机的资源.