メインコンテンツへスキップ
Lesson4 / 6

ネストした条件分岐

目次

1. このレッスンで学ぶこと

  • ネスト(入れ子)とは何か
  • if文の中にif文を書く方法
  • 複雑な条件判定の実装
  • ネストを避けるテクニック

2. ネストした条件分岐とは

**ネスト(入れ子)**とは、if文のブロック内にさらに別のif文を書く構造のことです。「もし〜ならば、さらにもし〜ならば」という段階的な条件判定を実現します。

ネストの基本構造

Python
if 外側の条件:
    if 内側の条件:
        処理A  # 両方の条件が真
    else:
        処理B  # 外側が真、内側が偽
else:
    処理C  # 外側が偽

ネストの構成要素

要素説明インデント
外側のif文最初の条件チェックスペース4つ
内側のif文2番目の条件チェックスペース8つ
処理実行される命令スペース8つ以上

ネストの特徴

  • if文の中にさらにif文を書ける
  • インデントのレベルで階層を表現
  • 複数の条件を段階的にチェック
  • 3階層以上は避けるべき(読みにくい)

簡単な例

Python
# 年齢と免許の両方をチェック
age = 20
has_license = True

if age >= 18:
    # 外側の条件が真の場合、内側をチェック
    if has_license:
        print("運転できます")  # 両方真
    else:
        print("免許が必要です")  # 年齢のみ真
else:
    print("年齢が足りません")  # 外側が偽

3. なぜネストした条件分岐が必要なのか?

複数の条件を組み合わせて判定したい場合、if文の中にさらにif文を書く必要があります。

Python
age = 25
has_license = True

# 年齢と免許の両方をチェック
if age >= 18:
    if has_license:
        print("運転できます")
    else:
        print("免許が必要です")
else:
    print("年齢が足りません")

**ネスト(入れ子)**を使うことで、段階的な条件判定ができます。

💡 豆知識: ネスト(nest)は「巣」を意味します。鳥の巣のように、構造の中に別の構造が入っている状態を表す言葉です。プログラミングではよく使われる概念です。


4. ネストの基本

基本的な書き方

機能: if文のブロック内にさらにif文を書き、段階的に条件を絞り込みます。

Python
if 外側の条件:
    if 内側の条件1:
        処理A
    else:
        処理B
else:
    処理C

書き方のルール:

  1. 外側のif文の処理ブロック内に内側のif文を書く
  2. 内側のif文はさらにインデントする(スペース8つ)
  3. インデントのレベルで階層を表現

用途: 複雑な条件判定、段階的なチェック、権限管理


5. 具体例

例1: 年齢と免許のチェック

Python
age = 25
has_license = True

if age >= 18:
    print("年齢条件クリア")
    if has_license:
        print("運転できます")
    else:
        print("免許を取得してください")
else:
    print(f"あと{18 - age}年待ってください")

# 実行結果:
# 年齢条件クリア
# 運転できます

例2: ログインチェック

Python
username = "admin"
password = "pass123"

correct_username = "admin"
correct_password = "secret123"

if username == correct_username:
    print("ユーザー名OK")
    if password == correct_password:
        print("ログイン成功")
    else:
        print("パスワードが違います")
else:
    print("ユーザー名が存在しません")

# 実行結果:
# ユーザー名OK
# パスワードが違います

例3: 成績と出席率の判定

Python
score = 75
attendance = 0.85

if score >= 60:
    print("点数合格")
    if attendance >= 0.8:
        print("総合合格")
    else:
        print("出席率不足")
else:
    print("点数不足")

# 実行結果:
# 点数合格
# 総合合格

6. ネストを避けるテクニック

論理演算子を使う

Python
# ネストあり
age = 25
has_license = True

if age >= 18:
    if has_license:
        print("運転できます")

# ネストなし(and を使う)
if age >= 18 and has_license:
    print("運転できます")

早期リターン(関数で)

Python
# ネストあり
def check_access(age, is_member):
    if age >= 18:
        if is_member:
            return "アクセス許可"
        else:
            return "会員登録が必要"
    else:
        return "年齢制限"

# ネストなし(早期リターン)
def check_access(age, is_member):
    if age < 18:
        return "年齢制限"
    if not is_member:
        return "会員登録が必要"
    return "アクセス許可"

7. 練習問題

問題1(基礎)⭐☆☆

年齢が18歳以上で、かつ点数が60点以上なら「合格」と表示してください。ネストを使って実装してください。

💡 ヒント

外側で年齢、内側で点数をチェックします。

✅ 解答例
Python
age = 20
score = 75

if age >= 18:
    if score >= 60:
        print("合格")
    else:
        print("点数不足")
else:
    print("年齢不足")

実行結果:

合格

解説: 外側のif文で年齢をチェックし、内側のif文で点数をチェックします。


問題2(基礎)⭐☆☆

ユーザー名が"admin"で、かつパスワードが"1234"なら「ログイン成功」、それ以外は適切なエラーメッセージを表示してください。

💡 ヒント

まずユーザー名、次にパスワードをチェックします。

✅ 解答例
Python
username = "admin"
password = "1234"

if username == "admin":
    if password == "1234":
        print("ログイン成功")
    else:
        print("パスワードが違います")
else:
    print("ユーザー名が違います")

実行結果:

ログイン成功

解説: 段階的にチェックすることで、具体的なエラーメッセージを表示できます。


問題3(応用)⭐⭐☆

年齢と会員ステータスに応じて料金を決定してください:

  • 18歳未満: 子供料金500円
  • 18歳以上:
    • 会員: 800円
    • 非会員: 1200円
💡 ヒント

年齢で分岐し、18歳以上の場合はさらに会員かどうかで分岐します。

✅ 解答例
Python
age = 25
is_member = True

if age < 18:
    price = 500
    print("子供料金")
else:
    if is_member:
        price = 800
        print("会員料金")
    else:
        price = 1200
        print("通常料金")

print(f"料金: {price}円")

実行結果:

会員料金
料金: 800円

解説: 年齢で大きく分岐し、大人の場合はさらに会員ステータスで分岐します。


8. まとめ

このレッスンでは、ネストしたif文で条件を段階的に判定する方法を学びました。

  • if文の中にif文を書くことで、条件を細かく絞り込めます。
  • 外側条件と内側条件を分けることで、判定ロジックを整理できます。
  • ネストが深くなるほど可読性が下がるため、構造を意識して書く必要があります。
  • 条件の意味を明確にして、必要最小限のネストにすることが重要です。
  • 実行経路を追って確認すると、分岐ミスを早く見つけられます。