ネストされた if(入れ子の if)は、ある条件の中でさらに別の条件をチェックしたいときに使います。イメージは「まず入口のドアを通る → 中の部屋で別の扉を調べる」といった感じ。順序・インデント(字下げ)が大切です。
1行でまとめると
「ある条件を満たしたときだけ、さらに細かい条件を調べる」ための構造です。
基本構文(超シンプル)
if 条件A:
# 条件Aが True のときだけここに入る
if 条件B:
# 条件Aかつ条件B のとき
else:
# 条件Aは True だけど条件B は False のとき
else:
# 条件A が False のとき
Pythonポイント:内側の if は外側の if が True のときにしか評価されない。
例1:年齢と会員判定(基本)
age = int(input("年齢を入力: "))
is_member = input("会員ですか? (y/n): ") == "y"
if age >= 18:
# 大人のみ会員判定
if is_member:
print("成人会員です")
else:
print("成人・非会員です")
else:
print("未成年です(会員判定は不要)")
Python逐次実行(入力例:age=20, is_member=y)
age >= 18を評価 → True → 内側へif is_memberを評価 → True → 「成人会員です」出力 → 終了
(age < 18なら内側はそもそも評価されない)
例2:成績+出席で合格判定(現実的な使用例)
score = int(input("点数: "))
attendance = float(input("出席率(%) : "))
if score >= 60:
# 点数合格ラインを満たしている場合だけ出席率も確認
if attendance >= 75:
print("合格")
else:
print("不合格(出席不足)")
else:
print("不合格(点数不足)")
Pythonこの場面でネストが有効なのは、「点数が十分でないなら出席率は調べなくてよい」というビジネスルールがあるから。
例3:多段ネスト(深くなりすぎる例)
if A:
if B:
if C:
print("A B C がすべて真")
else:
print("A と B は真だが C は偽")
else:
print("A は真だが B は偽")
else:
print("A は偽")
Python注意:深いネスト(3〜4層以上)は読みづらく、バグを呼びやすいです。後述の「ネストを浅くするテクニック」を使いましょう。
ネストするときの よくあるミス
- インデント(スペース)の数を揃えず
IndentationErrorにする。Python はインデントが構文の一部。 - 内側の条件を外側の条件と独立にチェックしたいのに、誤ってネストしてしまい期待した結果にならない(=排他/独立の混同)。
- 深くネストしすぎてロジックが追えなくなる。
ネストを浅くする(可読性向上テクニック)
- 早期リターン(ガード節) — 関数内で使うと有効:
def check_user(age, is_member):
if age < 18:
return "未成年です"
# ここから age >= 18 が保証される
if is_member:
return "成人会員です"
return "成人・非会員です"
Python- 論理演算子でまとめる(複雑になりすぎない程度で):
if age >= 18 and is_member:
print("成人会員です")
elif age >= 18 and not is_member:
print("成人・非会員です")
else:
print("未成年です")
Python- 関数に分ける — 役割ごとに切ると読みやすい:
def is_adult(age): return age >= 18
def membership_text(is_member): return "会員" if is_member else "非会員"
if is_adult(age):
print("成人:" + membership_text(is_member))
else:
print("未成年")
Python- 辞書でルール化(特定の値の組み合わせに対応する場合):
actions = {
(True, True): "成人会員",
(True, False): "成人非会員",
(False, None): "未成年"
}
key = (age >= 18, is_member if age >= 18 else None)
print(actions.get(key, "不明"))
Python練習問題(自分で書いて試してみよう)
- 入力された数が正か負かを判定し、正ならさらに偶数/奇数を判定して表示するプログラムを書け。
- ログイン処理:ユーザー名とパスワードを入力。ユーザー名が存在するかを先に調べ、存在するならパスワードをチェックして「ログイン成功/失敗」を出す(存在しなければ「ユーザー無し」)。
- 例題を関数にして、早期リターンでネストを浅く書き直してみる(上のログイン処理など)。
練習問題の解答(模範)
n = int(input("整数: "))
if n > 0:
if n % 2 == 0:
print("正の偶数")
else:
print("正の奇数")
elif n == 0:
print("ゼロ")
else:
print("負の数")
Pythonusers = {"alice":"pass123", "bob":"qwerty"} # ユーザー名:パスワード
username = input("ユーザー名: ")
password = input("パスワード: ")
if username in users:
if users[username] == password:
print("ログイン成功")
else:
print("パスワードが違います")
else:
print("ユーザーが存在しません")
Python3.(早期リターンで書き直す)
def login(username, password, users):
if username not in users:
return "ユーザーが存在しません"
if users[username] != password:
return "パスワードが違います"
return "ログイン成功"
print(login(input("ユーザー名: "), input("パスワード: "), users))
Pythonまとめ(初心者がまず覚えること)
- ネストは「条件の中でさらに条件をチェック」するときに便利。
- インデントを正しく!(Pythonでは必須)
- 深くなりすぎたら
return、関数分割、論理演算子、辞書等で浅く書き換えると可読性が上がる。 - ネストを使う前に「本当にネストが必要か?」を一度考える習慣をつけよう。
