Python:条件分岐(if / elif / else)
1学習の目的
- if / elif / else で「条件によって処理を変える」プログラムを書けるようになる。ここから初めて“プログラムらしい動き”が作れる。
- インデントがブロックを決めるPython独自のルールを体で覚え、送料判定・会員ランク・入力チェックなど実務の判定ロジックを組み立てられるようになる。
2基礎解説
| やりたいこと | 書き方 | 意味 |
|---|---|---|
| 1つだけ判定 | if 条件: | 条件がTrueのときだけ中を実行 |
| 2つに分ける | if 条件: / else: | どちらか一方だけ必ず実行 |
| 3つ以上に分ける | if / elif / else | 上から順に見て、最初にTrueの1つだけ |
| 1行で書く | A if 条件 else B | 三項演算子。代入とセットで使う |
- 条件の後ろの : と、次の行のインデント(半角スペース4つ)がセット。Pythonは { } を使わず字下げでブロックを表す。
- 字下げがズレると IndentationError。エディタの「スペース4」設定を最初に確認しておく。
- elif は上から順に評価され、最初にTrueになった1つだけ実行される。だから条件は厳しい順に書く。
- 0・0.0・""・[]・None はFalse扱い(falsy)。if name: だけで「空でなければ」を表せる。
- if x == True: とは書かず if x: と書く。範囲判定は if 60 <= score < 80: と連鎖比較で書ける。
現場使用例:送料無料の判定 if total >= 5000:、会員ランクの振り分け if / elif / else、フォームの入力チェック if not name:、APIの応答コード分岐 if status == 200:。
score = 78
if score >= 90:
rank = "S"
elif score >= 75:
rank = "A"
elif score >= 60:
rank = "B"
else:
rank = "C"
print(f"{score}点 → ランク{rank}") # 78点 → ランクA
# 2択なら1行で書ける(三項演算子)
status = "合格" if score >= 60 else "不合格"
print(status)
3基本ドリル(10問)
出力 == 成人です
if 条件: の次の行を半角スペース4つ字下げする。
age = 20
if age >= 18:
print("成人です")
if文の最小形。コロンと字下げは必ずセット。この2つを落とすのが最初のつまずきポイント。
A. NameError B. IndentationError C. TypeError D. エラーにならない 選択★☆☆無料
解答 == B
Pythonは字下げでブロックを判断する。
B
IndentationError は「字下げがおかしい」という意味。Python学習で最も多く出会うエラーのひとつ。
temp = 30
if temp > 25:
print("暑い")
____:
print("暑くない")
出力 == 暑い
「それ以外」を表すキーワード。条件は書かない。
else:
else に条件は書けない(else 条件: はエラー)。「残り全部」を受け止める役割。
出力 == 負の数
n > 0 → 正、n < 0 → 負、残りがゼロ。
n = -5
if n > 0:
print("正の数")
elif n < 0:
print("負の数")
else:
print("ゼロ")
3分岐の基本形。最後の else は「それ以外は必ずゼロ」なので条件を書く必要がない。
A. A B. B C. AとBの両方 D. 何も出ない 選択★☆☆無料
解答 == B
elifは上から順に見て、最初にTrueになった1つだけ。
B
95は最初の「60以上」で止まるのでBが出る。elifは厳しい条件から先に書くのが鉄則。この順番ミスは実務でも起きるバグ。
出力 == 送料:600円
if / else で fee に代入してから print する。
price = 4800
if price >= 5000:
fee = 0
else:
fee = 600
print(f"送料:{fee}円")
「分岐で変数に入れて、最後にまとめて出力する」形はprint重複を避けられて読みやすい。実務コードの定番パターン。
score = 72 result = "合格" ____ score >= 60 ____ "不合格" print(result)
出力 == 合格
三項演算子。「値 if 条件 else 値」の語順。
result = "合格" if score >= 60 else "不合格"
三項演算子は「2択で値を決めるだけ」のときに使う。処理が2行以上になるなら普通のif文にする方が読みやすい。
A. 実行される B. 実行されない C. エラーになる D. 環境による 選択★★☆無料
解答 == B
空文字はTrue/Falseどちら扱いか。
B
空文字・0・空リスト・None は False 扱い(falsy)。だから if not name: だけで「未入力チェック」が書ける。
出力 == 購入可能
and で2つの条件をつなぐ。is_open は既にboolなので == True は不要。
stock = 3
is_open = True
if stock >= 1 and is_open:
print("購入可能")
else:
print("購入不可")
PY03で学んだ論理演算子がそのまま条件に使える。boolの変数はそのまま条件に置くのがPythonらしい書き方。
出力 == 取扱あり
「含まれるか」を調べる演算子がある。
fruit = "みかん"
items = ["りんご", "みかん", "ぶどう"]
if fruit in items:
print("取扱あり")
else:
print("取扱なし")
in 演算子は「A または B または C…」の長い条件をひとまとめにできる。次章以降のリスト操作でも多用する。
4実践シナリオ(5問)
出力 == 年間87,000円 → シルバー会員
厳しい条件(10万以上)から先に書く。金額は :, でカンマ整形。
amount = 87000
if amount >= 100000:
rank = "ゴールド"
elif amount >= 50000:
rank = "シルバー"
else:
rank = "ブロンズ"
print(f"年間{amount:,}円 → {rank}会員")
ランク判定はEC・CRMで必ず出てくる処理。条件の順番を逆にすると全員ブロンズになる典型バグに注意。
出力 == BMI:26.4 → 肥満
身長の2乗は height ** 2。表示は {bmi:.1f}。
height = 1.72
weight = 78
bmi = weight / height ** 2
if bmi >= 25:
judge = "肥満"
elif bmi < 18.5:
judge = "痩せ"
else:
judge = "標準"
print(f"BMI:{bmi:.1f} → {judge}")
「計算 → 判定 → 整形出力」の3ステップ構成。健康アプリや検査データ処理はほぼこの形で書かれている。
出力 == 名前を入力してください
空文字はfalsyなので not user_name で判定できる。文字数は len()。elifでつなぐと1件だけ出る。
user_name = ""
password = "abc123"
if not user_name:
print("名前を入力してください")
elif len(password) < 8:
print("パスワードは8文字以上にしてください")
else:
print("登録できます")
会員登録フォームのチェック処理そのもの。elif でつなぐと「最初のエラーだけ表示」、if を並べると「全エラー表示」になる。仕様に応じて使い分ける。
出力 == 支払額:10,800円
「会員割引」「クーポン」「マイナス補正」は互いに独立した条件。elif ではなく if を3つ並べて上から順に価格を更新していく。
price = 12000
is_member = True
coupon = False
if is_member:
price = int(price * 0.9)
if coupon:
price = price - 500
if price < 0:
price = 0
print(f"支払額:{price:,}円")
elif と if の並列は意味が違うという最重要ポイント。「どれか1つ」なら elif、「全部それぞれ適用」なら if を並べる。ここを取り違えると割引が1つしか効かないバグになる。
ルール:4で割り切れる年はうるう年。ただし100で割り切れる年は平年。ただし400で割り切れる年はうるう年。 コーディング★★★無料
出力 == 2100年:平年
「例外の例外」があるので、400 → 100 → 4 の順に判定する。
year = 2100
if year % 400 == 0:
leap = True
elif year % 100 == 0:
leap = False
elif year % 4 == 0:
leap = True
else:
leap = False
print(f"{year}年:{'うるう年' if leap else '平年'}")
条件の順番がすべてを決める教科書的な問題。4から先に書くと2100年が誤判定される。実際にこのバグを埋め込んだシステム障害は何度も起きている。
5仕上げ課題
weight = 4.2(kg)/size = 95(3辺合計cm)/area = "関西"/is_member = True
料金ルール:
① サイズ100cm以下 かつ 重量5kg以下 → 基本900円・区分「通常サイズ」。それ以外 → 基本1400円・区分「大型サイズ」
② 地域加算:関東 +0円/関西 +200円/その他 +500円
③ 会員なら最後に合計から10%引き(整数に切り捨て)
出力仕様(3行):
=== 配送料金 ===
区分:通常サイズ(95cm / 4.2kg)
請求額:990円(関西 / 会員割引あり)
出力3行が完全一致
①②③は独立した判定なので、if群を3つに分けて上から順に計算する。基本料金 → 地域加算 → 会員割引の順。最後の「会員割引あり/なし」は三項演算子で埋め込める。
weight = 4.2
size = 95
area = "関西"
is_member = True
# ① サイズ区分と基本料金
if size <= 100 and weight <= 5:
base = 900
kind = "通常サイズ"
else:
base = 1400
kind = "大型サイズ"
# ② 地域加算
if area == "関東":
extra = 0
elif area == "関西":
extra = 200
else:
extra = 500
# ③ 会員割引
total = base + extra
if is_member:
total = int(total * 0.9)
print("=== 配送料金 ===")
print(f"区分:{kind}({size}cm / {weight}kg)")
print(f"請求額:{total:,}円({area} / {'会員割引あり' if is_member else '会員割引なし'})")
実務の料金計算はほぼこの構造で書かれている。条件の塊ごとにif群を分け、変数を上から積み上げる——この設計ができていれば、後から「離島は+800円」「学割を追加」といった仕様変更が来ても壊れずに拡張できる。ここまで書けたら条件分岐は合格。