[英]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.