LoginSignup
37
34

More than 5 years have passed since last update.

【Python入門】ブール演算子(and・or・not)の使い方

Last updated at Posted at 2016-12-16

※こちらの記事は、プロスタ編集部が現在大変人気の高い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

37
34
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
37
34