tur*_*oup 4 python algorithm boolean list
我试图用仅包含列表的Python产品乘积形式(SOP)来表示布尔表达式。
例如,我有布尔表达式
ABC+DE(FG+IH)
Run Code Online (Sandbox Code Playgroud)
我需要找到与上面的表达式等效的列表,因此通过读取列表或嵌套列表并遵循某些规则来读取列表,读取列表的程序/程序员将能够将其转换回布尔表达式。
我想到的一种方法是构造嵌套列表。遵循两个规则:
因此,对于上面的示例,它将转换为:
[[A,B,C],[D,E,[[F,G],[I,H]]]]
Run Code Online (Sandbox Code Playgroud)
但是这套规则在某些情况下会发生冲突。例如,给定[[E,F],[D,C]],它可以表示EF + DC或EFDC,因为[E,F]和[D,C]在同一列表中,因此应将它们相加,但列表是并行的,因此也应进行“或”操作。
我觉得我需要在上述两个规则之间设置一些优先级,或者添加另一个规则以使其更加清晰。
欢迎任何想法或建议。而且这不是家庭作业,只是一些娱乐。提前致谢!!
为什么列出而不是树?
OR = 0
AND = 1
class OpNode:
def __init__(self, op, left, right):
self.op = op
self.left = left
self.right = right
class LeafNode:
def __init__(self, name, value):
self.name = name
self.value = value
A = LeafNode("A", True)
B = LeafNode("B", True)
exp = OpNode(OR, A, OpNode(AND, B,
OpNode(OR,
LeafNode("C", False),
LeafNode("D", True))))
Run Code Online (Sandbox Code Playgroud)
exp等于 A+B(C+D)
您可以走LISPy路线,让每个列表中的第一项成为操作员。例如,您给的表达式
ABC+DE(FG+IH)
Run Code Online (Sandbox Code Playgroud)
会成为
['or', ['and', A, B, C], ['and', D, E, ['or', ['and', F, G], ['and', I, H]]]]
Run Code Online (Sandbox Code Playgroud)
考虑到这是很可读的。干杯!