Pythonの論理演算子and、or、notの応用についてです。本記事ではand、orを複数回使った時の考え方について、まとめました。論理演算子and、or、notも比較演算子同様、TrueもしくはFalseを返します。
詳細は基礎編の記事をご参照ください。
また、論理演算子の種類、意味、例、評価結果は次のようになります。
スクロールできます
演算子 意味 例 評価結果 and かつ True and True True or あるいは True or False True not 否定 not True False
論理演算子andを複数回使った時の例
andはandの左右の式が共にTrueの時のみTrueを返します。左右の式のどちらかがFalse、もしくは左右の式のどちらかがFalseの時はFalseを返します。複数回使った時は左側のandから順番に計算をしていきます。文字の説明だけではわかりにくいと思いますので、実際に例を見て解説していきます。
全ての式がTrueの場合
andで繋がれた全ての式がTrueの場合、結果的に全体の評価結果(出力結果)はTrueを返します。
例1
print(2 == 2 and 3 > 1 and 4 != 3)
'''
【出力結果】
True!=ってどういう意味だっけという方は下記記事ご参照ください。

例1の式を次のように(1)と(2)に分けて、順番に計算をしていきます。

まずは、(1)について計算します。2 == 2はTrue、3 > 1はTrueなので、(1)はTrueを返します。その為、例1は次のようになります。

続いて、(2)の計算をします。andの左側はTrue、右側の4 != 3はTrueになので、(2)はTrueを返します。よって、全体の評価結果(出力結果)もTrueになります。
いずれかの式がFalseの場合
andで繋がれた、いずれかの式がFalseの場合、結果的に全体の評価結果(出力結果)もFalseを返します。
例2
print(2 == 2 and 3 > 1 and 3 != 3)
'''
【出力結果】
False上記と同様、(1)と(2)に分けて、順番に計算していきます。

まずは(1)について計算します。2 == 2はTrue、3 > 1はTrueなので、(1)はTrueを返します。その為、例2は次のようになります。

続いて、(2)について計算します。andの左側はTrue、右側は3 != 3はFalseなので、(2)はFalseを返します。よって、全体の評価結果(出力結果)もFalseになります。
論理演算子orを複数回使った時の例
論理演算子orはorの左右の式がTrueもしくは、いずれかの式がTrueの時はTrueを返します。また、左右の式がFalseの時はFalseを返します。 複数回使った時は左側から順番に計算をしていきます。これもandの時と同様、実際に例をみて解説していきます。
いずれかの式がTrueの場合
orでつながれた、いずれかの式がTrueの場合、結果的に全体の評価結果(出力結果)もTrueを返します。
例3
print(2 == 2 or 3 < 1 or 3 != 3)
'''
【出力結果】
True先程と同様、例3を次のように分けて考えます。

まずは(1)について計算します。2 == 2はTrue、3 < 1はFalseなので、(1)はTrueを返します。その為、例3は次のようになります。

続いて、(2)について計算します。orの左側はTrue、右側は3 != 3なので、Falseを返します。その為、(2)はTrueを返します。よって、全体の評価結果(出力結果)もTrueを返します。
全ての式がFalseの場合
orでつながれた全ての式がFalseの場合、結果的に全体の評価結果(出力結果)もFalseを返します。
例4
print(2 > 2 or 3 < 1 or 3 !=3)
'''
【出力結果】
False例4を次のように分けて考えます。

続いて、(1)について計算します。2 > 2はFalse、3 < 1もFalseなので、(1)はFalseを返します。その為、例4は次のようになります。

