# Exercise: Implement Reverse Polish Calculator

Implement Reverse Polish Calculator

We are used to write calculations using the infix notation where the operator is between the two operands. e.g. **3 + 4 * 7**. In order to implement a calculator that knows how to calculate this
one needs to implement the order of operations.

In the Reverse Polish Notation the operator comes after the two operands. e.g. **3 4 +** instead of **3 + 4**.

In this notiation there are no preferences between operators.

The above expression can be written in RPN as:

3 4 7 * + =

The task is to implement RPN in your favorite language.

## Python

In order to make it easer for you I've prepared a module that implements the low-level calculations.

**examples/python/calc.py**

def calc(a, op, b): ''' from calc import calc calc(2, '+', 3) ''' if op == '+': return a + b if op == '*': return a * b if op == '-': return a - b if op == '/': return a / b raise Exception("Operator '{}' not supported".format(op)) def test_calc(): assert calc(2, '+', 3) == 5 assert calc(2, '*', 3) == 6 assert calc(8, '-', 3) == 5 assert calc(8, '/', 2) == 4 import pytest with pytest.raises(Exception) as exinfo: calc(2, '**', 3) assert exinfo.type == Exception assert str(exinfo.value) == "Operator '**' not supported" # To test this module, run pytest calc.py

## Solutions

Published on 2018-04-21