繁体   English   中英

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

[英]Beginner - TypeError: 'dict' object is not callable

我正在尝试使用“ 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

问题

  • 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))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM