プログラムを作成する際、「もしAなら処理1を実行し、そうでなくもしBなら処理2を実行し、それ以外なら処理3を実行する」といった、複数の条件に応じた分岐処理が必要になることが多々あります。
Pythonでは、if 文に加え、elif(else ifの略)と else を組み合わせることで、このような複雑な条件分岐を記述できます。
この記事では、3つ以上の分岐を持つ条件式の書き方と、評価の順序に関する重要なルールについて解説します。
基本的な構文
複数の条件を判定する場合の基本構造は以下の通りです。
if 条件式A:
# 条件式A が True の場合に実行される処理
elif 条件式B:
# 条件式A が False で、かつ 条件式B が True の場合に実行される処理
elif 条件式C:
# A も B も False で、かつ 条件式C が True の場合に実行される処理
else:
# すべての条件式が False の場合に実行される処理
elif: 「そうでなく、もし~なら」を意味します。必要な数だけ記述できます。else: 「上記のいずれにも当てはまらない場合」を意味します。最後に1つだけ記述できます(省略も可能です)。
具体的な使用例
1. 数値の範囲による判定(成績評価)
ある数値がどの範囲に含まれるかによって処理を分ける例です。ここでは試験の点数(スコア)に応じて評価(グレード)を出力します。
score = 78
print(f"点数: {score}")
if score >= 90:
print("評価: S (Excellent)")
elif score >= 80:
print("評価: A (Very Good)")
elif score >= 70:
print("評価: B (Good)")
elif score >= 60:
print("評価: C (Average)")
else:
print("評価: D (Failure)")
実行結果:
点数: 78
評価: B (Good)
このプログラムは上から順に条件を確認します。
78 >= 90はFalseなので次へ。78 >= 80はFalseなので次へ。78 >= 70はTrueなので、"評価: B"を出力して全体の処理を終了します。- それ以降の
elifやelseは無視されます。
2. 文字列の一致による判定(信号機のアクション)
数値だけでなく、文字列の状態に応じた分岐も可能です。
traffic_light = "yellow"
if traffic_light == "green":
print("進んでください。")
elif traffic_light == "yellow":
print("停止してください。(安全に停止できない場合を除く)")
elif traffic_light == "red":
print("停止してください。")
else:
print("信号機のエラーです。")
実行結果:
停止してください。(安全に停止できない場合を除く)
判定順序の重要性
if … elif 構造において最も重要なのは、**「条件は上から順番に評価され、最初に真(True)になったブロックだけが実行される」**という点です。
条件の記述順序を間違えると、意図しない結果になることがあります。
誤った例
例えば、会員ランクを判定する際、条件の厳しい「プラチナ会員(購入額10万円以上)」よりも先に、条件の緩い「ゴールド会員(購入額5万円以上)」を判定してしまうとどうなるでしょうか。
total_purchase = 150000 # 15万円購入
# 悪い例: 条件の順序が不適切
if total_purchase >= 50000: # 5万円以上
print("ゴールド会員です。")
elif total_purchase >= 100000: # 10万円以上
print("プラチナ会員です。")
else:
print("通常会員です。")
実行結果:
ゴールド会員です。
本来は「プラチナ会員」と判定されるべきですが、最初の total_purchase >= 50000 が True になってしまうため、そこで処理が確定してしまいました。
正しい例
範囲を判定する場合は、条件が厳しい(範囲が狭い)ものから先に記述する必要があります。
# 良い例: 条件が厳しい順に記述
if total_purchase >= 100000: # 先に10万円以上をチェック
print("プラチナ会員です。")
elif total_purchase >= 50000:
print("ゴールド会員です。")
else:
print("通常会員です。")
実行結果:
プラチナ会員です。
まとめ
- 3つ以上の分岐には
if,elif,elseを使用します。 elifはいくつでも追加でき、elseは最後に1回だけ記述します(省略可)。- 条件は上から順に評価され、一度
Trueになるとそれ以降の条件は無視されます。 - 条件式の順序(特に数値の範囲判定)には注意が必要です。
