ここでは、前回のすべての例について、実際にどの行が評価され、何が起きるかを「トレース(逐次実行の説明)」として示します。各例で代表的な入力ケースを複数用意し、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)
x = -3を代入if x < 0:→-3 < 0はTrue→ このブロックを実行print("負の数")が実行- 以降の
elif・elseは評価しない(ここで終了)
トレース例B(x = 0)
x = 0if x < 0:→0 < 0はFalse→ 次へelif x == 0:→0 == 0はTrue→ このブロックを実行print("ゼロ")実行- 以降は評価しない(終了)
トレース例C(x = 7)
x = 7if x < 0:→Falseelif x == 0:→Falseelif x < 10:→7 < 10はTrue→ このブロックを実行print("0より大きく10未満")実行 → 終了
トレース例D(x = 12)
x = 12if x < 0:→Falseelif x == 0:→Falseelif x < 10:→12 < 10はFalseelse:に到達 → このブロックを実行print("10以上")実行 → 終了
2) 例題1 — 正/負/ゼロ
対象コード:
x = int(input("整数を入力してください: "))
if x > 0:
print("正の数です")
elif x == 0:
print("ゼロです")
else:
print("負の数です")
Pythonトレース例(入力: 10)
- ユーザー入力
"10"→int("10")でx = 10 if x > 0:→10 > 0はTrue→ 実行print("正の数です")→ 終了
トレース例(入力: 0)
x = 0if x > 0:→Falseelif x == 0:→True→ 実行print("ゼロです")→ 終了
トレース例(入力: -5)
x = -5if x > 0:→Falseelif x == 0:→Falseelse:→ 実行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)
score = 95score >= 90→True→ A を代入- 以降の
elifはスキップ print→評定: A
トレース例(入力: 83)
score = 83score >= 90→Falsescore >= 80→True→ B- 残りスキップ →
評定: B
トレース例(入力: 74)
score = 74>=90→False>=80→False>=70→True→ C →評定: C
トレース例(入力: 61)
score = 61>=90→ F>=80→ F>=70→ F>=60→ T → D →評定: D
トレース例(入力: 40)
score = 40- すべての
elifがFalse→else実行 → F →評定: F
ポイント:高い基準から順に書くから誤判定を防げる。
4) 例題3 — 文字列の種類(isdecimal / isalpha)
対象コード:
s = input("文字列を入力: ")
if s.isdecimal():
print("数字だけです")
elif s.isalpha():
print("アルファベット(または文字)だけです")
else:
print("混合か記号などです")
Pythonトレース例1(入力: "123")
s = "123"s.isdecimal()→True→ **「数字だけ」**を出力 → 終了
トレース例2(入力: "abc")
s = "abc"isdecimal()→Falseisalpha()→True→ **「文字だけ」**を出力 → 終了
トレース例3(入力: "あいう")
s = "あいう"isdecimal()→Falseisalpha()→ 多言語文字でも True → 「文字だけ」 → 終了
トレース例4(入力: "abc123")
s = "abc123"isdecimal()→Falseisalpha()→Falseelse→ 「混合か記号など」
トレース例5(入力: "123" ※全角)
s = "123"isdecimal()→ True(全角数字も数字扱い)- 「数字だけ」 → 終了
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)
h = 170.0,w = 65.0を取得calc_bmi(170.0, 65.0)呼び出しh = 170.0 / 100 = 1.7return 65.0 / (1.7 * 1.7) = 65.0 / 2.89 ≒ 22.491…
bmi ≒ 22.491bmi_category(22.491)bmi < 18.5→Falsebmi < 25→True→ “普通体重” を返す
print(f"BMI: {bmi:.1f} → {カテゴリ}")→BMI: 22.5 → 普通体重
トレース例2(入力が不正:身長に "abc")
h = float("abc")の変換でValueError発生except ValueError:に飛ぶ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)
- 独立チェック側
a % 2 == 0→12 % 2 == 0はTrue→ 「偶数」出力a > 10→True→ 「10より大きい」出力
(両方 出力される)
- 排他チェック側
a > 20→Falseelif a > 10→True→ 「10超20以下」出力- 以降スキップ(1つだけ出力)
7) 練習問題A〜Dの解答コードのトレース
A:負/ゼロ/正
x = int(input())
if x < 0:
print("負")
elif x == 0:
print("ゼロ")
else:
print("正")
Python- 入力
-2→<0がTrue→ 「負」 - 入力
0→<0はFalse、==0がTrue→ 「ゼロ」 - 入力
5→<0False、==0False→else→ 「正」
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- 入力
4→in (3,4,5)はTrue→ 「春」 - 入力
8→ 1つ目False、2つ目True→ 「夏」 - 入力
12→ 3つともFalse→else→ 「冬」
(※ 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- 入力
7→6 <= 7 <= 11→True→ 「おはよう」 - 入力
15→ 1つ目False、2つ目True→ 「こんにちは」 - 入力
22→ 最後の範囲がTrue→ 「こんばんは」 - 入力
3→ どれもFalse→else→ 「深夜です」
D:百の位で分類(3桁想定)
n = int(input("3桁の整数: "))
hundreds = n // 100
if hundreds == 1:
print("100台")
elif hundreds == 2:
print("200台")
else:
print("その他")
Python- 入力
145→hundreds = 1→ 1個目True→ 「100台」 - 入力
278→hundreds = 2→ 2個目True→ 「200台」 - 入力
999→hundreds = 9→ 両方False→ 「その他」
8) 使いこなしのコツ(再確認)
- 排他にしたいときは
if/elif/else。全部チェックしたいときはifを並べる。 - 条件の順番は「狭い(優先度が高い)→広い」。
- 範囲チェーン(
< 18.5,< 25,< 30)は上から順に締めていくと読みやすく安全。 - 文字列判定系は多言語文字や全角の挙動を頭に入れておく。
