Обратная польская запись: что посчитает стек на выражении 5 1 2 + 4 * + 3 -
Калькулятор обратной польской записи читает токены слева направо: число кладётся на стек, операция снимает два верхних числа и кладёт обратно результат.
def rpn(tokens):
stack = []
for t in tokens:
if t in ('+', '-', '*'):
b = stack.pop()
a = stack.pop()
if t == '+':
stack.append(a + b)
elif t == '-':
stack.append(a - b)
else:
stack.append(a * b)
else:
stack.append(int(t))
return stack.pop()
print(rpn(['5', '1', '2', '+', '4', '*', '+', '3', '-']))
Что выведет этот код?
- 17
- -14
- Код упадёт с IndexError: к последней операции в стеке не останется двух чисел
- 14
