我的代码(如下)出现以下错误:
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”,然后调用正确的函数dictionary“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"))
EDIT:删除错误的缩进后,代码处理示例7*4,但在7*4处给出相同的键错误。不明白为什么会这样。
EDIT2:我只是把休息时间改为通过
谢谢大家!你知道吗
return
语句的缩进是不正确的,因为它在循环中而不是在循环之后执行。您需要将该语句取消缩进一级。你知道吗此外,您的数字分配到数字是关闭的。只有第一个数字才会成为第一个数字,因为在那之后,它将不再是
""
。可以通过将其更改为使用操作的存在来确定要创建的数字来修复此问题:你不会注意到这一点,除非你尝试在你的第一个数字中使用一个以上的数字,但是像
123+123
这样的东西不会给你你想要的。你知道吗就能够在表达式中使用空格而言,
break
不是答案,因为它将提前退出循环。也许处理这个问题的最简单方法是用pass
忽略它们,记住这将忽略所有的空格,包括内部数字。你知道吗你搞错了你的缩进;你的
return
在你的for
里面,所以它会在你到达第一个循环的末尾时立即执行。把它去掉一次,这样它就在外面了。你知道吗相关问题 更多 >
编程相关推荐