aboutsummaryrefslogtreecommitdiff
path: root/challenge-039/lubos-kolouch/python/ch-2.py
blob: fef9738bb967d72455aac4dfe77f946bdf6a7d86 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#!/usr/bin/env python
# -*- coding: utf-8 -*-


def evaluate_rpn(expression: str) -> float:
    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:  # token == "/"
                stack.append(a / b)
        else:
            stack.append(float(token))

    return stack[0]


if __name__ == "__main__":
    rpn_expression = "3 4 + 2 * 1 +"
    result = evaluate_rpn(rpn_expression)
    print(f"RPN expression: {rpn_expression}")
    print(f"Result: {result}")