[英]Evaluate postfix (Stack python)
我到目前为止是:
Stack = ArrayStack()
def evaluate(postfix_str, Stack):
for c in postfix_str:
if c not in '+-*/()':
Stack.push(int(c))
else:
c.split(" ")
if c == '+':
sum = Stack.pop() + Stack.pop()
Stack.push(sum)
elif c == '-':
difference = Stack.pop() - Stack.pop()
Stack.push(difference)
elif c == '*':
product = Stack.pop() * Stack.pop()
Stack.push(product)
elif c == '/':
quotient = Stack.pop() / Stack.pop()
Stack.push(quotient)
else:
Stack.push(int(c))
return Stack.pop()
print(evaluate('234*-', Stack)) # 10
这段代码应该找到一个运算符,将其操作数从堆栈中弹出,运行该操作,然后将结果推回堆栈。 但是当我运行我的代码时,假设我的一个测试用例是 ('234*-'),所以我得到的不是 -10,而是 10。
实际上, 10
是正确答案。 Stack 是一个 LIFO(后进先出)结构,它具有 Python 实现,只是一个继承list
class,带有push==append
(在末尾添加一个元素)和pop
删除列表的最后一个元素。
Step 1: c=(2) ; Stack = [] ; action = Push(2) ; Stack = [2]
Step 2: c=(3) ; Stack = [2] ; action = Push(3) ; Stack = [2, 3]
Step 3: c=(4) ; Stack = [2, 3] ; action = Push(4) ; Stack = [2, 3, 4]
Step 4: c=(*) ; Stack = [2, 3, 4] ; action = Push(Pop(4) * Pop(3)) ; Stack = [2, 12]
Step 5: c=(-) ; Stack = [2, 12] ; action = Push(Pop(12) - Pop(2)) ; Stack = [10]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.