我的任务是编写一个函数解释,它接受两个参数,一个有效表达式和一个解释,如果在这个特定的解释中整个表达式都是真的,则给出真值。逻辑常量和表达式应该作为字符串进行管理,因此您需要为布尔运算实现它们自己的函数。你知道吗
注意,函数应该返回“true”或“false”,而不是true或false。你知道吗
以下是一些可能的输入和输出:
>>> interpret(["door_open", "AND", "cat_gone"],
{"door_open" : "false", "cat_gone" : "true", "cat_asleep" : "true"} )
'false'
>>> interpret(["cat_asleep", "OR", ["NOT", "cat_gone"]],
{"door_open" : "false", "cat_gone" : "true", "cat_asleep" : "true"})
'true'
>>> interpret(["true", "OR", "true"], {})
'true'
>>> interpret("cat_gone", {"door_open": "false", "cat_gone": "true"})
'true'
>>> interpret(["NOT", ["NOT", ["NOT", ["cat_asleep", "OR", ["NOT", "cat_asleep"]]]]],
{"cat_asleep": "false"})
'false'
>>> interpret(["NOT", "AND", "true"], {"NOT":"true"})
'true'
>>> interpret(["NOT", "AND"], {"AND": "false"})
'true'
下面是我的代码,它适用于上面显示的第一种和最后一种情况,但在所有其他情况下,我要么得到错误的输出,要么一个都没有。这里有什么问题,我该怎么解决?你知道吗
def and_operator(statement, values):
if isinstance(statement[0], str) and isinstance(statement[2], str):
statement[0] = (statement[0], values)
statement[2] = (statement[2], values)
return "true" if statement[0] == "true" and statement[2] == "true" else "false"
if isinstance(statement[0], str):
return and_operator()
return interpret(statement[0], values), interpret(statement[2], values)
def or_operator(statement, values):
if isinstance(statement[0], str) and isinstance(statement[2], str):
statement[0] = (statement[0], values)
statement[2] = (statement[2], values)
return "true" if statement[0] == "true" or statement[2] == "true" else "false"
def not_operator(expr, value):
if isinstance(expr[1], str):
return "false" if expr[1] == "true" else "true"
return interpret(expr[1:], value)
def real_values(element, interp):
if element in interp:
element = interp[element]
return element
def item_is_list(e, i):
return True if isinstance(e[i], list) else False
def interpret(statement, interpretation):
length = len(statement)
if item_is_list(statement, 0):
return statement
if length == 3:
if statement[1] == "AND":
return and_operator(statement, interpretation)
elif statement[1] == "OR":
return or_operator(statement, interpretation)
elif len(statement) == 2:
return not_operator(statement, interpretation)
上面发布的代码的问题是它不处理子表达式,这在示例中似乎是允许的。在设计上,您似乎只允许二进制
AND
和OR
,以及一元NOT
。但是,and_operator
没有实现,子表达式也没有求解(通过递归调用interpret()
并处理它返回的值)。其他函数如real_values
没有用处。最后,必须检查输入表达式和词典的语法有效性。你知道吗如果你想了解口译的工作原理,你最好遵循一些教程,如this、this、或this。否则,如果您只需要该函数可靠地工作,则可以利用现有的、经过测试的代码,例如parse、pyparsing、甚至parser。你知道吗
相关问题 更多 >
编程相关推荐