【发布时间】:2018-01-16 16:51:12
【问题描述】:
我正在尝试在以下场景中使用eval 函数:
-
假设我有两个表达式:
- A ← A * 3
- A ← 3 * A
在这些表达式的后半部分,我希望得到 True,因为它们是相等的。
-
假设我还有其他两个表达式:
- A ← A % 3
- A ← 3 % A
在这些表达式的后半部分,我希望得到 False,因为它们不相等。
在 Stack Overflow 的帮助下,我完成了一个大程序,我好奇的部分是:
import sys
def main() :
opt1_raw = "A ← T + 2"
opt2_raw = "A ← 2 + T"
opt1 = opt1_raw.split("←")[1]
opt2 = opt2_raw.split("←")[1]
for char in opt1 :
if char.isdigit() or char.isalpha() :
ascii_exp1 = ''.join(str(ord(char)))
x = eval(ascii_exp1)
对于带有 y 变量的 opt2 也是如此,然后我比较两个变量 x 和 y。
在我的程序结束时,我有以下几行:
if ( x != y ) :
sys.exit()
else :
print("Equals")
此示例的结果不是“等于”。
为什么它不起作用?
【问题讨论】:
-
什么不起作用?
-
比较 x 和 y 我得到了错误的结果。
-
您愿意分享一下预期结果和实际结果吗?实际上这个问题涉及的整个代码及其输出(如[SO]: mcve所述)
-
提示:在运行 eval 之前查看
ascii_exp1的值。 (编辑:实际上,我完全不确定您要对整个for块做什么。花点时间手动逐步完成它,看看它实际上在做什么。) -
谢谢,我这样做了,但 x 只保存最后一个数据,即使我把它放在“for in”之外。
标签: python python-3.x