条件分岐とは
Pythonのプログラムは上から順に処理されていきますが、その途中で条件によって動作を分けたい場合があります。このことを条件分岐と言います。
条件分岐は条件に合っているか合っていないかの2択になります。「もし条件Aに一致するなら処理αを行う。もし条件Aに一致しないなら処理αは行わない。」という2択です。
実際のプログラミングでは変数の状態によって条件分岐を行うことが圧倒的に多く、「変数aの値が1なら開始処理の関数を呼び出す」というような使われ方が一番多いです。
条件分岐の書き方
条件分岐には「if文」を利用します。
「if文」には4種類の書き方があります。if文だけの場合、ifとelseの場合、ifとelifの場合、ifとelifとelseの場合の4種類です。
ifは最初の条件を書きます。elifは「else if」の意味で、2番目以降で条件が必要な場合に書きます。elseはそれ以外の条件の場合に書きます。elifやelseは書く必要がなければ省略しても構いません。
ifだけの場合
1 2 |
if 条件式: 条件に一致した場合に行う処理 |
ifとelseの場合
1 2 3 4 |
if 条件式: ifの条件に一致した場合に行う処理 else: ifの条件に一致しなかった場合に行う処理 |
ifとelifの場合
1 2 3 4 |
if 条件式: ifの条件に一致した場合に行う処理 elif 条件式: elifの条件に一致した場合に行う処理 |
ifとelifとelseの場合
1 2 3 4 5 6 |
if 条件式: ifの条件に一致した場合に行う処理 elif 条件式: elifの条件に一致した場合に行う処理 else: ifの条件にもelifの条件にも一致しなかった場合に行う処理 |
条件分岐の書き方のルール
条件分岐の書き方には以下の4つのルールがあります。
- 条件分岐の先頭は必ず「if」の条件文になる。
- if や elif と条件文の間にはスペースを入れる。
- if、elif、elseの末尾にはコロン(:)を付ける。
- if、elif、elseの条件に一致した際に処理される部分にはインデントを入れる。
1. 条件分岐の先頭は必ずifになる
条件分岐の先頭はかならず「if」の条件文になります。
「if (省略不可) → elif(省略可) → else(省略可)」の順序で書きます。
ifを省略したり、elifやelseを先に書いたりするとエラーになります。elifより前にelseを書くとこれもエラーになります。
2. if や elifと条件文の間にスペースを入れる
if、elif、と条件文の間にはスペースを空ける必要があります。
if、elifと条件文の間のスペースは1文字以上空けていれば何文字スペースを入れても構いませんが、通常はスペース1文字分を空けます。
3. if、elif、elseの末尾にコロン(:)を付ける
if、elif、elseの末尾にはコロン(:)を付けて終端を表します。
コロン(:)の左右にもスペースを何文字入れても構いませんが、通常はスペースは入れません。
4. if、elif、elseの条件に一致した処理部分はインデントする
条件に一致した場合に行う処理はif、elif、elseからインデント(一般的には半角スペース4文字)を下げる必要があります。
このように、if、elif、elseの行とインデントした処理部分をまとめて、「ifブロック」「elifブロック」「elseブロック」と呼びます。
1 2 3 4 5 6 7 |
a = 1 if a == 1: print("a=1") elif a == 2: print("a=2") else: print("else") |
条件文の書き方
2つの条件の組み合わせ(andとor)
条件式は複数の条件を組み合わせて書くことが可能です。
2つの条件が両方とも成立する場合は「and」を使い、2つの条件のどちらかが成立すればよい場合は「or」を使います。このときの「and」を論理積、「or」を論理和と言います。
1 2 3 4 5 6 7 8 9 10 11 |
a = 1 b = 2 # aが1で、かつ、bが2の場合 if a == 1 and b == 2: print("if") # aが3、または、bが3の場合 elif a == 3 or b == 3: print("elif") # その他 else: print("else") |
if文の中にif文
if文のブロックに、さらに別のif文を入れることが出来ます。
以下のように何階層にもなるif文を書くことも可能です。
階層の数には制限はありませんが、あまりに深いネスト(階層)はコードが読みにくくなるため、一般的には3階層ぐらいまでにしておくことがよいと言われます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
if a == 10: if a == 10: if a == 10: if a == 10: if a == 10: if a == 10: if a == 10: if a == 10: if a == 10: if a == 10: if a == 10: if a == 10: if a == 10: print("nest") |
条件文のかっこ
2つ以上の条件文を組み合わせる場合に、条件文の区切りを見やすくするために ( ) を付けることが可能です。
以下は、「aが1、かつ、bが2の場合」、もしくは、「cが3の場合」という条件文をかっこを付けて明示しています。
1 |
if ((a == 1) and (b == 2)) or (c == 3): |
三項演算子
通常、if文などの条件分岐を行うプログラムは複数行に分けて書きますが、1行にまとめて書くこともできます。この書き方を「三項演算子」と言います。
構文は以下のようになります。ifやelseの後ろのコロン(:)は付けません。インデントもしません。
1 |
条件に一致した場合の処理 if 条件式 else 条件に一致しない場合の処理 |
ちょっとわかりにくいので、実際のコードで説明します。
通常のif、else文の書き方はこんな感じになります。
1 2 3 4 |
if a == 1: print("a=1") elif a == 2: print("a=2") |
上の通常の書き方を三項演算子を使って書くと以下のようになります。
1 |
print("a=1") if a == 1 else print("a=2") |
このように、三項演算子は1行で書くことはできますが、直感的ではなくプログラムが見づらくなることの方が多くなるためお勧めしません。私も一切使いません。
ただ、自分が書かないとしても他の人が書いたプログラムを読む際に三項演算子を使って書いてある場合のために知識としては覚えておきましょう。