Python:条件分岐( if )の解説
音声
目次
基本:今回できるようになること/if文の構造と例
今回できるようになることは、if/elif/elseで条件を分岐して処理を分けられるようになることです。
if文は、条件がTrueかFalseかで処理を切り替える制御構文(フロー制御)です。
条件式では、比較演算子(==、!=、<、>)と論理演算子(and、or、not)を使います。単純な例として、値が閾値より大きいかどうかを判定するケースがあります。
elifは複数候補の分岐に使い、elseは上のどれにも当てはまらない場合に使います。
ネスト(入れ子)が深くなると可読性が下がりやすいので、後で関数化するのが有用です。
最小コードと実行方法
最小コードは次のとおりです。
def classify_age(age):
if age < 13:
return "child"
elif age < 20:
return "teen"
elif age < 65:
return "adult"
else:
return "senior"
ages = [3, 15, 27, 70]
for a in ages:
category = classify_age(a)
print(f"{a} -> {category}")
このコードでは、年齢リストを先頭から順に分類し、分類結果をprintで出力します。実行すると各年齢がどのカテゴリになるかが表示されます。
実行方法は、ファイル名をif_example.pyとして保存し、ターミナルでpython if_example.pyを実行します。VSCodeを使う場合はファイルを開き、実行ボタンから実行します。
出力例は次のとおりです。
3 -> child
15 -> teen
27 -> adult
70 -> senior
使い分けの基準と確認方法
使い分けの基準は、単純な2分岐であれば if/else を使うとよいです。複数の排他的条件がある場合は if/elif/else にすると読みやすいです。条件が多数でデータとの対応付けが中心になる場合は、辞書を使うか関数化してマップとして切り出すと見通しがよくなります。型の判定や例外処理が必要な場面では try/except と組み合わせると安定します。
確認方法としては、途中結果を print して変数の値を確認するとよいです。型は type(変数) で確認できます。関数を使う場合は戻り値を print して期待値と比較するとずれに気づきやすいです。テストは小さな入力を複数用意して実行すると原因の切り分けがしやすいです。
print(x)
print(type(x))
result = f(x)
print(result)
デバッグの見方と1段ステップアップ・よくあるミス
デバッグでは、まず print で変数の中身を出す方法が分かりやすいです。
logging モジュールを使う場合は、logging.basicConfig(level=logging.DEBUG) を設定してログ出力を確認すると状況を追いやすいです。
VSCodeではブレークポイントを置くと、停止位置でローカル変数を確認できるため、条件分岐の判断材料が意図どおりかを見直しやすいです。
1段ステップアップとして、入力を受け取る場合は例外処理で安全に変換すると堅牢になります。コード例は次のとおりです。
def safe_classify(input_str):
try:
age = int(input_str)
except ValueError:
return "入力が整数ではありません"
return classify_age(age)
よくあるミスは、原因と直し方をセットで把握すると再発を避けやすいです。
- インデントのずれ(IndentationError)は、ファイル内でスペースとタブが混在していることが多いため、エディタの「タブをスペースに変換」機能などでインデントを統一すると改善しやすいです。
- 比較演算子の誤用(
if x = 1)は構文エラーになるため、代入の=ではなく比較の==を使う必要があります。
注意(ここだけ)
条件が複雑になったときに無理にネストを深くすると可読性が低下してバグの原因になります。
- その場合は関数化して条件を名前で表現するか、辞書で分岐を置き換えることを検討するとよいです。
要約
- if/elif/else を使うと、条件に応じて処理を分岐できるようになります。
- 比較演算子と論理演算子を組み合わせると、より複雑な条件を表現できます。
- print/type/logging やブレークポイントを使うと、途中結果を確認しやすくなります。
- ネストが深くなった場合は、関数化したり辞書で置き換えたりすると見通しが良くなります。
- インデントの混在や比較演算子の取り違えがつまずきやすいポイントなので、表記を統一して確認すると安心です。