ひょんなことから、「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