Obliczanie wyrażenia w ONP

Stos, kolejka i odwrotna notacja polska - Algorytmy: zakres rozszerzony (Python)

W **odwrotnej notacji polskiej** (ONP) operator stoi za argumentami: zamiast (3 + 4) * 2 piszemy `3 4 + 2 *`. Nawiasy nie są potrzebne. Obliczanie używa stosu: liczbę odkładamy, a operator zdejmuje dwie liczby, wykonuje działanie i odkłada wynik. Na końcu na stosie zostaje wartość wyrażenia.

def evaluate_rpn(expression):
    stack = []
    for token in expression.split():
        if token in "+-*/":
            b = stack.pop()
            a = stack.pop()
            if token == "+":
                stack.append(a + b)
            elif token == "-":
                stack.append(a - b)
            elif token == "*":
                stack.append(a * b)
            else:
                stack.append(a / b)
        else:
            stack.append(float(token))
        print(f"{token:>3}  stos: {stack}")
    return stack.pop()


print("wynik:", evaluate_rpn("3 4 + 2 *"))

Ładowanie interaktywnego edytora... Jeśli się nie pojawi, włącz JavaScript.

Wszystkie lekcje kursu Algorytmy: zakres rozszerzony·Zaloguj się, aby zapisać postęp na koncie.