我正在尝试在以下场景中使用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)
函数:
假设我有两个表达式:
在这些表达的后半部分,我希望得到真实,因为它们是平等的。
假设我还有其他两个表达式:
在这些表达的后半部分,我想得到假,因为它们不相等。
我已经完成了Stack Overflow的帮助,一个大型程序,我很好奇的部分是:
if ( x != y ) :
sys.exit()
else :
print("Equals")
对于具有y变量的opt2也是如此,然后我比较两个变量x和y。
在我的课程结束时,我有以下几行:
jekyll build
此示例的结果不是“等于”。
为什么不起作用?
答案 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