Python 计算器:按键错误
Python Calculator: Key Error
我的代码(如下)出现以下错误:
Traceback (most recent call last):
File "2.py", line 29, in <module>
print calculate(raw_input("enter expression"))
File "2.py", line 27, in calculate
return operations[operation](int(firstnum), int(secondnum))
KeyError: None
我已经尝试过几次代码,但仍然不明白为什么将正确的操作分配给变量 'operator',然后调用字典 'operations' 中的正确函数。
operations = {
"+": lambda x, y: x + y,
"-": lambda x, y: x - y,
"*": lambda x, y: x * y,
"/": lambda x, y: x / y
}
def calculate(expr):
firstnum = ""
secondnum = ""
operation = None
print expr
for char in expr:
if char.isdigit():
if firstnum != "":
secondnum += char
else:
firstnum += char
elif char.isspace():
break
elif char in operations:
operation = char
print operation
else:
raise Exception("invalid character: " + char)
return operations[operation](int(firstnum), int(secondnum))
print calculate(raw_input("enter expression"))
编辑:删除错误的缩进后,代码处理例如 7*4 但在 7 * 4 处给出相同的键错误。不明白为什么会这样。
EDIT2:我只是将 break 更改为 pass
谢谢大家!
你弄错了缩进;你的 return
在你的 for
里面,所以它会在你到达第一个循环结束时立即执行。将它凹一次,使其在外面。
您的 return
语句的缩进不正确,因为它在 中 循环而不是 after 循环。您需要将该语句缩进一级。
此外,您对号码的位数分配是关闭的。只有 first 数字会成为第一个数字,因为在那之后,它将不再是 ""
。这可以通过将其更改为使用操作的存在来决定您要创建的数字来解决:
if operation is None:
firstnum += char
else:
secondnum += char
除非您尝试在您的第一个数字中使用多个数字,否则您不会注意到这一点,但像 123+123
这样的数字不会给您预期的结果。
就能够在表达式中使用空格而言,break
不是答案,因为它会提前退出循环。也许处理这个问题的最简单方法是用 pass
忽略它们,请记住,这将忽略所有地方的空格,包括内部数字。
我的代码(如下)出现以下错误:
Traceback (most recent call last):
File "2.py", line 29, in <module>
print calculate(raw_input("enter expression"))
File "2.py", line 27, in calculate
return operations[operation](int(firstnum), int(secondnum))
KeyError: None
我已经尝试过几次代码,但仍然不明白为什么将正确的操作分配给变量 'operator',然后调用字典 'operations' 中的正确函数。
operations = {
"+": lambda x, y: x + y,
"-": lambda x, y: x - y,
"*": lambda x, y: x * y,
"/": lambda x, y: x / y
}
def calculate(expr):
firstnum = ""
secondnum = ""
operation = None
print expr
for char in expr:
if char.isdigit():
if firstnum != "":
secondnum += char
else:
firstnum += char
elif char.isspace():
break
elif char in operations:
operation = char
print operation
else:
raise Exception("invalid character: " + char)
return operations[operation](int(firstnum), int(secondnum))
print calculate(raw_input("enter expression"))
编辑:删除错误的缩进后,代码处理例如 7*4 但在 7 * 4 处给出相同的键错误。不明白为什么会这样。
EDIT2:我只是将 break 更改为 pass
谢谢大家!
你弄错了缩进;你的 return
在你的 for
里面,所以它会在你到达第一个循环结束时立即执行。将它凹一次,使其在外面。
您的 return
语句的缩进不正确,因为它在 中 循环而不是 after 循环。您需要将该语句缩进一级。
此外,您对号码的位数分配是关闭的。只有 first 数字会成为第一个数字,因为在那之后,它将不再是 ""
。这可以通过将其更改为使用操作的存在来决定您要创建的数字来解决:
if operation is None:
firstnum += char
else:
secondnum += char
除非您尝试在您的第一个数字中使用多个数字,否则您不会注意到这一点,但像 123+123
这样的数字不会给您预期的结果。
就能够在表达式中使用空格而言,break
不是答案,因为它会提前退出循环。也许处理这个问题的最简单方法是用 pass
忽略它们,请记住,这将忽略所有地方的空格,包括内部数字。