ここでは、「ネスト(入れ子)を平坦化して読みやすく書き直す練習」に特化した10問セットを用意しました。
各問題は
- Step1:ネストされた悪い例(Before)
- Step2:課題(どう平坦化すべきか)
- Step3:模範解答(After)
で構成されています。
初心者が「なぜそう書き換えるのか」まで理解できるようにしています。
Q1:ログイン判定
Before(ネストあり)
def login(user, password):
if user == "alice":
if password == "1234":
print("ログイン成功")
else:
print("パスワードが違います")
else:
print("ユーザーが存在しません")
Python課題
- 深いネストを解消しよう。
- 条件を逆にして「早期リターン」に書き換える。
After(平坦化)
def login(user, password):
if user != "alice":
print("ユーザーが存在しません")
return
if password != "1234":
print("パスワードが違います")
return
print("ログイン成功")
PythonQ2:年齢と身長チェック
Before
if age >= 18:
if height >= 160:
print("合格")
else:
print("身長が足りません")
else:
print("年齢が足りません")
PythonAfter
if age < 18:
print("年齢が足りません")
elif height < 160:
print("身長が足りません")
else:
print("合格")
PythonQ3:在庫と会員判定
Before
if in_stock:
if is_member:
print("購入可能です")
else:
print("会員登録してください")
else:
print("在庫切れです")
PythonAfter
if not in_stock:
print("在庫切れです")
elif not is_member:
print("会員登録してください")
else:
print("購入可能です")
PythonQ4:テスト結果(点数+提出)
Before
if score >= 60:
if submitted:
print("合格")
else:
print("未提出です")
else:
print("不合格")
PythonAfter
if score < 60:
print("不合格")
elif not submitted:
print("未提出です")
else:
print("合格")
PythonQ5:電車乗車判定
Before
if has_ticket:
if balance >= 200:
print("乗車できます")
else:
print("残高不足です")
else:
print("切符がありません")
PythonAfter
if not has_ticket:
print("切符がありません")
elif balance < 200:
print("残高不足です")
else:
print("乗車できます")
PythonQ6:ファイル操作のチェック
Before
if exists:
if readable:
print("読み込み開始")
else:
print("ファイルが読めません")
else:
print("ファイルが存在しません")
PythonAfter
if not exists:
print("ファイルが存在しません")
elif not readable:
print("ファイルが読めません")
else:
print("読み込み開始")
PythonQ7:アクセス制御(役職+パスワード)
Before
if role == "admin":
if password == "root":
print("アクセス許可")
else:
print("パスワードエラー")
else:
print("管理者のみアクセス可能")
PythonAfter
if role != "admin":
print("管理者のみアクセス可能")
elif password != "root":
print("パスワードエラー")
else:
print("アクセス許可")
PythonQ8:支払い条件(会員・ポイント)
Before
if is_member:
if points >= 100:
print("ポイント払いOK")
else:
print("ポイントが足りません")
else:
print("会員登録が必要です")
PythonAfter
if not is_member:
print("会員登録が必要です")
elif points < 100:
print("ポイントが足りません")
else:
print("ポイント払いOK")
PythonQ9:フォーム入力チェック
Before
if name != "":
if email != "":
print("送信完了")
else:
print("メールアドレスを入力してください")
else:
print("名前を入力してください")
PythonAfter
if name == "":
print("名前を入力してください")
elif email == "":
print("メールアドレスを入力してください")
else:
print("送信完了")
PythonQ10:学生の進級判定
Before
if grade >= 2:
if credit >= 30:
print("進級できます")
else:
print("単位不足です")
else:
print("1年生は対象外です")
PythonAfter
if grade < 2:
print("1年生は対象外です")
elif credit < 30:
print("単位不足です")
else:
print("進級できます")
Python総まとめ:ネスト平坦化の基本ルール
| ルール | 説明 |
|---|---|
| ❌ ネスト構造で深く書かない | 見づらく、バグの温床 |
| ✅ 条件を逆にして「早期終了」 | if not ...: return で整理 |
| ✅ elifで段階的に書く | 「Aがダメ→Bがダメ→OK」で自然な流れ |
| ✅ 関数化・戻り値化 | 出力とロジックを分離すると使いやすい |
