2017-06-12 61 views
0

我想存儲和工作(從表達式和進一步訪問每個文字)像Python((A/B)/ C)的邏輯表達式。我找到了一個辦法。我張貼下面的代碼。但作爲初學者,我無法理解它。任何人都可以向我解釋這段代碼如何工作並給出所需的輸出。原諒我的任何錯誤,因爲這是我第一次使用stackoverflow。瞭解Python代碼來實現邏輯表達式

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) 

回答

0

它可以通過設置類Element和定義位運算符& |~返回你請求的操作的字符串表示。

通常,~a是對整數的按位運算:它將所有0位更改爲1,反之亦然。但由於運營商__invert__已經被重新定義,當你做到這一點

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

不是得到的a按位逆的,你會與一個整數,你得到的字符串"~A"

這很聰明,但我懷疑它不會對你想要做的事很有用。它所做的只是將一個表達式轉換爲一個字符串。