Pythonプログラミング入門者をもっとも悩ます3つ目のハードル条件分岐(if~elif~else)について解説します。
条件により処理を分岐させる理由
ある条件が成立した場合と成立しない場合とで異なる処理を実行させたい場合などに使用します。
2つに分岐させる(if~else)
条件により処理を2つに分岐させる書き方は下記の通りです。
if 条件 :
条件が成立した場合の処理
複数行も可能
else:
条件が成立しない場合の処理
複数行も可能
インデント(字下げ)は半角空白4つ分です。インデントしないとエラーとなります。
サンプルプログラム(ソースコード)
例えば、次の表のように動物園の入園料が年齢によって2つ(「こども」と「おとな」)に分けられている場合を考えてみてください。
年齢 | 入園料 |
---|---|
こども(12歳以下) | 500円 |
おとな(13歳以上) | 1000円 |
入園者の年齢にあった入園料を表示させるプログラムです。
入園者の年齢が10歳の場合
# 入園者の年齢(こども)
age = 10
# 条件により処理を分岐
if age <= 12:
print("こどもの入園料は500円です。")
else:
print("おとなの入園料は1000円です。")
サンプルプログラム(ソースコード)の保存先
- 保存先(venv仮想環境):C:\code\py310\venv\trial
- ファイル名:sample_code_013.py
- エンコード:UTF-8
コマンドプロンプトでサンプルプログラム(ソースコード)を実行
実行すると「こどもの入園料は500円です。」と表示され「else:」側の処理が実行されていないことがわかります。
(trial) C:\code\py310\venv\trial>python sample_code_013.py
こどもの入園料は500円です。
(trial) C:\code\py310\venv\trial>
サンプルプログラム(ソースコード)
入園者の年齢を「age = 10」から「age = 15」に変更した場合(15歳の場合)
# 入園者の年齢(おとな)
age = 15
# 条件により処理を分岐
if age <= 12:
print("こどもの入園料は500円です。")
else:
print("おとなの入園料は1000円です。")
コマンドプロンプトでサンプルプログラム(ソースコード)を実行
実行すると「おとなの入園料は1000円です。」と表示され「if age <= 12:」側の処理が実行されていないことがわかります。
(trial) C:\code\py310\venv\trial>python sample_code_013.py
おとなの入園料は1000円です。
(trial) C:\code\py310\venv\trial>
サンプルプログラムに赤字で解説を追記しました。入園者の年齢が12歳以下の場合と12歳以下ではない場合とで実行させる処理を2つに分けています。
# 入園者の年齢(こども)
age = 10
# 条件により処理を分岐
if age <= 12:
# 条件「age <= 12」が成立する場合はこちらの処理を実行
# 言い換えると・・・
# 年齢が12歳以下の場合はこちらを実行
print("こどもの入園料は500円です。")
else:
# 条件「age <= 12」が成立しない場合はこちらの処理を実行
# 言い換えると・・・
# 年齢が12歳以下ではない場合はこちらを実行
print("おとなの入園料は1000円です。")
3つに分岐させる(if~elif~else)
条件により処理を3つに分岐させる書き方は下記の通りです。
if 条件1 :
条件1が成立した場合の処理
複数行も可能
elif 条件2 :
条件2が成立した場合の処理
複数行も可能
else:
条件1と条件2が成立しない場合の処理
複数行も可能
サンプルプログラム(ソースコード)
動物園の入園料に「シニア」が追加されました。入園料が3つ(「こども」と「おとな」と「シニア」)に分けられている場合を考えてみてください。
年齢 | 入園料 |
---|---|
こども(12歳以下) | 500円 |
おとな(13歳以上) | 1000円 |
シニア(65歳以上) | 800円 |
入園者の年齢が70歳の場合
# 入園者の年齢(シニア)
age = 70
# 条件により処理を分岐
if age <= 12:
print("こどもの入園料は500円です。")
elif age >= 65:
print("シニアの入園料は800円です。")
else:
print("おとなの入園料は1000円です。")
サンプルプログラム(ソースコード)の保存先
- 保存先(venv仮想環境):C:\code\py310\venv\trial
- ファイル名:sample_code_014.py
- エンコード:UTF-8
コマンドプロンプトでサンプルプログラム(ソースコード)を実行
実行すると「シニアの入園料は800円です。」と表示され「if age <= 12:」と「else:」の処理が実行されていないことがわかります。
(trial) C:\code\py310\venv\trial>python sample_code_014.py
シニアの入園料は800円です。
(trial) C:\code\py310\venv\trial>
サンプルプログラムに赤字で解説を追記しました。入園者の年齢が12歳以下の場合と65歳以上の場合とそのどちらでもない場合とで実行させる処理を3つに分けています。
# 入園者の年齢(シニア)
age = 70
# 条件により処理を分岐
if age <= 12:
# 条件「age <= 12」が成立する場合はこちらの処理を実行
# 言い換えると・・・
# 年齢が12歳以下の場合はこちらを実行
print("こどもの入園料は500円です。")
elif age >= 65:
# 条件「age <= 12」が成立せず
# 条件「age >= 65」が成立する場合はこちらの処理を実行
# 言い換えると・・・
# 年齢が12歳以下ではなく65歳以上の場合はこちらを実行
print("シニアの入園料は800円です。")
else:
# 条件「age <= 12」と「age >= 65」が成立しない場合はこちらの処理を実行
# 言い換えると・・・
# 年齢が12歳以下ではなく65歳以上でもない場合はこちらを実行
print("おとなの入園料は1000円です。")
条件で分岐させたが何も処理を実行したくない場合
変数numの値が偶数の場合だけ処理を実行したい場合があったとします。赤字の「pass」を記入することで変数numが奇数だった場合「if」側の処理がパスされます。もちろん「else」側に記入すればそちらがパスされます。
サンプルプログラム(ソースコード)
変数numの値を奇数の「13」にしています。
num = 13
if num % 2:
pass
else:
print("偶数です")
「pass」を記入せず空欄にするとエラーとなります。
サンプルプログラム(ソースコード)の保存先
- 保存先(venv仮想環境):C:\code\py310\venv\trial
- ファイル名:sample_code_015.py
- エンコード:UTF-8
コマンドプロンプトでサンプルプログラム(ソースコード)を実行
実行すると変数numの値が奇数なので何も処理されません。
(trial) C:\code\py310\venv\trial>python sample_code_015.py
(trial) C:\code\py310\venv\trial>
まとめ
- 条件分岐では条件が成立するかしないかで異なる処理をさせる
- 2つに分岐させる場合はif~elseを使用する
- 3つに分岐させる場合はif~elif~elseを使用する
- 条件分岐をさらに増やす場合は「elif」を追加する
- 「if」「elif」「else」の行末には「:」コロンを付ける
- 「条件1が成立した場合の処理」と「条件2が成立した場合の処理」と「条件1と条件2が成立しない場合の処理」の行頭はインデント(字下げ)する
- 条件分岐させたが何の処理も実行させたくない場合は「pass」を使う