Python | elif 節

Python
スポンサーリンク

ここでは、前回のすべての例について、実際にどの行が評価され、何が起きるかを「トレース(逐次実行の説明)」として示します。各例で代表的な入力ケースを複数用意し、True/False の判定や、実行された行を順番に追っていきます。


1) 基本フローの例(x を分類)

対象コード:

x = 7  # 仮
if x < 0:
    print("負の数")
elif x == 0:
    print("ゼロ")
elif x < 10:
    print("0より大きく10未満")
else:
    print("10以上")
Python

トレース例A(x = -3)

  1. x = -3 を代入
  2. if x < 0:-3 < 0Trueこのブロックを実行
  3. print("負の数") が実行
  4. 以降の elifelse評価しない(ここで終了)

トレース例B(x = 0)

  1. x = 0
  2. if x < 0:0 < 0False → 次へ
  3. elif x == 0:0 == 0Trueこのブロックを実行
  4. print("ゼロ") 実行
  5. 以降は評価しない(終了)

トレース例C(x = 7)

  1. x = 7
  2. if x < 0:False
  3. elif x == 0:False
  4. elif x < 10:7 < 10Trueこのブロックを実行
  5. print("0より大きく10未満") 実行 → 終了

トレース例D(x = 12)

  1. x = 12
  2. if x < 0:False
  3. elif x == 0:False
  4. elif x < 10:12 < 10False
  5. else: に到達 → このブロックを実行
  6. print("10以上") 実行 → 終了

2) 例題1 — 正/負/ゼロ

対象コード:

x = int(input("整数を入力してください: "))
if x > 0:
    print("正の数です")
elif x == 0:
    print("ゼロです")
else:
    print("負の数です")
Python

トレース例(入力: 10)

  1. ユーザー入力 "10"int("10")x = 10
  2. if x > 0:10 > 0True実行
  3. print("正の数です") → 終了

トレース例(入力: 0)

  1. x = 0
  2. if x > 0:False
  3. elif x == 0:True実行
  4. print("ゼロです") → 終了

トレース例(入力: -5)

  1. x = -5
  2. if x > 0:False
  3. elif x == 0:False
  4. else:実行
  5. print("負の数です") → 終了

3) 例題2 — 成績判定(順番が超重要)

対象コード:

score = int(input("点数を入力: "))

if score >= 90:
    grade = "A"
elif score >= 80:
    grade = "B"
elif score >= 70:
    grade = "C"
elif score >= 60:
    grade = "D"
else:
    grade = "F"

print("評定:", grade)
Python

トレース例(入力: 95)

  1. score = 95
  2. score >= 90TrueA を代入
  3. 以降の elif はスキップ
  4. print評定: A

トレース例(入力: 83)

  1. score = 83
  2. score >= 90False
  3. score >= 80TrueB
  4. 残りスキップ → 評定: B

トレース例(入力: 74)

  1. score = 74
  2. >=90False
  3. >=80False
  4. >=70TrueC評定: C

トレース例(入力: 61)

  1. score = 61
  2. >=90 → F
  3. >=80 → F
  4. >=70 → F
  5. >=60TD評定: D

トレース例(入力: 40)

  1. score = 40
  2. すべての elifFalseelse 実行 → F評定: F

ポイント:高い基準から順に書くから誤判定を防げる。


4) 例題3 — 文字列の種類(isdecimal / isalpha)

対象コード:

s = input("文字列を入力: ")

if s.isdecimal():
    print("数字だけです")
elif s.isalpha():
    print("アルファベット(または文字)だけです")
else:
    print("混合か記号などです")
Python

トレース例1(入力: "123")

  1. s = "123"
  2. s.isdecimal()True → **「数字だけ」**を出力 → 終了

トレース例2(入力: "abc")

  1. s = "abc"
  2. isdecimal()False
  3. isalpha()True → **「文字だけ」**を出力 → 終了

トレース例3(入力: "あいう")

  1. s = "あいう"
  2. isdecimal()False
  3. isalpha()多言語文字でも True「文字だけ」 → 終了

トレース例4(入力: "abc123")

  1. s = "abc123"
  2. isdecimal()False
  3. isalpha()False
  4. else「混合か記号など」

トレース例5(入力: "123" ※全角)

  1. s = "123"
  2. isdecimal()True(全角数字も数字扱い)
  3. 「数字だけ」 → 終了

5) 実践例 — BMI(関数+elif+入力チェック)

対象コード(再掲):

