45 lines
2.1 KiB
Python
45 lines
2.1 KiB
Python
''' ****** Задание 19 из 20 *********
|
||
* В ОПН нет скобок и приоритета операций — всё вычисляется строго слева направо, с помощью стека.
|
||
Вы добавляете числа в стек, а когда встречаете оператор (+, -, *) — извлекаете два последних числа, применяете операцию и возвращаете результат обратно в стек.
|
||
|
||
Напишите программу, которая по введённому выражению в ОПН вычисляет результат.
|
||
|
||
Формат ввода
|
||
Вводится одна строка, содержащая разделённые пробелами целые числа и знаки операций +, -, *, которые вместе составляют корректное выражение в обратной польской нотации.
|
||
|
||
Формат вывода
|
||
Выводится одно целое число — результат вычисления выражения.
|
||
|
||
|
||
Подсказка
|
||
Рассмотрим первый пример:
|
||
|
||
7 2 3 * - читается так:
|
||
|
||
7 помещается в стек
|
||
2 помещается в стек
|
||
3 помещается в стек
|
||
2 и 3 извлекаются из стека и над ними производится операция умножения, а результат 6 помещается в стек
|
||
7 и 6 извлекаются из стека и над ними производится операция вычитания, а результат 1 помещается в стек
|
||
В конце выполнения в стеке остаётся ровно одно число — это и есть результат.
|
||
|
||
Пример 1
|
||
Ввод
|
||
|
||
7 2 3 * -
|
||
Вывод
|
||
|
||
1
|
||
'''
|
||
|
||
|
||
if __name__ == "__main__":
|
||
data = list(input().split())
|
||
result = [int(data[0])]
|
||
for i in data[1:]:
|
||
if i.isdigit():
|
||
result.append(int(i))
|
||
else:
|
||
a = result.pop()
|
||
exec("result[-1] " + i + "= a")
|
||
print(result[0]) |