Помогите доработать код калькулятора выражений в обратной польской записи

Напишите калькулятор выражений в обратной польской записи. В выражении должны поддерживаться числа, знаки бинарных операций ‘+’, ‘-’, ‘*’, ‘/’. Польская запись записывается в одну строку, причем элементы польской записи разделяются произвольным количеством пробелов. Пробелы обязательны, когда необходимо отделить два числа друг от друга и допускаются для разделения знаков операций друг от друга или знаков операций и чисел, а также в начале и конце строки. Гарантируется, что польская запись является корректной записью некоторого выражения. Пример польской записи:

1 2 3 +*

Числа-операнды записываются в пятеричной симметричной системе счисления (см. например, описание троичной симметричной системы счисления). В качестве отрицательных цифр пятеричной симметричной системы счисления используются цифры B, обозначающая -2, и A, обозначающая -1. Таким образом, число B2 в пятеричной симметричной системе счисления - это число -8 в десятичной системе счисления.

Калькулятор должен обрабатывать 27-разрядные числа с фиксированной точкой, в которых младшие 11 разрядов отводится под дробную часть, а старшие 16 разрядов - под целую часть. Например, число 120.0102 в виде 27-разрядного числа с фиксированной точкой запишется как 000000000000012001020000000.

На вход подаются числа, у которых целая часть отделяется от дробной символом “точка”, причем гарантируется, что в целой части числа находится не более чем 16 значащих разрядов, а в дробной части - не более чем 11 значащих разрядов. У числа с нулевой дробной частью дробная часть может отсутствовать.

Ваша программа должна вычислить выражение и вывести результат в виде 27-разрядного числа в пятеричной симметричной записи. Если при вычислении возникла ошибка, например, результат вычисления операции после округления не может быть представлен с требуемой разрядностью, должна быть выведена строка ЕRROR.

При вычислении результата операций используйте округление к ближайшему представимому значению.

polskiu = []
s = input().split()
for x in s:
    if x == '+':
        g = polskiu.pop()
        z = polskiu.pop()
        polskiu.append(g + z)
    elif x == '-':
        g = polskiu.pop()
        z = polskiu.pop()
        polskiu.append(z - g)
    elif x == '*':
        g = polskiu.pop()
        z = polskiu.pop()
        polskiu.append(g * z)
    else:
        polskiu.append(int(x))
print(polskiu[0])

НО, у меня не получается вывести результат в виде 27-разрядного числа в пятеричной симметричной записи и сделать обработку ошибки сказанной выше в условии.


Ответы (1 шт):

Автор решения: Vlad
s = input().split()
polskiu = [int(s[0])]

for i in range(len(s) - 2):
    polskiu.append(int(s[i + 1]))
    x = s[-1][i]
    if x == '+':
        g = polskiu.pop()
        z = polskiu.pop()
        polskiu.append(g + z)
    elif x == '-':
        g = polskiu.pop()
        z = polskiu.pop()
        polskiu.append(z - g)
    elif x == '*':
        g = polskiu.pop()
        z = polskiu.pop()
        polskiu.append(g * z)
print(polskiu[0])
→ Ссылка