【Python】論理演算子and、or、notを複数回使った時の使い方と優先順位

and-or-not-2 eyecatch image

Pythonの論理演算子andornotの応用についてです。1行に複数回使う時の方法とそれの意味について調べました。

論理演算子andnotornot)を1行に複数回使う時の方法とそれの意味については以下の記事をご覧ください。
▼関連記事【Python3】論理演算子and、orを複数回使った時の使い方と優先順位
▼関連記事【Python3】論理演算子and、notを複数回使う時の使い方と意味
▼関連記事【Python3】論理演算子and、notを複数回使う時の使い方と意味

演算子意味評価結果
andかつTrue and TrueTrue
orあるいはTrue or FalseTrue
not否定not TrueFalse
(独学プログラマー P.34 日経BP社発行より)

論理演算子andornot比較演算子同様、TrueもしくはFalseを返します。 詳細は基礎編の記事をご参照ください。

目次

論理演算子and、or、notを複数回使った例の前に…

本題に入る前にそれぞれの論理演算子について簡単に説明します。

論理演算子andを複数回使った時

andの左右の式が共にTrueの時のみTrueを返します。左右の式のどちらかがFalse、もしくは左右の式の両方がFalseの時はFalseを返します。
これを基本として、andのみを複数回使った時は、左から順番に真偽(真:True、偽:False)を判定していき、最終的な判定結果(出力結果)を出します。

論理演算子orを複数回使った時の例

論理演算子orは全ての式がTrueもしくは、いずれかの式がTrueの時はTrueを返します。また、全ての式がFalseの時はFalseを返します。

これを基本として、orのみを複数回使った時は、左から順番に真偽(真:True、偽:False)を判定していき、最終的な判定結果(出力結果)を出します。

論理演算子notを複数回使った時

基本的な考え方は「演算子notの後ろの式がTrueの場合、Falseを返す。演算子notの後ろの式がFalseの場合、Trueを返す。」となります。これは演算子notを複数回使った場合も同じで、演算子notを使った各式について上記の条件(TrueFalseに、FalseTrueになる事)を用いればOKです。

では、ここまでの話を元に本題へと進めていきましょう。

論理演算子and、or、notをそれぞれ1回組み合わせる場合

論理演算子andornotが同じ行にある場合、どれから優先して計算されるのでしょうか。Pythonでは優先順位が決まっており、notandorの順番で計算されると決まっています。

下記の例では、andorを組み合わせて出力させてみました。また、例ごとにorandの順番を入れ替えて出力させました。

orandの順番の場合

例1

Python
print(2 > 2 or 2 == 2 and 2 >= 2)

【出力結果】
True

まずは次のように(1)(2)に分けて考えます。orよりandを先に計算しないといけないので、andの部分が(1)に、orの部分を(2)にしています。

2 > 2 or 2 == 2 and 2 >= 2 image

では、(1)から計算していきましょう。2 == 2True2 >= 2Trueなので、(1)Trueを返します。その為、例1は次のようになります。

2 or 2 > True image

続いて、(2)について計算していきます。orの左側の2 > 2なのでFalseが返ります。また、右側はTrueなので、(2)Trueが返ります。よって、全体の評価結果(出力結果)もTrueが返ります。

例1にnotを入れた場合

続いて、例1の各行にnotを入れた例を見てみましょう。

例2

Python
print(2 > 2 or not 2 == 2 and 2 >= 2)

【出力結果】
False

今度はFalseが出力されました。これも先程と同様に、分けて順番に考えます。優先順位はnotandorの順に計算していきます。そのため、例2は次のように(1):not(2):and(3):orに分けて、順番に計算します。

2 > 2 or not 2 == 2 and 2 >= 2 image

まず、(1)から計算していきましょう。2 == 2は本来であればTrueを返します。しかし、今回はnotがついているので、(1)Falseを返します。その為、例2は次のようになります。

2 or false and 2 image

続いて、(2)について見て行きましょう。演算子andの左側はFalse、右側は2 >= 2なのでTrueを返します。その為、(2)Falseを返します。よって、例2は次のようになります。

2 > 2 or False

