初学者-TypeError:“ dict”对象不可调用

时间:2019-06-03 16:46:04

标签: python python-3.x

我正在尝试使用“ lambda”作为运算符的选项来构建计算器。问题是-我找不到一种打印方法,因此当所有这些都等于用户选择的值时,我将使用用户选择的2个数字和列表中的一个运算符来获得答案。

我知道我可以为每个运算符分别使用'if'和'elif'来解决此问题,但是我故意要使用'lambda'。 我这样做是为了学习如何以这种方式使用此功能,并让我或以后希望使用它的任何人更轻松,更快速地添加运算符。

def InputNumber(message):
    while True:
        try:
            userinput = int(input(message))
        except ValueError:
            print("Not an integer! Please try again.")
        else:
            return userinput


operators = {
    "+": lambda n: num1 + num2,
    "*": lambda n: num1 * num2,
    "-": lambda n: num1 - num2,
    "/": lambda n: num1 / num2,
}


def cal_fund(message):
    while True:
        operator = (input("Please enter your operation (+, -, *, /): "))
        if operator in list(operators.keys()):
            return operator
        else:
            print("Not an operation! Please try again.")


while True:
    num1 = InputNumber("Please enter a number: ")
    opera = cal_fund("Please enter your operation (+, -, *, /): ")
    num2 = InputNumber("Please enter another number: ")

    print(operators(num1, num2))
    print("-" * 15)

现在,这是我得到的错误(我知道问题是我使用字典,但没有找到其他可用于此特定方式的东西):

Traceback (most recent call last):
File "", line 34, in <module>
  print(operators(num1, num2))
TypeError: 'dict' object is not callable

1 个答案:

答案 0 :(得分:5)

问题

  • operators是无法调用的词典。因此,不允许operators(..)

  • 字典中的
  • lambda值应收到两个值才能使操作正常进行。

修复

将字典更新为:

operators = {
    "+": lambda num1, num2: num1 + num2,
    "*": lambda num1, num2: num1 * num2,
    "-": lambda num1, num2: num1 - num2,
    "/": lambda num1, num2: num1 / num2,
}

然后使用:

print(operators[opera](num1, num2))