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