閉じる

Pythonのif-elif-else文の基本と書き方: 複数条件の分岐を解説

複数の条件を順番に判定して、適切な処理を1つだけ選びたいときに活躍するのがPythonのif-elif-elseです。

上から順に条件を評価し、最初に真になったブロックだけを実行するため、読みやすさとバグの少なさにつながります。

初心者でも迷わない書き方と、実務でよく使うパターンを丁寧に解説します。

Pythonのif-elif-else文とは

複数条件を1本の流れで判定する仕組み

1本の流れとは

if-elif-elseは複数の条件を縦に並べ、上から順番に評価して最初の一致だけを実行する構文です。

後続のelifelseは、すでにどこかが実行された時点でスキップされます。

これにより、処理の選択が常に1つに定まります。

ミニサンプル

最初に真になった分岐だけが実行される様子を確認してみます。

Python
# 上から順に評価し、最初の一致だけを実行する例
x = 7

if x < 0:
    print("負の数")
elif x % 2 == 0:
    print("偶数")
else:
    print("奇数")  # x=7 は上の2条件に当てはまらないのでここ
実行結果
奇数

複数のifとの違いと使い分け

比較表

「複数のif」と「if-elif-else」は、同じ見た目でも意味が違います

状況に応じて使い分けましょう。

書き方条件が複数真のとき実行ブロック数典型用途
if-elif-else最初に真の1つだけ1ランク分け、閾値の段階判定、カテゴリ分類
複数のif真の分だけすべて複数複数の独立チェック、同時に成り立つ検査

「必ず1つだけ選びたい」ならif-elif-else、「条件は独立で両方実行したい」なら複数のifが適切です。

動くサンプル

Python
# if-elif-else は1つだけ
temp = 35

if temp >= 30:
    print("暑い")
elif temp >= 20:
    print("暖かい")
else:
    print("涼しい")
実行結果
暑い
Python
# 複数の if は独立に評価される
temp = 35

if temp >= 30:
    print("暑い")
if temp >= 20:
    print("暖かい")  # こちらも条件を満たすので実行される
実行結果
暑い
暖かい

どんなときに使うか(初心者向けの判断基準)

カテゴリや段階が互いに重ならず、1つだけ選びたいときはif-elif-elseを選びます。

例えば、テストの点数でA/B/Cを割り振る、コマンド名に応じて処理を分岐する、などです。

逆に、入力検証のように複数のチェックを全部通したい場合はifを複数使います。

迷ったら「1つだけ選ぶのか、複数実行したいのか」で判断すると良いです。

if-elif-else文の基本の書き方

構文のテンプレート(インデントとコロン)

まずは形を覚える

Pythonではコロン:とインデントが構文の鍵です。

インデントは通常4スペースを使います。

Python
# 構文テンプレート
value = 10

if 条件式1:  # コロンを忘れない
    # 条件式1が真のときの処理 (4スペースでインデント)
    pass
elif 条件式2:
    # 条件式1が偽で、条件式2が真のときの処理
    pass
else:
    # 上のどれにも当てはまらないときの処理
    pass

よくある落とし穴

コロンの付け忘れとインデントの乱れが初心者の最頻エラーです。

エディタの自動整形を活用すると防げます。

elifとelseの配置と実行の流れ(上から順に判定)

実行の基本ルール

上から順に判定し、最初に真になった分岐だけが実行されるというルールを常に意識します。

条件が重なる可能性があるなら、より厳しい条件を先に書くのがコツです。

Python
# 実行の流れを確認
x = 12

if x % 3 == 0:
    print("3の倍数")           # ここで実行され、以降はスキップ
elif x % 2 == 0:
    print("2の倍数")
else:
    print("それ以外")
実行結果
3の倍数

条件が重ならない範囲の設計

設計の原則

範囲判定は「上限または下限で線を引き、互いに重ならないようにする」のが基本です。

Pythonでは80 <= score < 90のような連鎖比較が読みやすく安全です。

サンプル

Python
# 重ならない範囲の設計
score = 85

if 90 <= score <= 100:
    grade = "S"
elif 80 <= score < 90:
    grade = "A"
elif 70 <= score < 80:
    grade = "B"
elif 60 <= score < 70:
    grade = "C"
elif 0 <= score < 60:
    grade = "F"
else:
    grade = "無効"  # 範囲外の値

print(grade)
実行結果
A

初心者向けの実例で理解する

数値の範囲で分岐する(例: テストの評価)

仕様

点数(0〜100)をS/A/B/C/Fに分類し、範囲外は無効とする例です。

条件は上から厳しい順(高い点数ほど先)に並べます。

Python
# テストの評価を割り当てる例
def grade(score: int) -> str:
    # 範囲外のチェックを先に行う
    if score < 0 or score > 100:
        return "無効"
    # 厳しい条件から順に判定
    elif score >= 90:
        return "S"
    elif score >= 80:
        return "A"
    elif score >= 70:
        return "B"
    elif score >= 60:
        return "C"
    else:
        return "F"  # それ以外はF

