Как вызвать функцию в словаре Python - PullRequest
0 голосов
/ 02 августа 2020

Я относительно новичок в программировании Python, так что, пожалуйста, простите меня за вопрос новичка. Я пытаюсь понять, можно ли вообще вызвать методы операции (add, sub, mul, div).

Программа представляет собой простой калькулятор, который принимает серию целых чисел и операторов и выполняет вычисления после нажатия "=".

Некоторые отмечены для ясности;

  1. comb - это список чисел и операторов, созданный пользователем, как показано в опсимволах словаря.

  2. строка, начинающаяся с гребня [0], является тестовой, со временем я заменю ее более полным способом выполнения расчета на основе длины гребенки

У меня проблемы с кодом:

def calculator():
    opsymbols = {'+':add, '-':sub, '*':mul, '/':div}
    for sym in opsymbols:
        if sym == comb[1]: 
            opsymbols[sym]
            print(sym) # check to see whether the IF logic works.
    a = comb[0] 
    print(a) # check to see if assignment of "a" works
    b = comb[2]
    print(b) # check to see if assignment of "b" works

def add():
    a = int()
    b = int()
    result = a + b
    print("result =" + str(result))

def sub():
    a = int()
    b = int()
    result = a - b
    print("result =" + str(result))

def mul():
    a = int()
    b = int()
    result = a * b
    print("result =" + str(result))

def div():
    a = int()
    b = int()
    result = a / b
    print("result =" + str(result))

Ответы [ 2 ]

1 голос
/ 03 августа 2020

Просто создайте второй словарь с указателями на каждую из этих функций. В качестве альтернативы вы можете просто запустить 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))

Даже если у вас есть несколько операций с несколькими входными числами, вы можете просто разделить каждый разделитель операций и рекурсивно запустить список этих вычислений через функцию вычисления

1 голос
/ 02 августа 2020

Вы имеете в виду этот вызов?

opsymbols[sym]()

У вас также есть проблема с теневыми переменными. Но все же вы ищете решение, упомянутое выше. Вам нужно вызвать fun c в словаре, используя клавишу sym и оператор функции ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...