我想在 JSON 中定义嵌套的 if
语句并使用 Python 对其进行测试。我正在考虑一个带有嵌套分支的简单决策树,并进行递归测试。
伪代码:
# is_valid = (a == b OR a == a) AND c == c # True
tree = {
branches: [
{
value1: 'a',
operator: '==',
value2: 'b',
child_connector: 'or'
children: [
{
value1: 'a',
operator: '==',
value2: 'a'
}
]
},
{
connector: 'and',
value1: 'c',
operator: '==',
value2: 'c'
}
]
}
def is_tree_valid(tree):
# TODO
return
is_valid = is_tree_valid(tree)
当我在谷歌上搜索决策树时,我发现了很多与人工智能相关的内容,但往往太深入了。我正在寻找一些简单的东西,我猜这是一个常见的话题,并且经常被重新发明。
我希望获得代码片段、模块或任何其他建议来完成 is_tree_valid()
。
提前致谢!
最佳答案
这与输入和算法一样重要,但将它们设计在一起才是合理的。要评估的表达式的最简单编码是 AST 的直接翻译:
{
"operator": "and",
"left": {
"operator": "or",
"left": {
"operator": "==",
"left": "a",
"right": "b"
},
"right": {
"operator": "==",
"left": "a",
"right": "a"
}
},
"right": {
"operator": "==",
"left": "c",
"right": "c"
}
}
然后(在解析成明显的Python结构之后),评估看起来像
def evaluate(node):
try: op=node['operator']
except TypeError: return node # leaf
l=evaluate(node['left'])
r=node['right'] # not evaluated yet
if op=='==': return l==evaluate(r)
elif op=='and': return l and evaluate(r)
elif op=='or': return l or evaluate(r)
else: raise ValueError("unknown operator: %r"%op)
关于python - Python 中的简单决策树(嵌套 if 语句)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59346864/