最後に(2)について計算します。orの左側はFalse、右側は3 != 3なので、Falseを返します。その為、(2)はFalseを返します。よって、全体の評価結果(出力結果)もFalseを返します。
論理演算子and 、orを組み合わせる場合
話が複雑になりますが、演算子andと演算子orを組み合わせて用いる事もできます。andとorはどちらから計算されるの?と疑問が浮かびますが、四則計算(+、–、*、÷(/))のように計算する優先順位があります。計算する優先順位はand→orになります。文字だけでは理解しにくいと思いますので、例を見て解説していきます。
or、and(True)の順の場合
演算子or、演算子andが組み合わさっており、両方がTrueを返す場合、全体の結果もTrueを返します。
例5
print(2 > 2 or 2 == 2 and 2 >= 2)
'''
【出力結果】
True例5の場合、次のように(1)andの計算をした後、(2)orを計算します。

(1)では2 == 2はTrue、2 >= 2はTrueなので、(1)の結果はTrueが返ります。よって、例5は次のようになります。

続いて(2)の計算に移ります。演算子orの左側の2 > 2はFalse、右側はTrueになります。その為、(2)はTrueを返します。よって、全体の評価結果(出力結果)もTrueが返ります。
or、and(False)の順の場合
この場合も上記と同様にandを先に計算してから、orを計算するようにします。では早速例を見て行きましょう。
例6
print(2 > 2 or 2 == 2 and 2 >= 3)
'''
【出力結果】
False例6の例の場合も、(1)andを計算した後、(2)orを計算します。

まず、(1)から計算を行っていきます。2 == 2はTrue、2 > 3はFalseなので、(1)はFalseが返ります。よって、例6は次のようになります。

続いて(2)の計算に移ります。2>2はFalse、orの右側もFalseになります。その為、(2)はFalseを返します。よって、全体の評価結果(出力結果)もFalseが返ります。
andを2回以上とorを組み合わせた場合
andが複数ある場合もand→orの順番で計算していきます。andが複数個ある場合は左側にあるandから計算します。例を3つ用意しました。1つずつ解説していきます。
or、and、andの順の場合
例7
print(2 > 2 or 2 == 2 and 2 >= 2 and 2 == 2)
'''
【出力結果】
True(1)andのうち左側のもの、(2)andのうち右側のもの、(3)orの順番に計算をしていきます。

まず、(1)の計算です。2 == 2はTrue、2 >= 2はTrueなので、(1)はTrueが返ります。その為、例7は次のようになります。

つづいて、(2)の計算です。andの左側はTrue、右側は2 == 2でTrueなので、(2)はTrueが返ります。その為、例7は次のようになります。

つづいて、(3)の計算です。演算子orの左側の2 > 2はFalse、orの右側はTrueになります。その為、(3)はTrueを返します。よって、例7の全体の評価結果(出力結果)はTrueになります。
and、or、andの順番の場合
例8
print(2 == 2 and 2 > 2 or 2 >= 2 and 2 != 2)
'''
【出力結果】
False(1)andのうち左側、(2)andのうち右側、(3)orの順番に計算していきます。

まず、(1)の計算です。2 == 2はTrue、2 > 2はFalseなので、(1)はFalseが返ります。その為、例8は次のようになります。

続いて、(2)の計算です。2 >= 2はTrue、2 != 2はFalseなので、(2)はFalseが返ります。その為、例8は次のようになります。

続いて(3)の計算です。演算子orの左右の値はFalseになっています。その為、(3)はFalseを返します。よって、例8の全体の評価結果(出力結果)はFalseとなります。
and、and、orの順番の場合
例9
print(2 != 2 and 2 >= 2 and 2 == 2 or 2 > 2)
'''
【出力結果】
False(1)andのうち左側、(2)andのうち左側、(3)orの順番に計算していきます。

まず、(1)の計算です。2 != 2はFalse、2 >= 2はTrueなので、(1)はFalseが返ります。その為、例9は次のようになります。

続いて、(2)の計算です。演算子andの左側はFalse、2 == 2はTrueなので、(2)はFalseが返ります。その為、例9は次のようになります。

最後に、(3)の計算です。演算子orの左側はFalse、右側の2 > 2はFalseなので、(3)はFalseが返ります。よって、全体の評価結果(出力結果)もFalseを返します。
今回、紹介できなかった論理演算子notは以下の記事で紹介しています。ぜひご覧ください。


コメント