※こちらの記事は、プロスタ編集部が現在大変人気の高いPythonの文法記事を公開することで、皆様の学習にお役に立ちたい意図で投稿しております。
参考サイト:【Python入門】ブール演算子(and・or・not)の使い方
#【Python入門】ブール演算子(and・or・not)の使い方
Pythonにはさまざまな演算子が存在し、あらゆる計算や構文に使われています。その中でも、主にif文の条件式でよく使われる演算子としてブール演算子というものがあります。ブール演算子は論理演算子とも呼ばれており、if文の条件分岐において、複雑な条件式を記述する際に使用されます。
今回は、ブール演算子の使い方について説明します。
目次
1 andについて
2 orについて
3 notについて
4 and、or、notを組み合わせる
5 ブール演算子の優先順位
##andについて
andは論理積とも呼ばれるブール演算子です。andの基本的な構文は以下の通りです。
条件式1 and 条件式2
andは左右に条件式をとり、両方の条件式の結果がTrue(真)の場合のみ、真を返します。どちらかが偽の場合は偽を返します。andを使うことで、複雑な条件のif文を短く記述することができます。
例えば、数字が格納されたリストの中から、100以上200未満の数字だけを取り出したいとします。andを使わない場合は、以下のようなif文になります。
list = [30, 256, 125, 167, 45, 401]
for number in list:
if(number >= 100):
if(number < 200):
print(number)
実行結果
125
167
この例はリストも短く条件もそこまで複雑ではありませんが、それでもif文を2回使っています。条件が複雑になればなるほどif文が増えてしまい、コードが見づらくなってしまいます。そんな時にandを使うと、とても短く記述することができます。
list = [30, 256, 125, 167, 45, 401]
for number in list:
if(number >= 100 and number < 200):
print(number)
実行結果
125
167
この場合、numberが100以上かつ200未満の時だけandがTrueを返し、if文の中身が実行されます。andを使うことで、if文が一つ減り、コードがスッキリしました。
##orについて
orは論理和とも呼ばれるブール演算子です。orの基本的な構文は以下の通りです。
条件式1 or 条件式2
andは2つの条件式の両方がTrueの時だけ式全体がTrueになりましたが、orは2つの条件式のうちどちらか一方がTrueであれば、式全体がTrueになります。
さきほどの例を使うと、数字が100以下もしくは200以上のものを表示する、といった時に使われます。
list = [30, 256, 125, 167, 45, 401]
for number in list:
if(number < 100 or number >= 200):
print(number)
実行結果
30
256
45
401
この例ではnumberが100未満、もしくはnumberが200以上のどちらか一方の式がTrueなら、式全体がTrueになるので、if文の中身が実行されます。
##notについて
notは否定とも呼ばれるブール演算子です。notの基本的な構文は以下の通りです。
not 条件式
notは条件式がTrueの場合に、式全体がFalse(偽)になります。さきほどの例を使うと、偶数ではない数字だけを出力する、といった時に使われます。
for number in list:
if(not number % 2 == 0):
print(number)
実行結果
125
167
45
401
##and、or、notを組み合わせる
ここまでand、or、notの3種類のブール演算子を紹介しましたが、これらの演算子を組み合わせてより複雑な条件式を作ることもできます。
例えば、300より小さい数字かつ3で割り切れないもの、という条件式は以下のようになります。
list = [30, 256, 125, 167, 45, 401]
for number in list:
if(number < 300 and not number % 3 == 0):
print(number)
実行結果
256
125
167
##ブール演算子の優先順位
Python言語の演算子には優先順位があります。例えば、+(和)と*(積)が同時にある場合は*が優先されます。
answer = 2 * 3 + 7
print(answer)
実行結果
13
ブール演算子にも、同じように優先順位があります。ブール演算子の中ではnotが一番優先順位が高く、and、orと続きます。そのため、ブール演算子を組み合わせて使う場合は優先順位に気をつけないと、思った通りに動いてくれないことがあります。
例えば、「100未満または200以上」でなおかつ「偶数」を取り出すとします。
list = [30, 256, 125, 167, 45, 401]
for number in list:
if(number < 100 or number >= 200 and number % 2 == 0):
print(number)
実行結果
30
256
45
一見正しそうな条件式ですが、なぜか偶数ではない45も出力されてしまっています。これは、andのほうがorよりも優先順位が高いため、条件式が「200以上かつ偶数、または100未満の数字」に変わってしまうからです。この式を正しく実現させるためには()を使って優先順位を変更するようにしましょう。
list = [30, 256, 125, 167, 45, 401]
for number in list:
if( (number < 100 or number >= 200) and number % 2 == 0):
print(number)
実行結果
30
256