使用eval函数

时间:2018-01-16 16:51:13

标签: python python-3.x

我正在尝试在以下场景中使用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) 函数:

  • 假设我有两个表达式:

    1. A←A * 3
    2. A←3 * A
    3. 在这些表达的后半部分,我希望得到真实,因为它们是平等的。

    4. 假设我还有其他两个表达式:

      1. A←A%3
      2. A←3%A

在这些表达的后半部分,我想得到假,因为它们不相等。

我已经完成了Stack Overflow的帮助,一个大型程序,我很好奇的部分是:

if  ( x != y ) :
    sys.exit()
else :
    print("Equals")

对于具有y变量的opt2也是如此,然后我比较两个变量x和y。

在我的课程结束时,我有以下几行:

jekyll build

此示例的结果不是“等于”。

为什么不起作用?

1 个答案:

答案 0 :(得分:0)

主要问题是你有ascii_exp1 = ''.join(str(ord(char)))而不是ascii_exp1 += ''.join(str(ord(char))),也就是说,你正在替换整个事物而不是追加它。因此,您只是比较每个字符串中最后一个字符的值,这些值不相等。 (请注意,您需要在循环上方声明ascii_exp1,以便在循环内附加到它。)

str(ord(char))对于数字来说也是一件非常奇怪的事情,你的2s变成'50'而不是'2',正如你所希望的那样。我认为你应该忽略char.isdigit()部分并保留原样,eval将正确读取它们。

编辑回应评论:啊,是的,你也错过了其他案件。这是固定代码:

opt1_raw = "A ^ T + 2"
opt2_raw = "A ^ 2 + T"

opt1 = opt1_raw.split("^")[1]
opt2 = opt2_raw.split("^")[1] 

ascii_exp1 = ''
for char in opt1 : 
    if char.isdigit() or char.isalpha() :        
        ascii_exp1 += ''.join(str(ord(char)))
    else:
        ascii_exp1 += char
x = eval(ascii_exp1)

ascii_exp2 = ''
for char in opt2 : 
    if char.isdigit() or char.isalpha() :        
        ascii_exp2 += ''.join(str(ord(char)))
    else:
        ascii_exp2 += char

y = eval(ascii_exp2)

print x == y
相关问题