def calc_bmi(height_cm, weight_kg):
    h = height_cm / 100
    return weight_kg / (h * h)

def bmi_category(bmi):
    if bmi < 18.5:
        return "低体重"
    elif bmi < 25:
        return "普通体重"
    elif bmi < 30:
        return "肥満(1度)"
    else:
        return "肥満(2度以上)"

try:
    h = float(input("身長(cm)を入力: "))
    w = float(input("体重(kg)を入力: "))
    bmi = calc_bmi(h, w)
    print(f"BMI: {bmi:.1f}{bmi_category(bmi)}")
except ValueError:
    print("数値を正しく入力してください。")
Python

トレース例1(入力: 身長=170, 体重=65)

  1. h = 170.0, w = 65.0 を取得
  2. calc_bmi(170.0, 65.0) 呼び出し
    • h = 170.0 / 100 = 1.7
    • return 65.0 / (1.7 * 1.7) = 65.0 / 2.89 ≒ 22.491…
  3. bmi ≒ 22.491
  4. bmi_category(22.491)
    • bmi < 18.5False
    • bmi < 25True“普通体重” を返す
  5. print(f"BMI: {bmi:.1f} → {カテゴリ}")BMI: 22.5 → 普通体重

トレース例2(入力が不正:身長に "abc")

  1. h = float("abc") の変換で ValueError 発生
  2. except ValueError: に飛ぶ
  3. print("数値を正しく入力してください。") 実行 → 終了

6) if を並べる vs elif(独立チェックと排他チェック)

デモ用コード:

a = 12

# 独立チェック(両方出る可能性あり)
if a % 2 == 0:
    print("偶数")
if a > 10:
    print("10より大きい")

# 排他チェック(どれか1つだけ)
if a > 20:
    print("20超")
elif a > 10:
    print("10超20以下")
else:
    print("10以下")
Python

トレース(a = 12)

  • 独立チェック側
    1. a % 2 == 012 % 2 == 0True → 「偶数」出力
    2. a > 10True → 「10より大きい」出力
      両方 出力される)
  • 排他チェック側
    1. a > 20False
    2. elif a > 10True → 「10超20以下」出力
    3. 以降スキップ(1つだけ出力)

7) 練習問題A〜Dの解答コードのトレース

A:負/ゼロ/正

x = int(input())
if x < 0:
    print("負")
elif x == 0:
    print("ゼロ")
else:
    print("正")
Python
  • 入力 -2<0True → 「負」
  • 入力 0<0False==0True → 「ゼロ」
  • 入力 5<0 False==0 Falseelse → 「正」

B:季節(1–12)

m = int(input("月: "))
if m in (3,4,5):
    print("春")
elif m in (6,7,8):
    print("夏")
elif m in (9,10,11):
    print("秋")
else:
    print("冬")
Python
  • 入力 4in (3,4,5)True → 「春」
  • 入力 8 → 1つ目 False、2つ目 True → 「夏」
  • 入力 12 → 3つとも Falseelse → 「冬」
    (※ 1–12 以外の値にも「冬」と出るので、実用では入力検証を追加すると良いです)

C:時間帯の挨拶

t = int(input("時(0-23): "))
if 6 <= t <= 11:
    print("おはよう")
elif 12 <= t <= 17:
    print("こんにちは")
elif 18 <= t <= 23:
    print("こんばんは")
else:
    print("深夜です")
Python
  • 入力 76 <= 7 <= 11True → 「おはよう」
  • 入力 15 → 1つ目 False、2つ目 True → 「こんにちは」
  • 入力 22 → 最後の範囲が True → 「こんばんは」
  • 入力 3 → どれも Falseelse → 「深夜です」

D:百の位で分類(3桁想定)

n = int(input("3桁の整数: "))
hundreds = n // 100
if hundreds == 1:
    print("100台")
elif hundreds == 2:
    print("200台")
else:
    print("その他")
Python
  • 入力 145hundreds = 1 → 1個目 True → 「100台」
  • 入力 278hundreds = 2 → 2個目 True → 「200台」
  • 入力 999hundreds = 9 → 両方 False → 「その他」

8) 使いこなしのコツ(再確認)

  • 排他にしたいときは if/elif/else全部チェックしたいときは if を並べる。
  • 条件の順番は「狭い(優先度が高い)→広い」。
  • 範囲チェーン(< 18.5, < 25, < 30)は上から順に締めていくと読みやすく安全。
  • 文字列判定系は多言語文字全角の挙動を頭に入れておく。
Python
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました