制御フロー — if · for · while · 内包表記の基礎
制御フロー — if · for · while · 内包表記の基礎
🎯 このlessonを読んだら
このlessonを最後まで読むと、以下の3つを自信を持ってできるようになります。
- ▸✅ インデントのルール (PEP 8 — スペース4つ)
- ▸✅ enumerate · zip · range の正確な使い方
- ▸✅ リスト内包表記 + 辞書内包表記
学習目標をチェックリストとして手元に置き、すべてに答えられるようになったらlessonを閉じてください。
if · elif · else — *条件分岐 + インデントのルール*
if / elif / else — 条件分岐の基本
基本ルール:
- ▸条件行の末尾にコロン
:が必須 - ▸次の行はスペース4つのインデント (ブロック)
- ▸
else ifではなくelif— Python独自の略記
比較演算子: == (等しい) / != (等しくない) / >= (以上) / <= (以下) / < / >
条件式 (三項演算子) — 1行のif
{値1} if {条件} else {値2} — JSの cond ? a : b と同じですが、順序が異なります (値が先)。
truthy / falsy — ifの隠れたルール
Pythonのfalsy値7つ: 0, 0.0, '', None, False, [], {}, ()。空のコレクションもfalsy。
インデントのルール — SyntaxError 第1位の原因
Pythonは { } の代わりにインデントの深さ でブロックを区切ります。深さが同じなら同じブロック。
よくあるエラー3つ
1. IndentationError: expected an indented block
→ if の次の行は必ずインデントが必要。空ブロックには pass を使用:
2. IndentationError: unexpected indent
3. タブとスペースの混在 — 見えないトラップ
→ PEP 8 標準: スペース4つ。エディタでTab → スペース4つに自動変換する設定を行いましょう。
for · while · range · enumerate · zip — *ループ全体*
基本のfor — 反復可能なオブジェクトの走査
Javaの for(int i=0; i<n; i++) のようなインデックスベースのforはありません。インデックスは range() で生成します。
range() — 数値シーケンス
終端値は含まれません。Java/JSと同じ挙動。
enumerate() — インデックス + 値を同時に
インデックスが必要な場合はenumerate。range(len(arr)) はPythonicではありません。
zip() — 複数のシーケンスを同時に走査
短い方を基準に自動的に停止します。2つのコレクションの対応する要素を処理するパターン。
while と break · continue
for-else — 珍しい構文
ループが正常終了したときにelseが実行されます。検索パターンに便利 — 他の言語にはないPython独自の機能。
リスト内包表記 — *Pythonらしさの象徴*
基本形
4行 → 1行。AIが生成するPythonコードの半数以上がこの構文を使用しています。
条件フィルタの追加
末尾のif — フィルタ。JSの .filter().map() を1行にまとめたようなものです。
ネストした内包表記
複数のfor — 外側のforが外側のループ。
辞書内包表記
セット内包表記
可読性の限界
2段階以上 + 複雑な条件の場合は通常のforの方が読みやすいです。内包表記は短い場合にのみ威力を発揮します。
🤖 AIにこう頼んでみましょう
- ▸「このforループをリスト内包表記に変換して」
- ▸「このenumerate + zipの組み合わせを一度に解いて」
- ▸「このインデントエラーを直して」 (コード全体を一緒に送ると即座に解決できます)