Вы можете определить словарь ops
, который используется для сопоставления каждого оператора соответствующей математической операции, далее вы можете определить словарь ops_pr
(приоритеты операций), который представляет приоритет каждой операции в контексте математические операции. И затем на основе информации из этих двух словарей мы можем определить результат данного выражения.
Использование:
import operator
def calc_exp(a, b, c, op1, op2):
ops = {"/": lambda x, y: x / y, "*": operator.mul, "+": operator.add, "-": operator.sub}
ops_pr = {"/": 4, "*": 3, "+": 2, "-": 1}
if ops_pr[op1] >= ops_pr[op2]:
return ops[op2](ops[op1](a, b), c)
return ops[op1](a, ops[op2](b, c))
Вызов функции:
print(calc_exp(10, 20, 30, '+', '+')) # 10 + 20 + 30
print(calc_exp(10, 20, 30, '-', '-')) # 10 - 20 - 30
print(calc_exp(10, 20, 30, '+', '*')) # 10 + 20 * 30
print(calc_exp(10, 20, 30, '*', '/')) # 10 * 20 / 30
Это печатает:
60
-40
610
6.666666666666666