Оценка уравнения с приоритетом операций требует синтаксического анализатора.
К счастью, написание синтаксического анализатора для основной арифметики, то есть сложения и умножения, может быть достигнуто довольно просто без использования инструментов синтаксического анализа.
Код
import operator
ops = {
'-': operator.sub,
'+': operator.add,
'*': operator.mul,
'/': operator.truediv
}
def parse_mult(equation):
equation = iter(equation)
value = next(equation)
for token in equation:
if token == '*' or token == '/':
op = ops[token]
value = op(value, next(equation))
else:
yield value
yield token
value = next(equation)
yield value
def parse(equation):
equation = parse_mult(equation)
value = next(equation)
for token in equation:
op = ops[token]
value = op(value, next(equation))
return value
Пример
equation_list = [5, "-", 4, "*", 8]
print(parse(equation_list))
Выход
-27
Если вам когда-либо понадобится проанализировать уравнения с более чем двумя уровнями приоритета, чемвнешний инструмент разбора может стать необходимым.