Вы можете сделать это с помощью модуля Python ast.
https://docs.python.org/3.6/library/ast.html
theoperation - наша математическая операция, которую мы хотим оценить, мы используем isinstance, чтобы узнать, какой это тип, если это число, если это бинарный оператор (+, *, ..). Вы можете прочитать на https://greentreesnakes.readthedocs.io/en/latest/tofrom.html, как работает АСТ
И для того, чтобы метод работал, мы должны использовать: define (ast.parse (theoperation, mode = 'eval'). Body)
def evaluate(theoperation):
if (isinstance(theoperation, ast.Num)):
return theoperation.n
if (isinstance(theoperation, ast.BinOp)):
leftope= evaluate(theoperation.left)
rightope=evaluate(theoperation.right)
if (isinstance(theoperation.op, ast.Add)):
return left+right
elif (isinstance(theoperation.op, ast.Sub)):
return left-right
elif (isinstance(theoperation.op, ast.Mult)):
return left*right
elif (isinstance(theoperation.op, ast.Div)):
return left/right
elif (isinstance(theoperation.op, ast.Pow)):
return left**right