首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >堆栈和评估后缀

堆栈和评估后缀
EN

Stack Overflow用户
提问于 2017-09-02 02:11:13
回答 1查看 88关注 0票数 1

我想知道是否有人能帮助解决这个堆栈问题,主函数中有两个例子,答案应该是1024和4096,但是我会得到100和144个,这个问题必须在evaluate_postfix定义中,因为我知道Stack类在工作。

代码语言:javascript
复制
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()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-02 02:17:27

您的pop是正确的元素,但顺序不对:

代码语言:javascript
复制
s.pop() ** s.pop()

一旦您的程序到达这一行,在第一个示例中,堆栈将如下所示:['2', '10']。它是pop的10,然后是2,然后将10提高到2的幂。相反,您可以使用:

代码语言:javascript
复制
right = s.pop()
left = s.pop()
left ** right

你会得到想要的答案,1024。同样的原则也适用于其他操作者。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46009853

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档