Python计算器:键E

2024-09-29 23:30:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我的代码(如下)出现以下错误:

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:我只是把休息时间改为通过

谢谢大家!你知道吗


Tags: lambda代码inpy错误operationfileint
2条回答

return语句的缩进是不正确的,因为它在循环中而不是在循环之后执行。您需要将该语句取消缩进一级。你知道吗

此外,您的数字分配到数字是关闭的。只有第一个数字才会成为第一个数字,因为在那之后,它将不再是""。可以通过将其更改为使用操作的存在来确定要创建的数字来修复此问题:

if operation is None:
    firstnum += char
else:
    secondnum += char

你不会注意到这一点,除非你尝试在你的第一个数字中使用一个以上的数字,但是像123+123这样的东西不会给你你想要的。你知道吗

就能够在表达式中使用空格而言,break不是答案,因为它将提前退出循环。也许处理这个问题的最简单方法是用pass忽略它们,记住这将忽略所有的空格,包括内部数字。你知道吗

你搞错了你的缩进;你的return在你的for里面,所以它会在你到达第一个循环的末尾时立即执行。把它去掉一次,这样它就在外面了。你知道吗

相关问题 更多 >

    热门问题