Pythonで条件分岐を行うには if
文を利用します。ここでは if 文の扱い方について解説します。Pythonの学習をすすめる上で、if
文の理解は不可欠なポイントです。
if 文の基本的な使い方
if
文は指定した条件式が True
(真)の時にだけ処理を実行します。基本的な書式は次の通りです。
条件式がTrue(真)のときに実行する処理
if
文の最後に:(コロン)を付けます。
条件式がTure
(真)の場合は、その後に記述されたブロックの中の処理を実行します。
Pythonではブロックをインデントで定義しており、インデントはスペースを4つ使う事が推奨されています。
Visual Studio Codeを利用する場合は、インデントの階層毎に色分けしてくれる拡張機能があります。
・参考記事:Visual Studio Code おすすめ拡張機能
次のサンプルプログラムでは、value
の値を判定し、1だった場合のみ「1です」と出力します。
1 2 3 4 5 6 | a = 1 if a == 1: print('値は1です') # 値は1です |
次のプログラムでは、if
文が false
(偽)となるため、if
文のブロックの処理は実行されずに、次の処理に移ります。
1 2 3 4 5 6 7 8 | a = 5 if a == 1: print('値は1です') print('値は1ではありません') # 値は1ではありません |
条件式が偽の時の処理 (if else)
if
文は指定した条件式が True
(真)の時にブロック内の処理を実行しますが、else
文を記述しておくと、False
(偽)の時に実行する処理を指定する事ができます。
else
の後ろにも:(コロン)を付ける必要があります。
次のサンプルでは、if
文での判定が False
となるため、else
文の後のブロックが実行されます。
1 2 3 4 5 6 7 8 | a = 5 if a == 1: print('値は1です') else: print('値は1ではありません') # 値は1ではありません |
複数条件での条件分岐(if elif else)
if
文では単独の条件式だけではなく、複数の条件式を使った条件分岐を記述することもできます。複数の条件式を追加するには、elif
を使用して、if...elif...else
の構文型にします。
条件式 1 が偽だった場合、次の条件式 2 を評価して、真の場合は次のブロックの処理を実行して 次のif
文の処理へ移ります。すべての条件式で同じことを繰り返し、最後にすべての条件式が偽だった場合に最後のブロックの処理を実行します。
1 2 3 4 5 6 7 8 9 10 11 12 | a = 3 if a == 1: print('値は1です') elif a == 2: print('値は2です') elif a == 3: print('値は3です') else: print('値は1でも2でも3でもありません') # 値は3です |
論理演算子(and)による複数条件指定
論理演算子のand
を利用して、複数の条件を記述することもできます。and
演算子は、2つ以上の条件文のすべてがTrue
(真)の状態を指定する時に使用します。
条件式1、条件式2がともにTrueの時に実行する処理
1 2 3 4 5 6 7 8 | a = 10 if a >= 0 and a < 20: print('aは0以上、20未満') else: print('aは0未満、もしくは20以上') # aは0以上、20未満 |
論理演算子(or)による複数条件指定
論理演算子のor
を利用して、複数の条件を記述することもできます。or
演算子は、2つ以上の条件文のうち少なくとも1つがTrue
(真)の状態を指定する時に使用します。
条件式1、条件式2のどちらかがTrueの時に実行する処理
以下の例の場合、a < 20
がTrue
(真)となるため、print('True')
が実行されます。
1 2 3 4 5 6 7 8 | a = 10 if a >= 50 or a < 20: print('True') else: print('False') # True |
論理演算子(not)による否定条件指定
not
は、条件式の結果がTrue
(真)であればFalse
(偽)、False
(偽)の場合はTrue
(真)を返す演算子です。そのため if not
条件式は、条件がFalse
(偽)であればTrue
(真)を返すことになり、if
文内の処理が実行されます。
条件式1がFalseの時に実行する処理
else:
条件式1がTrueの時に実行する処理
以下の例では、条件式1の a == 1
が False
ですが、not
演算子により True
となり、print('値は1ではありません')
が実行されます。
1 2 3 4 5 6 7 8 | a = 5 if not a == 1: print('値は1ではありません') else: print('値は1です') # 値は1ではありません |
以下の場合は a = 1
のため、条件式1の a == 1
が True
ですが not
演算子によりFalse
となり、if
ブロックの処理は実行されず、else
ブロックの処理が実行されます。
1 2 3 4 5 6 7 8 | a = 1 if not a == 1: print('値は1ではありません') else: print('値は1です') # 値は1です |
andとorを使った複数条件の指定
and
と or
を組み合わせて条件を指定する事ができます。この場合はand
がor
より優先して判定されます。
・関連記事:演算子ー演算子の優先順位
上記の条件文がTrueの時に実行する処理
以下の場合 a > 10 and b == 30
が優先して判定されて False
となり、a < 20
が True
なので、True or False
の演算の結果 True
となります。
1 2 3 4 5 6 7 8 9 | a = 5 b = 10 if a < 20 or a > 10 and b == 30 : print('True') else: print('False') # True |
もし a < 20 or a > 10
を先に処理したい場合は、()括弧で条件式を囲むことで判定順序を変更します。 (True or False) and False
の演算となり、結果はFalse
となります。
1 2 3 4 5 6 7 8 9 | a = 5 b = 10 if (a < 20 or a > 10) and b == 30 : print('True') else: print('False') # False |
何も実行しない(pass)
Pythonのpass
文は「何も実行しない」という命令であり、構文上は何かしら記述する必要があるが、何も処理を実行しない という場合に使用します。
Pythonでは条件分岐のif文では中身を省略することができない為、何も記述しないとエラーになります。そこで何も処理をさせない場合は、pass
文を記述することでエラーを回避します。
以下の場合、1番めの条件式がTrue
となり pass
が実行されることで、何も出力されずに終了します。
1 2 3 4 5 6 7 8 9 | a = 3 str = 'work' if a == 3: pass elif a == 3 and str == 'work': print('条件2がTrue') elif a == 4 and str == 'python': print('条件3がTrue') |
if else文を一行で記述する(三項演算子)
if
文のような処理を一行で記述することができる記述方法があり、三項演算子と呼びます。
構文は以下のようになります。
1 2 3 4 5 6 7 8 9 10 | a = 6; b = 4 print('big') if a*b >20 else print('small') # big #通常のif文記述 if a*b > 20 : print('big') else: print('small') |
if...elif...else
文も三項演算子で書くことはできますが、可読性が低くなるためインデント使って書くことをおすすめします。
Pythonで if
を使って条件分岐を行う方法を解説しました。
・関連記事:繰り返し処理(for文)