簡體   English   中英

評估后綴(Stack python)

[英]Evaluate postfix (Stack python)

我到目前為止是:

Stack = ArrayStack()

def evaluate(postfix_str, Stack):
    for c in postfix_str:
        if c not in '+-*/()':
            Stack.push(int(c))
        else:   
            c.split(" ") 
            if c == '+':
                sum = Stack.pop() + Stack.pop()
                Stack.push(sum)
            elif c == '-':
                difference = Stack.pop() - Stack.pop()
                Stack.push(difference)
            elif c == '*':
                product = Stack.pop() * Stack.pop()
                Stack.push(product)
            elif c == '/':
                quotient = Stack.pop() / Stack.pop()
                Stack.push(quotient)
            else:
                Stack.push(int(c))
                
    return Stack.pop()

print(evaluate('234*-', Stack))  # 10

這段代碼應該找到一個運算符,將其操作數從堆棧中彈出,運行該操作,然后將結果推回堆棧。 但是當我運行我的代碼時,假設我的一個測試用例是 ('234*-'),所以我得到的不是 -10,而是 10。

實際上, 10是正確答案。 Stack 是一個 LIFO(后進先出)結構,它具有 Python 實現,只是一個繼承list class,帶有push==append (在末尾添加一個元素)和pop刪除列表的最后一個元素。

Step 1: c=(2) ; Stack = [] ; action = Push(2) ; Stack = [2]
Step 2: c=(3) ; Stack = [2] ; action = Push(3) ; Stack = [2, 3]
Step 3: c=(4) ; Stack = [2, 3] ; action = Push(4) ; Stack = [2, 3, 4]
Step 4: c=(*) ; Stack = [2, 3, 4] ; action = Push(Pop(4) * Pop(3)) ; Stack = [2, 12]
Step 5: c=(-) ; Stack = [2, 12] ; action = Push(Pop(12) - Pop(2)) ; Stack = [10] 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM