2017-09-02 14 views
1

誰もこのスタックの質問に助けることができるかどうか疑問に思っていた メイン関数に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() 
+0

なぜあなたはそれらが正しい答えだと思いますか?あなたの最初の例では、2を押して10を押すと、3番目の要素「^」が得られます。それが意味すると思われる場合は、「直近に追加された2番目の要素のパワーに最近追加された要素を上げる」とすると、答えは10^2 = 100となります。それが意味すると思われる場合は、2番目に追加された要素を最近追加された要素の力に2^10 = 1024上乗せします。同じ問題は、可換性でないバイナリ演算子でも発生します。あなたのプログラムは間違っているわけではありませんが、おそらく問題のあなたの解釈はです。 –

答えて

1

を働いている知っているbecuase定義:最初例えば、

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

あなたのプログラムがその行に達すると、 tスタックは次のようになります:['2', '10']。それpop秒10、そして2、そして、あなたが使用することができ、代わりに、2の累乗に10を発生させます:

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

あなたが希望答え、1024が届きます。同じ原理が他の演算子にも当てはまります。

+0

スタックは通常、任意のインデックスからのポッピングをサポートしていません。代わりに、必要なものをすべてポップしてから操作をしたいと思うでしょう: 'left = s.pop();右= s.pop;プラス=左**右 'など – mgilson

+0

@mgilson:実装では、アイテムがどのようにポップされているかは関係ありませんが、操作については正しいです。私はそれを私の答えに加えます。 –

+0

ありがとうございました 私は新しいdefを追加しました。 – Rera