# いくつかの値で動作確認
samples = [95, 82, 68, 40, -5, 120]
for s in samples:
    print(f"{s}: {grade(s)}")
実行結果
95: S
82: A
68: C
40: F
-5: 無効
120: 無効

文字列で分岐する(例: コマンド入力)

仕様

ユーザーのコマンド文字列に応じて処理を分ける例です。

大文字小文字や余分な空白を吸収するためにlower()strip()を使います。

Python
# コマンドに応じて分岐する例
commands = ["start", "Stop", " help ", "status"]

for raw in commands:
    cmd = raw.strip().lower()  # 正規化してから判定
    if cmd == "start":
        print("システムを開始します")
    elif cmd == "stop":
        print("システムを停止します")
    elif cmd == "help":
        print("使い方: start/stop/help")
    else:
        print(f"不明なコマンド: {raw!r}")
実行結果
システムを開始します
システムを停止します
使い方: start/stop/help
不明なコマンド: 'status'

デフォルトの処理はelseにまとめる

考え方

未知の入力や新しい値に対して「無難な動作」を決めておくとプログラムが堅牢になります

その受け皿がelseです。

必ずしもエラーにせず、既定値に落とす戦略もよく使われます。

Python
# ログレベル名を数値に変換。未知の値は INFO(20) にフォールバック
def to_log_level(name: str) -> int:
    n = name.lower()
    if n == "debug":
        return 10
    elif n == "info":
        return 20
    elif n in ("warn", "warning"):
        return 30
    elif n == "error":
        return 40
    else:
        # 既定の処理を1箇所にまとめる
        return 20

tests = ["INFO", "verbose", "error"]
for t in tests:
    print(f"{t:8} -> {to_log_level(t)}")
実行結果
INFO     -> 20
verbose  -> 20
error    -> 40

きれいに書くコツと注意点

条件の順番で結果が変わる点に注意

悪い例(順番が不適切)

広い条件を先に書くと、後続の条件に到達できず誤判定になります

これはバグの温床です。

Python
# 85点は本来「優秀」にしたいが、先に 60点以上 を判定してしまっている
score = 85

if score >= 60:
    print("合格")     # ここで止まってしまう
elif score >= 80:
    print("優秀")
else:
    print("不合格")
実行結果
合格

良い例(厳しい条件を先に)

より厳しい条件を先に書くことで、意図通りの分岐になります。

Python
score = 85

if score >= 80:
    print("優秀")
elif score >= 60:
    print("合格")
else:
    print("不合格")
実行結果
優秀

ネストを避けてelifでフラットにする

ネストした例(読みにくい)

ネストしすぎると可読性が落ち、ミスも増えます

Python
# ネストが深くなる例
age = 20

if age >= 0:
    if age < 13:
        group = "child"
    else:
        if age < 20:
            group = "teen"
        else:
            group = "adult"
else:
    group = "invalid"

print(group)
実行結果
adult

フラットな例(読みやすい)

elifで一直線にすると読みやすく、保守もしやすいです。

Python
age = 20

if age < 0:
    group = "invalid"
elif age < 13:
    group = "child"
elif age < 20:
    group = "teen"
else:
    group = "adult"

print(group)
実行結果
adult

よくあるミス(: の付け忘れやインデント、== と =)

コロンの付け忘れ

コロン:を忘れるとSyntaxErrorです。

Python
# 悪い例: コロンがない
# if x > 0
#     print("正")
# SyntaxError: invalid syntax

インデントの不整合

インデントが揃っていないとIndentationErrorになります。

スペースとタブの混在も避けましょう。

Python
# 悪い例: インデントがない
# if x > 0:
# print("正")
# IndentationError: expected an indented block

比較演算子の誤り(== と =)

比較は==、代入は=です。

ここを取り違えるとエラーになります。

Python
# 悪い例: 代入演算子を使ってしまう
# x = 3
# if x = 3:
#     print("xは3")  # SyntaxError

# 良い例: 比較演算子を使う
x = 3
if x == 3:
    print("xは3")
実行結果
xは3

まとめ

if-elif-elseは「上から順に評価して最初の一致だけを実行する」ことで、複数条件の分岐を安全かつ読みやすく書ける構文です。

実務では、カテゴリ分類や閾値ベースの判定、未知の入力の既定処理に頻出します。

書く際は、条件の順序を厳しいものから並べ、範囲が重ならないように設計し、elseでデフォルト処理をまとめると堅牢になります。

コロンとインデント、そして===の区別に気をつければ、初心者でも安心して扱えます。

さらに慣れてきたら、条件式の表現を簡潔にしていくことで、より読みやすいコードへと洗練できます。

この記事を書いた人
エーテリア編集部
エーテリア編集部

人気のPythonを初めて学ぶ方向けに、文法の基本から小さな自動化まで、実際に手を動かして理解できる記事を書いています。

クラウドSSLサイトシールは安心の証です。

URLをコピーしました!