计算后缀表达式的值
我们知道,后缀表达式形如:ABC*+,运算符只作用于离他最近的两个操作数。所以,上面的后缀表达式转换为中缀表达式为:A+B*C
所以,我们计算后缀表达式的值时,遇到操作数就把他push到栈里,遇到运算符,就从栈里pop出两个操作数,进行运算。把结果再压入栈,继续运算,知道表达式读取完毕。这样就可以了。
定义栈:
class Stack(object):
def __init__(self):
self.item = []
def isEmpty(self):
return self.item == []
def push(self, data):
self.item.append(data)
def pop(self):
return self.item.pop()
def peek(self):
return self.item[len(self.item) - 1] # 返回栈顶元素
def search(self, x):
return self.item.index(x)
def size(self):
return len(self.item)
转换函数:
def calculate(s):
stack = Stack()
tokenList = s.split() # 默认分隔符为空格
for token in tokenList:
if token in '0123456789':
stack.push(token)
else:
token1 = int(stack.pop())
token2 = int(stack.pop()) # 弹出栈顶两个操作数
result = doMath(token, token1, token2)
stack.push(result)
return stack.pop()
def doMath(cl, op1, op2):
if cl == '+':
return op1+op2
if cl == '-':
return op1-op2
if cl == '*':
return op1*op2
if cl == '/':
return op1/op2
测试:
print(calculate('4 5 6 * +'))
输出: