Просто создайте второй словарь с указателями на каждую из этих функций. В качестве альтернативы вы можете просто запустить eval () и добавить код операции во время выполнения.
Метод 1:
op_dict = {'+': add, '-': sub, '*': mult, '/': div } # dict with function pointers
op_dict[op]() # call the function
Метод 2:
return eval('{num1}{op}{num2}'.format(num1=num1, op=op, num2=num2))
Если вы собираетесь выполнить только эти 4 операции и вы рассчитываете только 2 числа, возможно, будет проще использовать Метод 2 и иметь все это делается в функции вычисления. Это будет выглядеть примерно так:
def calculate(input):
for op in ['+', '-', '*', '/']:
if op in input:
num1 = input.rsplit(op)[0]
num2 = input.rsplit(op)[-1]
return eval('{num1}{op}{num2}'.format(num1=num1, op=op, num2=num2))
Даже если у вас есть несколько операций с несколькими входными числами, вы можете просто разделить каждый разделитель операций и рекурсивно запустить список этих вычислений через функцию вычисления