【Python】論理演算子and、notを複数回使う時の使い方と意味

Pythonの論理演算子andnotの応用についてです。1行に複数回使う時の方法とその意味について、まとめました。論理演算子ornotを1行に複数回使う時の方法とそれの意味については以下の記事をご覧ください。

論理演算子の種類、意味、例、評価結果は次のようになります。

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

論理演算子andornotも比較演算子(リンク)同様、TrueもしくはFalseを返します。詳細は基礎編の記事をご参照ください。また、本記事では演算子notについてまとめています。演算子andorは以下の記事にまとめていますので、ぜひご覧ください。

目次

論理演算子notの基本的な形

順を追って徐々に複雑なコードを見て行きたいと思います。
まず始めは基本的な形から

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

'''
【出力結果】
True
False

1行目は22より大きくないので、notがなければFalseが返ります。1行目ではnotがついているので、Falseの反対のTrueが返ります。
同様に2行目は22と等しいので、notがなければTrueが返ります。2行目ではnotがついているので、Trueの反対のFalseが返ります。

演算子andnot(1回)が組み合わさった場合

andnotの組み合わさった場合、次のように考えると混乱せずに済むと思います。
1)notがついた式のブール値(TrueFalse)を逆に考える。
2)andの左右の式のブール値(TrueFalse)により、全体のブール値を判断する。
(例:andの左右の式がTrueであれば、全体はTrueを返す。andの左右の式のどちらかがFalse、もしくは両方がFalseであれば、全体はFalseを返す。)

論理演算子andについては以下の記事で詳しく解説しています。

では、例を見て行きましょう。

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

'''
【出力結果】
False
True
False

1行目

22より大きくないので、2>2False22と等しいので、2 == 2Trueとなります。そのため、andの左右の式がFalseTrueになるので、1行目全体ではFalseが返ります。

2行目

1行目の2>2に対してnotがついています。これにより、2>2は本来であればFalseが返りますが、notがつくことによってFalseの反対のTrueが返ります。また、2 == 222が等しいのでTrueが返ります。よって、andの左右の式がTrueなので、2行目全体としてTrueが返ります。

3行目

2>2は上記の通り、Falseが返ります。また、2 == 2Trueですが、notがつくことによって反対のFalseが返ります。andの左右の式がFalseなので、3行目全体としてFalseが返ります。

演算子andnotが複数回(not:2回)組み合わさった場合

演算子andnotが2つついた場合も考え方は同じです。

1.notがついた式のブール値(TrueFalse)を逆に考える。
2.andの左右の式のブール値(TrueFalse)により、全体のブール値を判断する。

では、例を見て行きましょう

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

'''
【出力結果】
False
True

1行目

22より大きくないので、2>2Falseですが、notがついているのでTrueが返ります。また、22と等しいので、2 == 2Trueですが、notがついているので、Falseが返ります。そのため、andの左右の式がFalseなので、1行目全体ではFalseが返ります。

2行目

22より大きくないので、2>2Falseですが、notがついているのでTrueが返ります。また、22と等しいので、2 != 2Falseですが、notがついているので、Trueが返ります。そのため、andの左右の式がTrueなので、2行目全体ではTrueが返ります。

演算子andnotが複数回(and:2回、not:3回)組み合わさった場合

演算子andが2回にnotが3回でてくる場合も考え方は基本的に同じです。

1.notがついた式のブール値(TrueFalse)を逆に考える。
2.andの左右の式のブール値(TrueFalse)により、全体のブール値を判断する。

以下の例で徐々にコードを複雑にしていきます。まずはandを複数回使った形です。

例1

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

'''
【出力結果】
True

32より大きいので、3 >2True22と等しいので、2 == 2True22以上なので2 >= 2Trueとなります。よって全ての式がTrueなので、全体としてTrueが返ります。

続いて、例1notを1つ入れてみましょう。

例2

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

'''
【出力結果】
False
False
False

例2の各行のコードはnotがなければ全てTrueが返るものでした。そこに1つnotが入ったので、どの行もどこかの比較はFalseが返ることになります。その為、どの行も全体としてFalseが返ることになります。

最後にもう1つだけ例を挙げておきます。

例3

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

'''
【出力結果】
False
True

まず、2行目のコードから見ていきます。22と等しいので、2 != 2Falseになります。次に22より大きくないので、2 > 2Falseになります。最後に、22と等しいので、2 == 2Trueになります。よって、各式がFalseFalseTrueとなるので、2行目全体としてFalseが返ります。

次に、3行目では2行目でFalseFalseの値を返していた式にnotがついています。それにより、Falseの反対のTrueを返します。よって、各式は前から順番にTrueTrueTrueの値を返しているので、3行目全体でもTrueを返すことになります。

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

コメント

コメントする

CAPTCHA


目次