ひょんなことから、「p Eqv q」が「p==q」のように比較演算子を使って表すことができるとわかったので、他の主な演算子(not and or xor eqv imp)も比較演算子を使って表す関数を作ってみました。(^_^;
ちなみに、この前の「【論理包含演算子Imp】の質問」のImpは、比較演算子を使って表わした「p<=q」とか「bool(p)<=bool(q)」で代用できそうです。が、これだと矢印の向きが反対っぽい感じがするし、また、「(not p)>=(not q)」だと矢印の向きはいいけど、前にnotがついて煩わしい感じがします。それでこれらは不採用にして、順番通りに並べる関数lop(p,opr,q)を作ることにしました。(^_^;
● LogicalOp1.py
# coding: UTF-8 # LogicalOp1.py import itertools from time import time # 否定 NOT def NOT(p): return p==False # 論理積 AND def AND(p,q): return p*q!=False # 論理和 OR def OR(p,q): return p*p+q*q!=False # 排他的論理和 XOR def XOR(p,q): return p!=q def Xor(p,q): return bool(p^q) # 論理等価 EQV def EQV(p,q): return p==q def Eqv(p,q): return not(p^q) # 論理包含 IMP def IMP(p,q): return p<=q def Imp(p,q): return not p or q # 「p <論理演算子> q」の形に整える def lop(p,opr,q): return opr(p,q) # 真理値表の1行を文字列で得る(T:True; F:False) def getRowOfTruthTable(li): return (' '*3).join(['T' if b else 'F' for b in li]) def main(): tm = time() # Timer Start TF = (True,False) # <<<--- NOT --->>> print('[p not NOT]') for p in TF: li = [p,not p,NOT(p)] print(' %s'%getRowOfTruthTable(li)) # <<<--- AND --->>> print('[p q and AND]') for p,q in itertools.product(TF,repeat=2): li = [p,q,p and q,lop(p,AND,q)] print(' %s'%getRowOfTruthTable(li)) # <<<--- OR --->>> print('[p q or OR]') for p,q in itertools.product(TF,repeat=2): li = [p,q,p or q,lop(p,OR,q)] print(' %s'%getRowOfTruthTable(li)) # <<<--- XOR --->>> print('[p q Xor XOR]') for p,q in itertools.product(TF,repeat=2): li = [p,q,lop(p,Xor,q),lop(p,XOR,q)] print(' %s'%getRowOfTruthTable(li)) # <<<--- EQV --->>> print('[p q Eqv EQV]') for p,q in itertools.product(TF,repeat=2): li = [p,q,lop(p,Eqv,q),lop(p,EQV,q)] print(' %s'%getRowOfTruthTable(li)) # <<<--- IMP --->>> print('[p q Imp IMP]') for p,q in itertools.product(TF,repeat=2): li = [p,q,lop(p,Imp,q),lop(p,IMP,q)] print(' %s'%getRowOfTruthTable(li)) print("Runtime : %.3f [sec]"%(time()-tm)) # Timer Stop & Disp if __name__ == '__main__': main()
●実行結果
[p not NOT] T F F F T T [p q and AND] T T T T T F F F F T F F F F F F [p q or OR] T T T T T F T T F T T T F F F F [p q Xor XOR] T T F F T F T T F T T T F F F F [p q Eqv EQV] T T T T T F F F F T F F F F T T [p q Imp IMP] T T T T T F F F F T T T F F T T Runtime : 0.000 [sec]
※参考URL
●【論理包含演算子Imp】の質問 - rscのブログ
●https://code.i-harness.com/ja/q/69aca