最後に(3)について見て行きます。演算子orの左側は2 > 2なのでFalse、右側はFalseです。その為、(3)Falseを返します。よって、例2の全体の評価結果(出力結果)もFalseを返します。

andorの順番の場合

例3

Python
print(2 == 2 and 2 >= 3 or 2 > 2)

【出力結果】
False

まずは次のように(1)(2)に分けて考えます。orよりandを先に計算しないといけないので、andの部分が(1)に、orの部分を(2)にしています。

2 and 2 >= 3 or 2 > 2 mage

(1)から計算していきます。andの左側の2 == 2True、右側の2 >= 3Falseなので、(1)Falseを返します。その為、例3は次のようになります。

false or 2 > 2 image

続いて、(2)について計算します。演算子orの左側はFalse、右側は2 > 2なのでFalseを返します。その為、(2)Falseを返します。よって、例3の全体の評価結果(出力結果)もFalseを返します。

例3にnotを入れた場合

例3にもnotを1つ入れて検証してみましょう。

例4

Python
print(2 == 2 and not 2 >= 3 or 2 > 2)

【出力結果】
True

今度は2行目がTrueに変わりました。これも先程と同様に、分けて順番に考えます。優先順位はnotandorの順です。そのため、例4は次のように(1):not(2):and(3):orに分けて、順番に計算します。

2 == 2 and not 2 >= 3 or 2 > 2 image

まずは(1)から見て行きます。2 >= 3は本来であれば、Falseを返しますが、notがついているので、(1)Trueを返します。その為、例4は次のようになります。

続いて、(2)について計算します。演算子andの左側の2 == 2Trueを返し、右側はTrueなので、(2)Trueを返します。よって例4は次のようになります。

True or 2 > 2 image

最後に(3)について計算します。演算子orの左側はTrue、右側の2 > 2Falseなので、(3)Trueを返します。よって例4の全体の評価結果(出力結果)はTrueを返します。

andを2回以上とorを組み合わせた場合

この場合も優先順位はnotand orの順番である事は変わりません。ただし、andが2つ以上あれば、andのうち左側のandから計算されます。では、実際に例をみていきましょう。

例5

Python
print(2 > 2 or 2 != 2 and 2 >= 2 and 2 == 2)

【出力結果】
False

この場合も優先順位はnotandorの順番である事は変わりません。andが2つありますが、andは左側のandから計算していきます。これまでと同様、例5を次のように分けて考えます。

2 > 2 or 2 != 2 and 2 >= 2 and 2 == 2 image

まずは、(1)から計算していきます。2 != 2False2 >= 2Trueなので、(1)Falseを返します。その為、例5は次のようになります。

つづいて、(2)について計算していきます。演算子andの左側はFalse、右側は2 == 2なのでTrueが返ります。その為、(2)Falseを返します。よって、例5は次のようになります。

2 > 2 or False image

最後に、(3)について計算します。演算子orの左側は2 > 2なのでFalse、右側はFalseなので、(3)Falseを返します。よって、例5の全体の評価結果(出力結果)もFalseを返します。

andを2回以上とornotを組み合わせた場合

例5の例にnotを入れた場合を検証していきましょう。

例6

Python
print(not 2 > 2 or 2 != 2 and 2 >= 2 and 2 == 2)

【出力結果】
True

これまで同様、次のように計算する優先順位((1)(4))をつけて、順に見て行きます。優先順位はnotandorです。andが2つありますが、左側のandから計算します。

not 2 > 2 or 2 != 2 and 2 >= 2 and 2 == 2 image

まず(1)から計算します。2 > 2Falseですが、notがついているので、反対のTrueが返ります。その為、例6は次のようになります。

True or 2 != 2 and 2 >= 2 and 2 == 2 image

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

次に(3)を計算します。演算子andの左側はFalseで、右側は2 == 2なのでTrueが返ります。その為、(3)Falseが返ります。よって、例6は次のようになります。

最後に(4)について計算します。演算子orの左側はTrue、右側はFalseなので、(4)Trueを返します。よって、例6も全体の評価結果(出力結果)はTrueを返します。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


目次