論理演算子(or・and・not)の使い方【Python】

pythonの論理演算子の記事のアイキャッチPython

Pythonでは条件を判定する際に、論理演算子(or・and・not)を使う機会がよくあります

論理演算子を使うことでifの数を減らしたり、簡潔に条件を書くことができるようになるのです

OR

ORは論理和ともいい、与えられた2つの式のうちどちらかが真である場合に真を返してくれます

式1式2式1 or 式2
FalseFalseFalse
FalseTrueTrue
TrueFalseTrue
TrueTrueTrue

ORの構文はこんな感じ

式1 or 式2

実際に使ってみると、

print(1==1 or 0==2)
# True
print(0==3 or 0==2)
# False

if 1==1 or 0==2:
    print("or is working!")
    # or is working!

このようにして複数を連続で使うことで、3入力ORのように扱うこともできます
動作としては「どれか一つだけでもTrueであればTrue」なのですが、
結局は前のorから一つずつ処理しているだけです

if True or False or False:
    print("multi or !")
    # multi or !

AND

ANDは論理積ともいい、与えられた2つの式が両方とも真である場合に真を返してくれます

式1式2式1 and 式2
FalseFalseFalse
FalseTrueFalse
TrueFalseFalse
TrueTrueTrue

ANDの構文はこんな感じ

式1 and 式2
print(1==1 and 0==0)
# True
print(0==3 and 0==0)
# False

if 1==1 and 0==0:
    print("and is working!")
    # and is working!

こんな感じでandも連続で使用可能で、3入力ANDのようにして扱うことができます
動作は「全てTrueの時だけTrue」です

しかしこれも前から一つずつandを処理しているだけなので、特に難しくないと思います

if True and True and False:
    print("OK")
else:
    print("NG")
# NG

NOT

NOTは否定ともいい、式が真なら偽を返し、偽なら真を返してくれます

not 式
FalseTrue
TrueFalse

構文はこんな感じです

not 式

実際に使用してみると、確かにTrue,Falseが反転していますね

print(not True)
# False
print(not False)
# True
print(not 1==1)
# False
print(not 1==0)
# True

if not 0==1:
    print("not is working!")
    # not is working!

XORを作ってみる

or and not の論理演算子が使えるので、xorを使えると思うかもしれませんが、実は使えません

せっかくですので、今回紹介した論理演算子(or and not)でxorを実装してみたいと思います

そもそもXORは排他的論理和とも言われ、以下の真理値表で表さられるものでした

式1式2式1 xor 式2
FalseFalseFalse
FalseTrueTrue
TrueFalseTrue
TrueTrueFalse

主加法標準形(Trueのところを論理和していく)で愚直に実装すると、こんな感じになりますね
確認してみると、確かにxorになっていることがわかります

def xor(a, b):
    c = (bool(a) and (not bool(b))) or ((not bool(a)) and bool(b))
    return c

print(xor(False, False))
# False
print(xor(False, True))
# True
print(xor(True, False))
# True
print(xor(True, True))
# False

print(xor(1,2))
# False

計算の優先順位

数値の四則演算で演算子に優先順位があるように、論理演算子にも優先順位があり、下記のような順番になります

優先順位演算子
1比較演算子(== > < etc.)
2not
3and
4or

論理演算の優先順位はあまり気にすることがないかもしれませんが、優先順位を間違えるとバグの原因になるので気をつけるようにしましょう

コメント