我一直在尝试使用递归来解决这个“等式”(不使用正则表达式),但是由于某种原因,它会在par(string)
完成其第一个循环之后继续将def action(calc)
重置为从第一个par函数开始之前的位置(i)继续(在calc循环后,i局部变量重置为40)。
我的代码打印出来
1
1
1
如果我愿意
print par(equation)
它打印出
1
没有真正的理由要在函数内打印,但是我想知道你们是否可以在我的帮助下使用im python 2.7
这是我的代码:
equation = "[[[3+4] + [5*6]] + [5/7] / [[3+2] + [4/2]] * [2-1]]"
equation = equation.replace(" ", "")
def action(calc):
x = int(calc[0])
y = int(calc[2])
if calc[1] == "+":
result = x+y
elif calc[1] == "-":
result = x-y
elif calc[1] == "*":
result = x*y
else:
result = x/y
return result
def par(string):
for i in range(len(string)-1, 0, -1):
if string[i] == "]":
result = par(string[:i])
elif string[i] != "[":
calc = string[i-2:i+1]
result = action(calc)
return result
else:
return result
par(equation)