Pythonの論理演算子について、if文
と組み合わせながら解説していきます。
論理演算子は、boolen型
(True
, False
)を組み合わせたり、反転したりする際に使用します。
条件AとBがあるとき、次のような論理演算を行えます。
and
:AかつB(両方ともTrue
ならTrue
)or
:AまたはB(片方でもTrue
ならTrue
)not
:Aの否定(True
をFalse
にして、False
をTrue
に反転する)
また、使い道がいまいちわからないnot
の使いどころについても実例を紹介します。
【解説動画】not, and, or 論理演算子の使い方
5min. Python解説動画【入門編】|第16回:論理演算子 and/or/not徹底解説!
and|AかつB
and
は、2つの条件AとBが共にTrue
であるときに、True
を返します。
condition_a = True
condition_b = True
if condition_a and condition_b:
print("2つの条件共に満たされています")
else:
print("どちからが満たされていません")
# 2つの条件共に満たされています
どちらか一方でもFalse
だと、and
の出力はFalse
になります。
condition_a = True
condition_b = False
if condition_a and condition_b:
print("2つの条件共に満たされています")
else:
print("どちらかが満たされていません")
# どちらかが満たされていません
またand
は論理積とも呼びます。
プログラムの中では、物事を0
と1
で考えることが多いですが、これと同じ考えで、
True
を数字の1
False
を数字の0
とみなすと、
True
とTrue
の積 ⇒1*1 = 1
⇒True
⇒True and True
の結果と一致True
とFalse
の積 ⇒1*0 =0
⇒False
⇒True and False
の結果と一致
and
の処理は数字の積と類似していることがわかります。
まさに論理積ですね!
or|AまたはB
or
は、2つの条件AとBのうち少なくとも片方がTrue
であれば、True
を返します。
condition_a = True
condition_b = False
if condition_a or condition_b:
print("2つの条件どちらか、または両方が満たされています")
else:
print("どちらも満たされていません")
# 2つの条件どちらか、または両方が満たされています
もちろん両方ともTrue
でもTrue
を返します。
両方ともFalse
だと、or
の出力はFalse
になります。
condition_a = False
condition_b = False
if condition_a or condition_b:
print("2つの条件どちらか、または両方が満たされています")
else:
print("どちらも満たされていません")
# どちらも満たされていません
or
は論理和とも呼びます。
プログラムの中では、物事を0
と1
で考えることが多いですが、これと同じ考えで、
True
を数字の1
False
を数字の0
とみなすと、
True
とFalse
の和 ⇒1+0 = 1
⇒True
⇒True or False
の結果と一致True
とFalse
の和 ⇒0+0 =0
⇒False
⇒False or False
の結果と一致
or
の処理は数字の和と類似していることがわかると思います。
まさに論理和ですね!
not A|Aの否定
not
は、条件AのTrue
、False
を逆転させます。
not True
⇒False
not False
⇒True
これは条件Aの否定とも呼びます。
condition_a = False
if not condition_a:
print("条件AはFalseなので、")
print("not 条件AはTrue")
else:
print("条件AはTrueなので、")
print("not 条件AはFalse")
# 条件AはFalseなので、
# not 条件AはTrue
判定式を用いた例も見ていきましょう。
name = "Takao"
if not name == "YutaKa":
print("あなたはYutaKaではありません")
else:
print("あなたはYutaKです")
# あなたはYutaKaではありません
not
を用いると、確かに条件を反転(否定)することができました。
ただ、疑問が残ります。
わざわざnot
を使用しなくても、判定式自体を書き換えれば良いのではないでしょうか?
例えば、この例であれば、==
ではなくて、!=
を使用すればnot
は不要ですね。
name = "Takao"
if name != "YutaKa":
print("あなたはYutaKaではありません")
else:
print("あなたはYutaKです")
# あなたはYutaKaではありません
わざわざnot
を使用するより、判定式を書き換えた方が見やすい気さえします。
しかし、実は判定式を反転させられない状況というものがあります。
そんなときのためのnot
です。
notの使いどころ|if文で判定式を使用しないとき
実はif文
では、if
の後ろに以下のオブジェクトを直接書き込んでも、False
扱いになります。
None
、False
- 数値型におけるゼロ:
0
,0.0
, - 空のシーケンスまたはコレクション:
''
,()
,[]
,{}
,set()
,range(0)
- 参考URL:公式ドキュメント 真理値判定
この条件を否定(反転)したいときには、not
を使わざるを得ません。
例えば、リストが空のときだけデフォルト値を追加したいときは次のように書きます。
my_list = []
if not my_list:
print("リストが空です")
print("デフォルト値の1を追加しておきます")
my_list.append(1)
# リストが空です
# デフォルト値の1を追加しておきます
print(my_list)
# [1]
こういった状況でnot
が役立ちます。
notの使いどころ|辞書型に特定のkeyがないときに処理
辞書型に特定のkey
があるかどうか調べるためには、in
を使用します。
key in 辞書型変数
これとは逆に、辞書型に特定のkey
がないことを確認したい場合には、not in
を使用します。
not key in 辞書型変数
key
がない場合には、デフォルト値を追加したいときは次のように書きます。
my_dict = {"age":30}
if not "name" in my_dict:
print("nameが設定されていません")
print("デフォルト値のYutaKa Taroを追加しておきます")
my_dict["name"] = "YutaKa Taro"
# nameが設定されていません
# デフォルト値のYutaKa Taroを追加しておきます
print(my_dict)
# {'age': 30, 'name': 'YutaKa Taro'}
おわりに
今回は論理演算子and
, or
, not
について紹介しました。
if文と組み合わせることで、作成できるプログラムの幅が一気に広がりましたね!
今回のnot
の使い道のようなちょっとした情報にも触れています。
知的好奇心を刺激して、楽しみながらpythonを学んでいただける動画シリーズを目指いしています。
5min. python解説動画では、pythonの基本をショートクリップで解説しています!
流し見するだけでpythonをマスターできる動画シリーズを目指しています。