了解python代码以实现逻辑表达式

时间:2017-06-12 20:38:53

标签: python logic logical-operators

我希望在python中的((A / \ B)/ C)逻辑表达式上存储和工作(从表达式中进一步访问每个文字)。我找到了办法。我发布下面的代码。但作为初学者,我无法理解它。任何人都可以向我解释这段代码是如何工作的,并提供所需的输出。请原谅我第一次遇到堆栈溢出时出现的任何错误。

class Element(object):

    def __init__(self, elt_id, elt_description=None):
        self.id = elt_id
        self.description = elt_description
        if self.description is None:
            self.description = self.id

    def __or__(self, elt):
        return CombinedElement(self, elt, op="OR")

    def __and__(self, elt):
        return CombinedElement(self, elt, op="AND")

    def __invert__(self):
        return CombinedElement(self, op="NOT")

    def __str__(self):
        return self.id

class CombinedElement(Element):

    def __init__(self, elt1, elt2=None, op="NOT"):
        # ID1
        id1 = elt1.id
        if isinstance(elt1, CombinedElement):
            id1 = '('+id1+')'
        # ID2
        if elt2 is not None:
            id2 = elt2.id
            if isinstance(elt2, CombinedElement):
                id2 = '('+id2+')'
        # ELT_ID
        if op == "NOT" and elt2 is None:
            elt_id = "~"+id1
        elif op == "OR": 
            elt_id = id1+" v "+id2
        elif op == "AND":
            elt_id = id1+" ^ "+id2
        # SUPER
        super(CombinedElement, self).__init__(elt_id)

a = Element("A")
b = Element("B")
c = Element("C")
d = Element("D")
e = Element("E")

print(a&b|~(c&d)|~e)

Output :

((A ^ B) v (~(C ^ D))) v (~E)

1 个答案:

答案 0 :(得分:0)

它的工作原理是设置类Element并定义按位运算符&  | ~返回您要求的操作的字符串表示。

通常,~a是对整数的按位运算:它将所有0位更改为1,反之亦然。但是因为操作符__invert__已经重新定义,所以当你这样做时

a = Element("A")
print(~a)

而不是像使用整数那样获得a的按位反转,而是获得字符串"~A"

它非常聪明,但我怀疑它对你想做的事情不会有用。它所做的就是将表达式转换为字符串。