| この記事の要点 |
|
制御構文の全体像
| 構文 | 使う場面 | 詳細 |
|---|---|---|
if / elif / else | 条件で処理を分ける | 条件分岐 (if文) |
for | リストなど並んだ要素を順に処理する | 繰り返し処理 |
while | 条件が成り立つ間くり返す | 繰り返し処理(while文) |
match | 値の形で分岐する(Python 3.10 以降) | 本記事で紹介 |
break / continue | ループを抜ける / 次へ進む | 繰り返しの中断 (break) / 繰り返しのスキップ (continue) |
try / except | 例外が起きたときの流れ | 例外処理 |
switch や do-while、C 言語風の for (i = 0; i < n; i++) は存在しません。代わりに match、while True + break、for i in range(n) を使います。
共通の書き方
score = 75
if score >= 80: # 行末に : を付ける
print("合格") # ブロックはインデント 4 個
elif score >= 60:
print("再試験")
else:
print("不合格")
for name in ["田中", "鈴木"]:
print(name)
n = 3
while n > 0:
print(n)
n -= 1
条件を ( ) で囲む必要はありません。囲んでも動きますが、Python では付けないのが普通です。
ネストと pass
for row in [[1, 2], [3, 4]]:
for value in row:
if value % 2 == 0:
print(value, "は偶数")
# 中身が未定のときは pass を置く(空行だとエラー)
def todo():
pass
if False:
pass # あとで書く
ループの else 節
Python 独自の構文です。ループが break されずに最後まで回った場合だけ else が実行されます。「見つからなかったとき」の処理を素直に書けます。
users = ["田中", "鈴木"]
for u in users:
if u == "佐藤":
print("見つかった")
break
else:
print("見つからなかった") # break しなかったのでここが動く
n = 0
while n < 3:
n += 1
else:
print("最後まで回った") # 3
「else = 条件が偽のとき」ではない点に注意してください。break されなかったときと覚えます。
match 文(Python 3.10 以降)
def describe(command):
match command:
case "start":
return "開始します"
case "stop" | "halt": # 複数候補は |
return "停止します"
case ["move", x, y]: # リストの形で分解できる
return f"({x}, {y}) へ移動"
case {"type": "user", "name": name}: # 辞書の形でも
return f"ユーザー {name}"
case int() as n if n > 0: # 型と追加条件
return f"正の数 {n}"
case _: # どれにも当たらない場合
return "不明"
print(describe(["move", 1, 2])) # (1, 2) へ移動
match は単なる値の一致ではなく構造の分解ができるのが特徴です。値を比べるだけなら if/elif や辞書引きのほうが読みやすい場合もあります。
内包表記で置き換えられる場合
nums = [1, 2, 3, 4, 5]
# for でリストを作る書き方
result = []
for n in nums:
if n % 2 == 0:
result.append(n * 10)
# 内包表記なら 1 行
result = [n * 10 for n in nums if n % 2 == 0] # [20, 40]
# 辞書・集合も同じ形で作れる
squares = {n: n * n for n in nums}
evens = {n for n in nums if n % 2 == 0}
「リストを作るためだけのループ」は内包表記にすると意図が伝わります。ただし条件が 2 つ以上になったり副作用がある場合は、素直に for で書いたほうが読みやすいです。
流れを変える 5 つのキーワード
| キーワード | 何が起きるか | 置ける場所 |
|---|---|---|
break | いま入っているループを 1 段だけ抜ける | for / while の中 |
continue | 本体の残りを飛ばして次の周回へ | for / while の中 |
return | 関数そのものを抜ける(多重ループも一気に抜ける) | 関数の中 |
raise | 例外を投げて呼び出し元へ飛ばす | どこでも |
pass | 何もしない。ブロックを空にできない場所の穴埋め | どこでも |
def find_first_negative(matrix):
for row in matrix:
for v in row:
if v < 0:
return v # 二重ループを一度に抜けられる
return None
print(find_first_negative([[1, 2], [3, -4]])) # -4
break は内側の 1 段しか抜けません。多重ループから脱出したいときは、関数に切り出して return するのが最も読みやすくなります。
条件の中で代入する(セイウチ演算子)
# 計算結果を条件にも本体にも使いたい
data = [1, 2, 3, 4, 5]
if (n := len(data)) > 3:
print(f"{n} 件あります") # 5 件あります
# 読み込みループが 1 行にまとまる
with open("data.txt", encoding="utf-8") as f:
while (line := f.readline()):
print(line.rstrip())
# 内包表記で同じ計算を 2 回しない
values = [y for x in data if (y := x * 10) > 20] # [30, 40, 50]
Python 3.8 で入った := は値を返しながら代入します。普通の = は式ではないため if n = len(data): とは書けません。多用すると読みにくくなるので、同じ計算を 2 回書かずに済む場面だけに使います。
後始末を保証する with 文
# ファイルは閉じ忘れがちなので with を使う
with open("data.txt", encoding="utf-8") as f:
for line in f:
print(line.rstrip())
# ここに来た時点で必ず閉じられている(途中で例外が出ても)
# 複数まとめて開く
with open("in.txt") as src, open("out.txt", "w") as dst:
dst.write(src.read())
with は「ブロックを抜けるときに必ず何かをする」構文です。ファイル・DB 接続・ロックなど、開いたら必ず閉じるものに使います。
よく出る構文エラー
| エラー | 原因 |
|---|---|
SyntaxError: expected ':' | if / for / def の行末に : が無い |
IndentationError: expected an indented block | : の次の行をインデントしていない |
SyntaxError: invalid syntax | かっこの閉じ忘れ。指摘された行の 1 つ前を見る |
SyntaxError: 'break' outside loop | ループの外に break を書いている |
TabError | タブとスペースの混在 |
関連
- 文法 — 親カテゴリ
- 条件分岐 (if文)
- 繰り返し処理 — for 文
- 繰り返し処理(while文)
- 繰り返しの中断 (break)
- 繰り返しのスキップ (continue)
- 論理演算子 — 条件の組み立て
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスのソフト一覧|Blender・Metasequoiaと用途別の選び方
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Visual Studio「デザイナーを表示できません」エラーの原因と対処 2026-10-28 12:06:00
- SSH 認証に失敗しました。再試行してください の対処 2026-10-28 12:06:00
- SSH2 秘密鍵の読み込みに失敗しました の原因と対処 2026-10-28 12:06:00
- TeraTerm のよくあるエラーと対処法完全ガイド — Connection refused / 2026-10-28 12:06:00
- Visual Studio エラー一覧|コンパイルエラー・警告の確認方法と対処 2026-10-28 11:39:57
- Whitelabel Error Page の原因と消し方|Spring Boot のエラーページ 2026-10-28 11:39:57
- Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法 2026-10-28 11:39:57
- SQL WHERE 句完全ガイド 2026-10-28 11:39:57
- SQL JOIN 完全ガイド (INNER/LEFT/RIGHT/FULL OUTER) 2026-10-28 11:39:57
- tomcat の起動 / 停止ログと catalina.log・catalina.out の違い 2026-10-28 10:24:23
- Tomcat の起動確認方法 5 つ|localhost:8080・ポート・プロセス・ログ 2026-10-28 10:24:23
- Oracle 19c COMMITの使い方: 暗黙コミット・自動確定・応答不明時の確認 2026-10-28 09:59:09
- Oracle 19c DELETE文|削除対象の確認・COMMIT前の判断・ROLLBACKの条件 2026-10-28 09:59:09
- Oracle 19c INSERT文|INSERT ALL・SELECT・RETURNINGとMERGEの使い分け 2026-10-28 09:59:09
- Oracle 19cのトランザクション制御|COMMIT・ROLLBACK・分離レベルと接続設定 2026-10-28 09:59:09