我有两个字符串,一个是"K <- L * 5"
,另一个是"K <- 5 * L"
有没有办法在Python 3中比较这些并返回True
? (因为它们是相同的,但顺序不同)
我正在寻找一种解决方案来仅比较<-
之后的第二部分
具体来说,我希望第二部分给出相同的结果。
E.g。
"5 % 3"
和"3 % 5"
不一样"L * 5"
和"5 * L"
相同也许字典可以提供帮助,但我对Python并不熟悉。
答案 0 :(得分:1)
正如评论中所解释的那样,检查语义是一个障碍。您可以为这些数学表达式构建自己的(或找到其他人的)语法分析器。
解决方法是使用已内置的数学功能并将表达式转换为有效表达式。我选择在这里将所有数字和字母转换为它们的Ascii等价物。您可以选择自己在转换中有多挑剔(降低全部大写,仅使用某些字母等等),但这是一个有效的例子。
def main():
opt1_raw = "K <- N * 5"
opt2_raw = "K <- 5 * N"
opt1 = opt1_raw.split("<-")[1]
opt2 = opt2_raw.split("<-")[1]
ascii_exp = ''.join([str(ord(char)) if char.isdigit() or char.isalpha() else char for char in opt1])
s = eval(ascii_exp)
ascii_exp = ''.join([str(ord(char)) if char.isdigit() or char.isalpha() else char for char in opt2])
p = eval(ascii_exp)
print(opt1 +" and " + opt2 +": " + str(s==p))
main()
在循环中,我将所有digits
和alphas
(字母)转换为等同的ascii,让“*
”和“/
”等运算符成为他们在哪里。然后我使用eval()
让python评估表达式。评估结果可能如下所示:76*53
而不是"L*5"
然后我只是比较结果。我相信你可以找到一种更优雅的方式来合并它,但它是评估这种抽象表达式的一个例子。
输出:
L*5 and 5*L: True
L*5 and 5 % 3: False
5 % 3 and 3 % 5: False
L*5 and 5 % 3: False