我想知道是否有人可以帮助解决此Stack问题 主函数中有2个例子,答案应该是1024和4096,但我会得到100和144 问题必须在evaluate_postfix定义中,因为我知道Stack类正在工作
class Stack:
def __init__(self):
self.items = []
def is_empty(self):
return self.items == []
def push(self, item):
self.items.append(item)
def pop(self):
return self.items.pop()
def peek(self):
return self.items[len(self.items)-1]
def size(self):
return len(self.items)
def evaluate_postfix(text):
s = Stack()
for element in text:
plus = None
if element.isdigit():
s.push(int(element))
elif element == '^':
plus = s.pop() ** s.pop()
elif element == "+":
plus = s.pop() + s.pop()
elif element == "-":
plus = s.pop() - s.pop()
elif element == "*":
plus = s.pop() * s.pop()
elif element == "/":
plus = s.pop() / s.pop()
if plus is not None:
s.push(plus)
return s.pop()
def main():
print(evaluate_postfix(['2', '10', '^']))
print(evaluate_postfix(['2', '4', '3', '*', '^']))
main()
答案 0 :(得分:1)
你pop
正确的元素,但顺序错误:
s.pop() ** s.pop()
一旦你的程序到达那一行,对于第一个例子,堆栈将如下所示:['2', '10']
。它pop
10,然后是2,然后将10提升到2的幂。相反,你可以使用:
right = s.pop()
left = s.pop()
left ** right
您将收到所需的答案1024
。同样的原则适用于其他运营商。