题目描述
获取一个随机验证码并通过eval()函数校对是否与用户输入值一致
题目来源及自己的思路
我的思路是直接eval函数进行计算字符串表达式,但不行,后来发现新建一个变量可以完成完整代码,如我注释掉的两行代码,但我不明白为什么我这种直接调用的不行?
相关代码
粘贴代码文本(请勿用截图)
import random
a = str(random.randint(0, 10))
b = str(random.randint(0, 10))
x = input(f"请输入计算验证信息的结果({a}+{b}):")
# y = f"{a} + {b}"
# r = eval(y)
r = str(eval('a + b'))
if x == str(r):
print("您已经通过验证!")
else:
print("您的验证信息输入有误!")
你期待的结果是什么?实际看到的错误信息又是什么?
我希望看到我验证成功
实际看到的截图如下
eval('a + b')
eval需要在上下文中查找,a
和b
的值的。很显然,并没有在上下文中设置a, b
的值。所以,你这样写才可以
关于
globals
和locals
你可以在这里看下。https://docs.python.org/3/lib...
https://docs.python.org/3/lib...
https://docs.python.org/3/lib...
eval('a+b', {'a': a, 'b': b})
其实就是在globals()
全局命名空间中添加了如下: