![](/img/trans.png)
[英]Parsing a mathematical string expression in Python using regular expressions
[英]Parsing mathematical expressions in python
所以我目前正在开发一个 python 程序来解析数学表达式字符串并评估它们。 我目前有以下代码:
def evaluate(string):
expr = [a for a in string if a!=" "]
for i,char in enumerate(expr):
if char=="/":
tmp = int(expr[i-1])/int(expr[i+1])
expr[i+1] = tmp
expr.pop(i)
expr.pop(i-1)
elif char=="*":
tmp = int(expr[i-1])*int(expr[i+1])
expr[i+1] = tmp
expr.pop(i)
expr.pop(i-1)
for i,char in enumerate(expr):
if char=="-":
tmp = int(expr[i-1])-int(expr[i+1])
expr[i+1] = tmp
expr.pop(i)
expr.pop(i-1)
elif char=="+":
tmp = int(expr[i-1])+int(expr[i+1])
expr[i+1] = tmp
expr.pop(i)
expr.pop(i-1)
return expr
我给了它输入2 / 2 + 3 * 4 - 6 * 2
它返回["13", "-", "12"]
。 我用来诊断问题的一些步骤是:
1. 我将返回表达式移动到两个 for 循环之间。 然后程序返回["1.0", "+", "12", "-", "12"]
,所以我知道第二个循环只评估+
。
2.我认为可能是-
代码块的问题,但是当我将输入更改为2 / 2 + 3 * 4 + 6 * 2
它输出["13", "+", "12"]
3. 我让它在第二个循环中打印出 i ,它打印出0,1,2
。 所以问题来了,它只遍历列表的前 3 个元素。
我觉得问题与修改列表有关,并且以某种方式搞砸了枚举。 但是问题是什么使得第一个 for 循环工作正常而它打破了第二个? 任何帮助将不胜感激,因为我很困惑
使用这个改进的代码:
def evaluate(string):
expr = [a for a in string if a!=" "]
while( ('*' in expr) or ('/' in expr) or ('+' in expr) or ('-' in expr) ):
for i,char in enumerate(expr):
if char=="/":
expr[i+1] = int(expr[i-1])/int(expr[i+1])
del expr[i]
del expr[i-1]
elif char=="*":
expr[i+1] = int(expr[i-1])*int(expr[i+1])
del expr[i]
del expr[i-1]
for i,char in enumerate(expr):
if char=="-":
expr[i+1] = int(expr[i-1])-int(expr[i+1])
del expr[i]
del expr[i-1]
elif char=="+":
expr[i+1] = int(expr[i-1])+int(expr[i+1])
del expr[i]
del expr[i-1]
return expr
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.