堆叠并评估postfix

时间:2017-09-02 02:11:13

标签: python python-3.x

我想知道是否有人可以帮助解决此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()

1 个答案:

答案 0 :(得分:1)

pop正确的元素,但顺序错误:

s.pop() ** s.pop()

一旦你的程序到达那一行,对于第一个例子,堆栈将如下所示:['2', '10']。它pop 10,然后是2,然后将10提升到2的幂。相反,你可以使用:

right = s.pop()
left = s.pop()
left ** right

您将收到所需的答案1024。同样的原则适用于其他运营商。