在递归迭代列表并将值与字典匹配时获取密钥错误,Python

时间:2017-10-09 11:43:42

标签: python recursion

我的功能在以下输入interpret(["NOT", "true"], {"NOT": "false"})

失败

基本上,该函数是关于“创建我自己的”逻辑值运算符,如果列表中的值与字典中的键匹配则解释它们。我在这里KeyError: "true",但我不知道如何解决它。

我的递归错误还是什么?它应该返回“false”,因为在这种情况下“NOT”等于“false”,但在其他情况下,如果你知道我的意思,它应该作为普通的非操作函数。

我的功能代码:

def interpret(logicalExpression, interpretation):
    if type(logicalExpression) is str:  #
        if not interpretation:
            return logicalExpression
        return interpretation[logicalExpression]
    elif len(logicalExpression) == 1:
        return interpret(logicalExpression[0], interpretation)
    elif logicalExpression[1] == "OR" and len(logicalExpression) >= 3:
        if interpret(logicalExpression[0], interpretation) == "true" or interpret(logicalExpression[2:], interpretation) == "true":
            return "true"
        else:
            return "false"
    elif logicalExpression[1] == "AND" and len(logicalExpression) >= 3:
        if interpret(logicalExpression[0], interpretation) == "true" and interpret(logicalExpression[2:], interpretation) == "true":
            return "true"
        else:
            return "false"

    if logicalExpression[0] == "NOT" and len(logicalExpression) == 2:
        if interpret(logicalExpression[1:], interpretation) == "false":
            return "true"
        else:
            return "false"

1 个答案:

答案 0 :(得分:0)

错误在您的输入中。

您在 logicalExpression 中传递"true",但未在解释中传递"true" KeyError 是正确的行为。

我想你想传递解释,如{"true": "true", "false": "false"}

>>> interpret(["NOT", "true"], {"true": "true", "false": "false"})
'false'