誰もこのスタックの質問に助けることができるかどうか疑問に思っていた メイン関数に2つの例があり、答えは1024と4096でなければならないが、100と144を得るだろう 問題はevaluate_postfix私はStackクラスは、あなたが右の要素をINGのpop
だが、間違った順序でスタックと評価ポストフィックス
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()
なぜあなたはそれらが正しい答えだと思いますか?あなたの最初の例では、2を押して10を押すと、3番目の要素「^」が得られます。それが意味すると思われる場合は、「直近に追加された2番目の要素のパワーに最近追加された要素を上げる」とすると、答えは10^2 = 100となります。それが意味すると思われる場合は、2番目に追加された要素を最近追加された要素の力に2^10 = 1024上乗せします。同じ問題は、可換性でないバイナリ演算子でも発生します。あなたのプログラムは間違っているわけではありませんが、おそらく問題のあなたの解釈はです。 –