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

演算子 意味 例 評価結果 and かつ True and True True or あるいは True or False True not 否定 not True False 独学プログラマー P.34 日経BP社より
論理演算子and、or、notも比較演算子同様、TrueもしくはFalseを返します。詳細は基礎編の記事(リンク)をご参照ください。また、本記事では演算子notについて記載しています。演算子and、orは以下の記事に記載していますので、ぜひご覧ください。

論理演算子notの基本的な形
順を追って徐々に複雑なコードを見て行きたいと思います。まず始めは基本的な形から
print(not 2 > 2)
print(not 2 == 2)
'''
【出力結果】
True
False1行目
2は2より大きくないので、notがなければFalseが返ります。1行目ではnotがついているので、Falseの反対のTrueが返ります。
2行目
1行目同様、2は2と等しいので、notがなければTrueが返ります。2行目ではnotがついているので、Trueの反対のFalseが返ります。
演算子orとnot(1回)が組み合わさった場合
orとnotの組み合わさった場合、次のように考えると混乱せずに済むと思います。
1)notがついた式のブール値(TrueとFalse)を逆に考える。(notがつく前がTrueならば、Falseに。Falseならば、Trueと読み替える)
2)orの左右の式のブール値(TrueとFalse)により、全体のブール値を判断する。
(例:orの左右の式のどちらかがTrue、もしくは両方がTrueであれば、全体はTrueを返す。orの左右の式の両方がFalseであれば、全体はFalseを返す。)
では、例を見て行きましょう。
print(2 > 2 or 2 != 2)
print(not 2 > 2 or 2 != 2)
print(2 > 2 or not 2 != 2)
'''
【出力結果】
False
True
True1行目
2は2より大きくないので、2 > 2はFalse、2は2と等しいので、2 !=2はFalseとなります。そのため、orの左右の式がFalseとFalseになるので、1行目全体ではFalseが返ります。
2行目
1行目の2 > 2に対してnotがついています。これにより、2 > 2は本来であればFalseが返りますが、notがつくことによってFalseの反対のTrueが返ります。また、2 != 2は2と2が等しいのでFalseが返ります。よって、orの左の式がTrue、右の式がFalseなので、2行目全体としてTrueが返ります。
3行目
2 > 2は上記の通り、Falseが返ります。また、2 != 2はFalseですが、notがつくことによって反対のTrueが返ります。orの左の式がFalse、右の式がTrueなので、3行目全体としてTrueが返ります。
演算子orとnotが複数回(not:2回)組み合わさった場合
演算子orにnotが2つついた場合も考え方は同じです。
1)notがついた式のブール値(TrueとFalse)を逆に考える。(notがつく前がTrueならば、Falseに。Falseならば、Trueと読み替える。)
2)orの左右の式のブール値(TrueとFalse)により、全体のブール値を判断する。
では、例を見て行きましょう
print(not 3 > 2 or not 2 == 2)
print(not 3 < 2 or not 2 == 2)
'''
【出力結果】
False
True1行目
3は2より大きいので、3 > 2はTrueですが、notがついているのでFalseが返ります。また、2は2と等しいので、2 == 2はTrueですが、notがついているので、Falseが返ります。そのため、orの左右の式がFalseなので、1行目全体ではFalseが返ります。
2行目
3は2より小さくないので、3 < 2はFalseですが、notがついているのでTrueが返ります。また、2は2と等しいので、2 == 2はTrueですが、notがついているので、Falseが返ります。そのため、orの左の式がTrue、右の式がFalseなので、2行目全体ではTrueが返ります。
演算子orとnotが複数回(or:2回、not:3回)組み合わさった場合
演算子orが2回にnotが3回でてくる場合も考え方は基本的に同じです。
1)notがついた式のブール値(TrueとFalse)を逆に考える。
2)orの左右の式のブール値(TrueとFalse)により、全体のブール値を判断する。
以下の例で徐々にコードを複雑にしていきます。
まずはorを複数回使った形です。
例1
print(3 < 2 or 2 != 2 or 3 <= 2)
'''
【出力結果】
False3は2より小さくないので、3 < 2はFalse、2は2と等しいので、2 != 2はFalse、3は2以下でないので3 <=2はFalseとなります。
よって全ての式がFalseなので、全体としてFalseが返ります。
続いて、例1にnotを1つ入れてみましょう。
例2
print(not 3 < 2 or 2 != 2 or 3 <= 2)
print(3 < 2 or not 2 != 2 or 3 <= 2)
print(3 < 2 or 2 != 2 or not 3 <= 2)
'''
【出力結果】
True
True
True例2の各行のコードはnotがなければ全てFalseが返るものでした。そこに1つnotが入ったので、どの行もどこかの比較はTrueが返ることになります。
その為、どの行も全体としてTrueが返ることになります。
論理演算子orを複数回使った時の意味と使い方は下記記事をご参照ください。


コメント