よくif文の中でANDやORといった文字を見かけますよね?あれは、論理演算子というものでプログラミングをやる上でどんな言語であろうと必須の知識なのです。
なので本日は、
- 論理演算子とは
という概念的な話から、実際の論理演算子である
- AND演算子
- OR演算子
- NOT
について。はたまた
- Python特有の論理演算子の判定
- 論理演算子の優先順位
というところまで説明していこうと思いますので、初学者の方は最後まで読んで参考にしていただければ幸いです!
なお、Pythonの記事については、こちらにまとめています。
論理演算子とは
そもそも論理演算子とはなんなのでしょうか?論理演算子とはブール演算子などとも呼ばれ、True/Falseのような真偽値を2つ以上の条件を組み合わせることができ、その真偽を判定するための演算子です。
論理演算子には論理積、論理和、否定の3種類がありプログラミング上ではそれぞれand、or、notと表されます。論理積は2つの条件式が真であった時に真を返し、論理和は2つの条件式のどちらかが真であった時に真を返し、NOTは1つの条件式が偽であったときに真を返します。
うーん、わかりにくいですね。もっと具体的に説明しましょう。例えば条件式aと条件式bがあったとき、
if(a and b):
これは論理積で、aとbどちらの条件も満たされた時にif文の処理に入ります。
if(a or b):
これは論理和で、aかbどちらかの条件を満たした時にif文の処理に入ります。
if(not a):
これは否定で、aの条件が満たされなかった時にif文の処理に入ります。なんとなく分かっていただけたでしょうか?
次に、実際のサンプルをあげ解説しますのでそちらでぜひ完全に理解していきましょう!
それぞれの演算子の使い方
AND演算子
コードから見ていきます。因みにコード上では 大文字小文字を区別するので小文字で書いてください。
English = 90 Math = 95 if(English >= 80 and Math >= 90): print('great') else: print('soso')
例えば1行目と2行目で英語と数学のテストの点数を最初に入力したとします。そして4行目で英語が80点以上、数学が90点以上という条件を与え、それを論理積のANDで繋ぐと、英語が80点以上でかつ数学90点以上であれば真なのでif文の処理に続きますね。
今回のスコアは英語が90点で数学が95点で条件を満たしているので結果は、実行結果
great
はい、うまく機能していますね。もし仮に、英語が70点だった場合はどうなるのかもみておきましょう。
English = 70 Math = 95 if(English >= 80 and Math >= 90): print('great') else: print('soso')
実行結果
soso
はい、この場合は一方の条件を満たせなかったので偽を返したため、if文には続かずelseに続きましたね。
OR演算子
OR演算子も見ていきましょう。ORはどちらか一方の条件を満たしている場合に真でしたね。
English = 70 Math = 95 if(English >= 80 or Math >= 90): print('great') else: print('soso')
この場合は英語が80点以上かまたは数学が90点以上の場合に真ですね。結果は、
実行結果
great
はい、英語は満たしていませんが数学が満たしているので真を返しif文に入りました。
NOT演算子
最後にNOTについても見ておきましょう。
English = 40 if(not English >= 80): print('soso') else: print('great’)
NOTなので英語が80点以上じゃなかったらif文の処理に続きますね。
結果は、
soso
はい、40点とあまりよろしくない結果だったので、if文に入りsosoと表示されました。少しややこしいかもしれませんが落ち着いて考えれば分かるので、ん?っとなったらまた戻ってゆっくり考えてみてください!
Pythonの論理演算子でFalseと判定されるもの
Pythonの論理演算子においてどんな条件式でもFalseと判定されるものがあります。代表的なのはNone、0、空文字といったところでしょうか。例を挙げてみると
English = 90 if(English >= 80 and ' ' ): print('great') else: print('soso’)
このようにandで繋いだはいいけど条件式の2個目が空文字だったとしましょう。この場合条件は、英語が80点以上の時ifの処理に入りgreatと表示されそうなものですが、結果を見てみると
実行結果
soso
このように、偽を返してしまいまいた。これは、空文字がFalse(偽)を返すため2個目の条件式が偽を返してしまったのです。ANDは両方真の時に真なので、もちろんこれは結果として偽を返しifの処理に入れなかったのです。
演算子の優先順位
では最後に論理演算子には優先順位があるということも覚えておきましょう。優先順位は、
- NOT>AND>OR
となっています。優先順位とは具体的にどういうことか実際にコードを交えて説明してみましょう。
English = 90 Math = 95 if(English >= 80 and not Math >= 90): print('great') else: print('soso')
ifの中を見てみるとandとnotが使われていますね。これを読み解くと、真の条件にはANDの英語が80以上かつ数学も90以上というものとNOT数学が90以上じゃない、つまり数学が90以下という条件が含まれていますね。
数学を90以上取った場合、2つの条件が矛盾していることが分かるでしょうか。実際に95点取った場合はどうなるのか、結果は
soso
偽を返しました。これは先ほど言った通り、NOTがANDよりも優先されたからです。
つまり、90以下が真というNOTが優先された中で95点だったので結果として偽を返したのです。優先順位があるということも頭にいれておかないと、思わぬ結果が生まれたときに対処できないので是非抑えておいてください。
まとめ
いかがでしたでしょうか?今回は論理演算子について学習しましたが、ANDはAかつB、ORはAもしくはB、NOTはAでなかったら真でしたね。
またNOT>AND>ORという優先順位があることや、0や空文字は問答無用で偽を返すということもしっかりと覚えておきましょう。論理演算子は今後必ず使うのでしっかりと覚えてマスターしちゃってください。それでは!