条件分岐
前回のレッスンでは、ブール論理を使って真/偽の判断を行う方法を学びました。今回は条件分岐を学びます——条件に応じてプログラムが異なるコードを実行するようにします。これはあらゆるプログラミング言語において最も基本的な制御構造の 1 つです。
1. if 文:単純な条件
if の書式は簡単です:
if condition:
code to execute when condition is True
コロン : とインデント(通常 4 スペース)に注意してください——インデントはどのコードが if に属するかを Python に伝えます。
age = 18
if age >= 18:
print("You are an adult!")
print("This is also inside the if block.")
print("This is outside the if and always executes.")
出力:
You are an adult!
This is also inside the if block.
This is outside the if and always executes.
{} を使います)。同じ if ブロック内のコードは同じインデントを持つ必要があります。C や Java に慣れていると戸惑うかもしれませんが、Python はコードをきれいに書くことを強制します。
例:合格/不合格の確認(難易度 ⭐)
score = 75
if score >= 60:
print("Congratulations, you passed!")
print(f"Your score is {score}.")
print("Score recorded.")
出力:
Congratulations, you passed!
Your score is 75.
Score recorded.
2. if-else:2 つの選択肢
条件が真のときは A を、偽のときは B を実行します:
if condition:
execute when True
else:
execute when False
score = 45
if score >= 60:
print("Passed!")
else:
print("Failed, need to retake.")
出力:
Failed, need to retake.
if と else のインデント
password = "123456"
if password == "123456":
print("Password correct, welcome back!")
else:
print("Wrong password, try again.")
print("If you forgot your password, click 'Forgot Password'.")
else にもコロン : が必要です。else は対応する if と同じインデントレベルに揃える必要があります。
3. if-elif-else:複数の選択肢
実際のシナリオでは、2 つ以上の可能性があることがよくあります。elif(else if の短縮形)を使って複数の分岐を処理します:
if condition1:
execute when condition1 is True
elif condition2:
execute when condition2 is True
elif condition3:
execute when condition3 is True
else:
execute when none of the above are True
Python は上から下へチェックします——最初に真になった条件が実行され、その後 if-elif-else 構造全体を終了します。
score = 85
if score >= 90:
print("Excellent!")
elif score >= 80:
print("Good!")
elif score >= 70:
print("Average.")
elif score >= 60:
print("Pass.")
else:
print("Failed, need to retake.")
# 出力:Good!
if score >= 60: を置くと、85 点は「合格」の分岐に入り、「良い」や「優秀」には到達しません。厳しい条件を先に置きましょう。
例:レストランの注文システム(難易度 ⭐⭐)
print("=== Today's Meals ===")
print("1. Braised Beef Noodles $10")
print("2. Shredded Pork Rice $8")
print("3. Tomato Egg Rice $6")
print("4. Egg Fried Rice $4")
choice = 3
if choice == 1:
print("You ordered Braised Beef Noodles, $10.")
elif choice == 2:
print("You ordered Shredded Pork Rice, $8.")
elif choice == 3:
print("You ordered Tomato Egg Rice, $6.")
elif choice == 4:
print("You ordered Egg Fried Rice, $4.")
else:
print("Sorry, invalid option.")
print("Enjoy your meal!")
出力:
=== Today's Meals ===
1. Braised Beef Noodles $10
2. Shredded Pork Rice $8
3. Tomato Egg Rice $6
4. Egg Fried Rice $4
You ordered Tomato Egg Rice, $6.
Enjoy your meal!
4. ネストした条件
条件の中に別の条件を含めることができます。これをネストと呼びます。
age = 20
has_ticket = True
if age >= 18:
print("Adult, can enter.")
if has_ticket:
print("Has ticket, please proceed.")
else:
print("Please buy a ticket first.")
else:
print("Minor, entry denied.")
出力:
Adult, can enter.
Has ticket, please proceed.
ネストを深くしすぎない
ネスト自体は間違いではありませんが、3 レベル以上深くなるとコードが読みにくくなります:
# ❌ 推奨しない:ネストが多すぎる
user_input = "y"
is_admin = True
has_permission = True
if user_input == "y":
if is_admin:
if has_permission:
print("Operation successful!")
else:
print("No permission.")
else:
print("Not an admin.")
else:
print("Operation canceled.")
論理演算子を使ってフラット化します:
# ✅ 推奨:and を使ってネストを減らす
user_input = "y"
is_admin = True
has_permission = True
if user_input != "y":
print("Operation canceled.")
elif is_admin and has_permission:
print("Operation successful!")
else:
print("Insufficient permissions.")
and/or で条件を結合するか、深いロジックを関数に抽出することを検討してください。良いコードは「深く」なく「フラット」です。
例:配送料計算機(難易度 ⭐⭐)
# 地域、重量、会員レベルに基づいて配送料を計算
region = "domestic" # "domestic" または "international"
weight = 3.5 # kg
is_vip = False
if region == "domestic":
if weight <= 1:
shipping = 10
elif weight <= 5:
shipping = 15
else:
shipping = 20
else:
if weight <= 1:
shipping = 50
elif weight <= 5:
shipping = 80
else:
shipping = 120
# VIP は 20% オフ
if is_vip:
shipping *= 0.8
print(f"Region: {region}")
print(f"Weight: {weight}kg")
print(f"Shipping: ${shipping:.0f}")
出力:
Region: domestic
Weight: 3.5kg
Shipping: $15
5. 三項演算子(条件式)
Python には1 行の if-else 構文があります。これを三項演算子と呼びます:
# 通常の方法
age = 20
if age >= 18:
status = "adult"
else:
status = "minor"
# 三項演算子(1 行)
status = "adult" if age >= 18 else "minor"
print(status) # adult
構造:
value1 if condition else value2
条件が真なら value1、偽なら value2 を採用します。
実用的な使い方
# スコアに基づいて結果を出力
score = 88
result = "passed" if score >= 60 else "failed"
print(f"Exam result: {result}") # Exam result: passed
# デフォルト値の参照
name = input("Enter your name: ") or "Guest"
greeting = f"Hello, {name}" if name else "Hello, Guest"
print(greeting)
elif が必要)や分岐が長い場合は、通常の if-elif-else を使いましょう。簡潔さ ≠ 可読性です。
6. pass:何もしない
構文上コードが必要だが、まだ何を書くか決めていない場合のプレースホルダとして pass を使います:
if age >= 18:
pass # TODO: 後で成人向けロジックを追加
else:
print("Minor, cannot register.")
pass は「ここでは何もせず、先に進む」という意味です。主に以下の目的で使われます:
- プレースホルダ:最初に構造だけ作って、後で詳細を記述
- 空の関数:
def my_function(): pass - 空のクラス:
class MyClass: pass
# 実際の使用例
if user_age >= 18:
register_user() # 登録を続行
else:
pass # 未成年者向けの特別な処理はまだなし
pass と一緒に # TODO コメントを書きましょう。VS Code はすべての TODO 項目を収集して、後で簡単に参照できます。
よくあるユースケース
- フォーム検証:入力が空でないか、形式が正しいか、長さが要件を満たしているかを確認
- 権限レベル:一般ユーザーは UI A、VIP ユーザーは UI B、管理者は UI C を表示
- ゲームの状態管理:ゲームオーバーかどうか、レベルクリアかどうか、実績獲得かどうかを確認
- 価格計算:割引、会員特典、季節のプロモーション——条件の組み合わせに応じて異なる最終価格
- メニューナビゲーション:ユーザーがコンソールで 1/2/3/4 を入力し、プログラムが異なる機能モジュールに入る
❓ よくある質問
elif と if の違いは何ですか?なぜすべて if を使わないのですか?elif は前の条件が満たされなかった場合にのみチェックされるのに対し、独立した if 文は常にチェックされることです。85 点に対して 3 つの独立した if 文を使うと、「優秀」「良い」「平均」がすべて実行されます。if-elif-elif では、最初に一致した「良い」の分岐だけが実行されます。「1 つを選択」する場合は elif を、「それぞれを独立してチェック」する場合は複数の if を使います。if condition: の後に VS Code が自動的に 4 スペースインデントするのはなぜですか?
A:Python はコロンの後にインデントを必要とします。VS Code の Python 拡張機能が自動的に処理します。インデントを忘れると、Python は IndentationError: expected an indented block を発生させます。Python のインデントは「スタイルの提案」ではなく、構文です。間違ったインデントはコードが実行されないことを意味します。
elif を使えますか?value1 if condition else value2)。複数の選択肢が必要な場合は、三項演算子をネストできます:a if cond1 else b if cond2 else c。しかしこれは強く推奨されません——ネストした三項演算子はほとんど読めません。複数の分岐には通常の if-elif-else を使ってください。pass と return の違いは何ですか?pass は「何もせず、実行を続ける」という意味です。return は「現在の関数を即座に終了し、値を返す」という意味です(後で説明します)。if ブロック内で pass を使うとそのブロックをスキップして続行します。関数内で return を使うと関数を即座に終了します。これらはまったく異なる概念です。📖 まとめ
ifの後に条件を記述。真ならインデントされたブロックが実行されるelseは偽の場合を処理。単独では使えないelifは複数の分岐を処理。上から下へチェックされ、最初に真になったものが実行される- ネストした条件は複雑な階層を処理するが、ネストは 3 レベル以内に抑える
- 三項演算子
x if condition else yはシンプルな 1 行の選択に passは構文上コードが必要だがまだ何も書くことがない場合のプレースホルダ- 良い習慣:厳しい条件を先に、ネストは 3 レベル以内、可能なら
and/orでフラット化
📝 練習問題
-
基本(難易度 ⭐):数値が奇数か偶数かをチェックするプログラムを書いてください。整数を入力し、「odd」または「even」を出力します。ヒント:
n % 2 == 0は偶数を意味します。 -
中級(難易度 ⭐⭐):BMI 健康評価プログラムを書いてください。体重(kg)と身長(m)を入力し、BMI を計算して出力します:
- BMI < 18.5 → 「Underweight」
- 18.5 ≤ BMI < 24 → 「Normal」
- 24 ≤ BMI < 28 → 「Overweight」
- BMI ≥ 28 → 「Obese」
-
挑戦(難易度 ⭐⭐⭐):簡単な電卓を書いてください。プログラムは 3 つの入力を受け付けます:最初の数値、演算子(
+-*/)、2 番目の数値。演算を実行し、結果を出力します。以下の処理を追加:- ゼロによる除算:「Cannot divide by zero」と出力
- 無効な演算子:「Invalid operator」と出力
- 通常の場合:計算結果を出力



