インデントの役割(Pythonで「見た目」が文法になる)
Pythonのインデントは、コードの「まとまり(ブロック)」を示すための文法そのものです。if、for、while、def、class、try などの行末にコロン(:)が付くと、新しいブロックが始まります。その次の行からインデントを下げて書くことで「この中身は同じグループ」と伝えます。中括弧 {} の代わりにインデントで構造を表す、これがPythonの特徴です。
基本ルール(4スペース、コロン、揃える)
コロンでブロック開始、次の行からインデント
コロン(:)の行は「ここからブロックが始まる」という合図です。次の行からインデントを下げ、同じ深さの行が同じブロックになります。
score = 85
if score >= 80:
print("合格です!") # ← ブロック内
print("よくがんばりました!") # ← ブロック内
Pythonインデント幅は4スペースが推奨(PEP 8)
タブではなくスペースを使い、1段のインデントは「半角スペース4つ」が推奨です。タブとスペースの混在はエラーや誤判定の原因になります。
def greet(name):
if not name:
return "名無し"
return f"こんにちは、{name}さん"
Python同じブロックは「同じだけ」下げる
ブロック内のすべての行は、同じインデント幅で揃えます。ズレていると IndentationError になります。
# 悪い例(インデントがバラバラ)
if True:
print("A")
print("B") # エラー
Pythonよくあるエラーと対策(重要ポイント)
IndentationError と TabError
コロンの次の行がインデントされていない、または深さが不一致だと IndentationError。タブとスペースが混じると TabError が起こりやすくなります。エディタ設定で「タブをスペースに変換」「インデント幅4」を有効にしてください。
ブロックの終わりは「インデントを戻す」
ブロックが終わる場所では、元の深さに戻します。else、elif、except、finally は「直前の if/try と同じ深さ」に置くのが基本です。
age = 17
if age >= 18:
print("成人")
else: # if と同じ深さに戻る
print("未成年")
Pythonコロンの付け忘れ
if、for、while、def、class、try の行末にコロンがないと、構文エラーになります。コロンは「ブロック開始の宣言」です。
# 悪い例(コロンがない)
# if x > 0
# print("正")
Pythonネストの考え方(深さが意味を決める)
ネストは「ブロックの中にブロック」を作ることです。深さが増えるほど内側の文脈になります。読みやすさのため、ネストはできるだけ浅く保ち、早期リターンで分岐を減らすと保守が楽になります。
def can_buy(age, stock, suspended):
if suspended:
return False # 早期終了でネストを浅く
if age < 18:
return False
if stock <= 0:
return False
return True
Python複数行の式とハンギングインデント(整形のコツ)
かっこ内の改行は追加インデントで揃える
丸括弧 ()、角括弧 []、波括弧 {} の中は、バックスラッシュを使わずに改行できます。先頭をそろえる「ハンギングインデント」で読みやすくします。
total = (
120
+ 340
+ 560
)
items = [
"apple",
"banana",
"orange",
]
Python引数が多い関数呼び出しの整形
1行が長くなる場合は、括弧で括って改行し、引数ごとに縦にそろえます。
send_mail(
to="hanako@example.com",
subject="レポート",
body="お疲れさまです。",
)
Python例題で身につける(正しいインデントの型)
例題1:if / elif / else のブロック
score = 85
if score >= 90:
grade = "A"
elif score >= 80: # elif は if と同じ深さ
grade = "B"
elif score >= 70:
grade = "C"
else: # else も同じ深さ
grade = "D"
print(f"評価: {grade}")
Python例題2:for と関数定義のネスト
def classify(scores):
result = []
for s in scores: # for の中身を1段下げる
if s >= 80:
result.append("Good")
else:
result.append("Try")
return result
print(classify([70, 85, 90])) # ["Try", "Good", "Good"]
Python例題3:try / except / else / finally の深さ
def to_int(text):
try:
value = int(text.strip())
except ValueError:
return None
else: # 例外が出なかったとき
return value
finally:
pass # 後始末(今回は何もしない)
Python例題4:with 文のネストと揃え
from pathlib import Path
path = Path("data.txt")
with path.open("w", encoding="utf-8") as f:
f.write("Hello\n")
f.write("World\n")
Python実務で役立つ整形の習慣(読みやすさを最優先)
行の長さと改行の判断
長くなる式や文字列は、かっこでくくって適切に改行します。「意味の塊」ごとに縦に揃えると、構造が一目で分かります。
query = (
"SELECT id, name, score "
"FROM users "
"WHERE score >= 80 "
"ORDER BY score DESC"
)
Pythonエディタ設定と自動整形
「タブ→スペース変換」「インデント幅4」「可視化(不可視文字の表示)」をオンにし、必要なら自動整形ツール(black)や静的解析(flake8)を使うと、インデントの乱れを防げます。チームでも統一され、レビューが楽になります。
まとめ(押さえるべき重要ポイント)
Pythonのインデントは「見た目」ではなく「文法」です。コロンでブロック開始、次の行から4スペースでインデント、同じブロックは同じ深さに揃える——この3点が核になります。else/elif/except/finally は親の深さに戻す、かっこ内改行はハンギングインデントで整える、タブ混在は避ける。エディタ設定を整え、ネストを浅く保つ習慣をつければ、読みやすく誤りの少ないPythonコードが自然と書けるようになります。
