ifの中にifを入れる「ネスト構造」実践アプリ
ここでは、if文の「中にifを入れる」= ネスト構造(入れ子構造)を使った、
実践的な 発展練習アプリ10問 を紹介します。
各問題には:
✅ 問題文
✅ 解答例コード
✅ ステップごとの詳細解説
をセットにしています。
✅ Q1:ログイン認証+アクセス権チェック
問題
- ユーザー名
"admin"とパスワード"1234"の組み合わせでログイン成功。 - 成功した場合のみ、
"管理者権限を表示しますか?(yes/no)"を聞く。 "yes"と答えたら「管理者権限:ON」と表示。
💡 解答例
user = input("ユーザー名: ")
pwd = input("パスワード: ")
if user == "admin" and pwd == "1234":
print("ログイン成功")
ans = input("管理者権限を表示しますか?(yes/no): ")
if ans == "yes":
print("管理者権限:ON")
else:
print("権限表示をスキップしました")
else:
print("認証失敗")
Python🪜 ステップ解説
if→ ログイン成功条件をチェック。- 成功した場合のみ「内側のif」に進む。
- ネスト構造により、「ログイン後のみの動作」を安全に限定できる。
✅ Q2:点数+欠席数による合否判定
問題
- 点数が60以上 → 合格候補
→ ただし欠席回数が3回以上なら「欠席による不合格」。 - 点数が60未満 → 「点数不足による不合格」
💡 解答例
score = int(input("点数: "))
absent = int(input("欠席回数: "))
if score >= 60:
if absent >= 3:
print("欠席による不合格")
else:
print("合格")
else:
print("点数不足による不合格")
Python🪜 ステップ解説
- 外側のifで「合格圏内」かどうかを判断。
- その内側で「欠席」による特別条件を判定。
- 条件を階層化することで、読みやすく整理できる。
✅ Q3:年齢と会員ランクによる料金判定
問題
- 年齢が18歳未満 → 学生料金
→ 会員なら「500円」/非会員なら「800円」 - 18歳以上 → 一般料金
→ 会員なら「1000円」/非会員なら「1500円」
💡 解答例
age = int(input("年齢: "))
member = input("会員ですか?(yes/no): ")
if age < 18:
if member == "yes":
print("料金:500円")
else:
print("料金:800円")
else:
if member == "yes":
print("料金:1000円")
else:
print("料金:1500円")
Python🪜 ステップ解説
- 外側のifで「学生/一般」を分類。
- 内側のifで「会員/非会員」を再分岐。
- 「二段階判定」がわかりやすくなる構造。
✅ Q4:ネットショッピング送料計算
問題
- 購入額が5000円以上 → 送料無料
- 5000円未満 →
→ 会員なら「200円」
→ 非会員なら「500円」
💡 解答例
price = int(input("購入金額: "))
member = input("会員ですか?(yes/no): ")
if price >= 5000:
print("送料無料です")
else:
if member == "yes":
print("送料200円です")
else:
print("送料500円です")
Python🪜 ステップ解説
- 外側のifで「送料無料条件」を先に判定。
- それ以外の場合のみ、内側の条件で送料を分岐。
- ネストを使うとロジックを「上から下へ自然に」読める。
✅ Q5:学生証チェック+試験参加
問題
- 「学生証がありますか?」 → yes の場合のみ次へ。
→ 「受験票がありますか?」 → yes → 「試験参加可能」
→ no → 「受験票を忘れています」 - 学生証がない場合 → 「受験できません」
💡 解答例
id_card = input("学生証がありますか?(yes/no): ")
if id_card == "yes":
ticket = input("受験票がありますか?(yes/no): ")
if ticket == "yes":
print("試験に参加できます")
else:
print("受験票を忘れています")
else:
print("学生証がないため受験できません")
Python🪜 ステップ解説
- 最初に学生証チェック。
- その中で受験票の有無を再確認。
- ネスト構造で「順序付きチェック」ができる。
✅ Q6:銀行ATM引き出し判定
問題
- 残高が足りない → 「残高不足」
- 残高が足りる場合:
→ 引き出し金額が10万円以上 → 「本人確認が必要」
→ それ以外 → 「引き出し成功」
💡 解答例
balance = int(input("残高: "))
withdraw = int(input("引き出し金額: "))
if balance < withdraw:
print("残高不足です")
else:
if withdraw >= 100000:
print("本人確認が必要です")
else:
print("引き出し成功")
Python🪜 ステップ解説
- 外側で「残高の有無」を判定。
- 内側で「金額制限」をチェック。
- このような二重条件は実務でも頻出。
✅ Q7:オンライン試験の参加条件
問題
- ネット接続が
"ok"かつ カメラが"ok"→ 「受験可能」
→ ただし音声が"no"の場合 → 「音声なしで受験」 - 接続 or カメラのいずれかが
"no"→ 「受験不可」
💡 解答例
net = input("ネット接続は良好ですか?(ok/no): ")
cam = input("カメラは動作していますか?(ok/no): ")
mic = input("マイクは動作していますか?(ok/no): ")
if net == "ok" and cam == "ok":
if mic == "ok":
print("受験可能です")
else:
print("音声なしで受験可能です")
else:
print("受験不可です")
Python🪜 ステップ解説
- 外側で「基本条件(ネット・カメラ)」を確認。
- 内側で「追加条件(マイク)」をチェック。
- 条件を2段構成に分けると分かりやすい。
✅ Q8:配送エリア+天候による遅延案内
問題
- エリア
"関東"→
→ 天気"雨"→ 「1日遅延」
→ それ以外 → 「通常配送」 - エリア
"関東"以外 → 「2〜3日かかります」
💡 解答例
area = input("配送エリア(関東/その他): ")
weather = input("天気(晴れ/雨): ")
if area == "関東":
if weather == "雨":
print("1日遅延します")
else:
print("通常配送です")
else:
print("2〜3日かかります")
Python🪜 ステップ解説
- 外側で地域条件を確認。
- 内側で天気による影響を分岐。
- 組み合わせを明確に整理できる。
✅ Q9:試験合格+特典条件
問題
- 平均点が80以上 → 合格
→ さらに全科目90以上 → 「特待生合格」 - 平均点が80未満 → 「不合格」
💡 解答例
math = int(input("数学: "))
eng = int(input("英語: "))
sci = int(input("理科: "))
avg = (math + eng + sci) / 3
if avg >= 80:
if math >= 90 and eng >= 90 and sci >= 90:
print("特待生合格!")
else:
print("合格")
else:
print("不合格")
Python🪜 ステップ解説
- 外側で「合格基準(平均80)」を判定。
- その中で「全科目90以上」かを再チェック。
- 条件の優先順位をネストで表現。
✅ Q10:チケット予約システム
問題
- 公演日が
"平日"→
→ 座席が"A"→ 「料金:3000円」
→ 座席が"B"→ 「料金:2000円」 - 公演日が
"土日"→
→ 座席"A"→ 「料金:4000円」
→ 座席"B"→ 「料金:3000円」
💡 解答例
day = input("公演日は平日 or 土日?: ")
seat = input("座席ランク(A/B): ")
if day == "平日":
if seat == "A":
print("料金:3000円")
else:
print("料金:2000円")
else:
if seat == "A":
print("料金:4000円")
else:
print("料金:3000円")
Python🪜 ステップ解説
- 外側の条件=日程。
- 内側の条件=座席ランク。
- 条件の組み合わせを整理する典型的なネスト構造。
この10問で学べるポイント
| 学習内容 | 説明 |
|---|---|
| ネスト構造 | ifの中でさらにifを使う |
| 段階的条件 | 1つの条件を通過した場合のみ次の条件へ進む |
| 実務応用 | ログイン・購入・判定・料金計算など現実的処理 |
| 条件整理力 | 「上位→下位」の優先関係を正しく設計する力 |
