if が増えるとコードがゴチャゴチャして読みにくい…そんな悩みはありませんか?
Pythonには、条件分岐を短く、そして読みやすく書くためのコツがいくつもあります。ここでは、初心者でもすぐに真似できるシンプルで分かりやすい条件分岐の書き方を、サンプルコードとあわせて解説します。
まずは基本の形を丁寧に確認しましょう。条件に応じて処理を切り替える最もシンプルな例です。
age = 18
if age < 18:
print("未成年です。")
elif age == 18:
print("成人になりました。")
else:
print("成人です。")
このコードは、age が 18 未満か、ちょうど 18 か、18 を超えるかで出力を変更しています。
Pythonの条件分岐の読み方は自然言語に近く、「もし〜なら」「そうでなければ…」という流れがはっきりしているのが特徴です。はじめはこの読みやすさを大切にしつつ、重複やムダを少しずつ減らしていきましょう。
条件が連続する場合、Pythonは比較の連結ができます。余分な and を書かずに、数学の表記のように表せます。
age = 17
if 13 <= age < 20:
print("ティーンエイジャーです。")
「13以上かつ20未満」という2つの比較を、ひと続きで読みやすく書けます。if age >= 13 and age < 20 より視線の往復が少なく、誤りも減らせます。
ちょっとした分岐であれば、三項演算子(条件演算子)が便利です。 値を選ぶだけの場面で特に読みやすくなります。
age = 20
status = "未成年" if age < 18 else "成人"
print(status)
ここでは、age が 18 未満なら "未成年"、そうでなければ "成人" を status に代入しています。「代入する先が1つ」で「短い2択」のときにぴったりです。長い処理や複雑な分岐には使いすぎないのがコツです。
複数候補のどれかに一致するかを調べるときは、in を使うと断然スッキリします。
fruit = "apple"
if fruit in ["apple", "banana", "orange"]:
print("この果物はよく知られています。")
else:
print("この果物はあまり知られていません。")
「この中に含まれているか?」という意図が、コードからそのまま伝わります。 候補が多い場合や頻繁にチェックする場合は、リストではなく set(集合)にすると高速になることも覚えておくと実務で役立ちます。
fruit = "apple"
popular = {"apple", "banana", "orange"}
if fruit in popular:
print("よく知られています。")
「どれか一つでも満たせばOK」や「全部満たす必要がある」といった条件は、any と all を使うと読みやすくなります。
filename = "report_final.pdf"
if any(filename.endswith(ext) for ext in [".pdf", ".docx", ".txt"]):
print("サポート対象のファイルです。")
この例では、複数の拡張子のうちどれかに一致すれば条件を満たします。 for で作った条件の列を any がまとめて判定してくれるので、or を何度も書く必要がありません。
if の入れ子が深くなると、一気に読みづらくなります。
そんなときは早期リターン(ガード節)で、不要なケースを先に処理してしまいましょう。
def register(age, name):
if age is None or name is None:
return "入力が不足しています。"
if age < 0:
return "年齢が不正です。"
if age < 18:
return "未成年のため登録できません。"
return f"{name}さんを登録しました。"
# 関数の呼び出し例
print(register(25, "田中")) # → 田中さんを登録しました。
print(register(15, "佐藤")) # → 未成年のため登録できません。
print(register(-3, "鈴木")) # → 年齢が不正です。
print(register(None, "山本")) # → 入力が不足しています。
「お断り条件」を先に処理して戻ってしまえば、最後の「正常系」はフラットで読みやすくなります。ネスト(インデント)を一段でも減らせないか、いつも意識してみましょう。
Pythonでは True/False を数式のように扱うより、「真偽そのもの」を読みやすく書くのがコツです。
age = 17
is_student = False
if not is_student and age >= 18:
print("成人で学生ではありません。")
is_student == False と書くより、not is_student のほうが自然に読めます。また、「空の値」は偽(False)として扱われるので、次のように簡潔に書けます。
name = ""
if not name:
print("名前が入力されていません。")
さらに、値のフォールバック(代替値)には or が使えます。
user_input = ""
name = user_input or "ゲスト"
print(name) # "ゲスト"
ただし 0 や "" も「偽」と見なされる点には注意しましょう。0 を有効な入力として扱いたい場合は、条件を is None で明確に区別するのが安全です。
and、or、not を組み合わせると、多くの条件を短くまとめられますが、読みづらさには注意が必要です。否定が多いときはデ・モルガンの法則を使って肯定形に書き換えると理解しやすくなります。
# 例:未成年または学生なら割引
age = 25
is_student = False
if age < 18 or is_student:
print("割引対象です。")
else:
print("通常料金です。")
💡 デ・モルガン(ド・モルガン)の法則とは? デ・モルガンの法則とは、否定(not)と論理演算(and・or)の関係を変換するルールです。 not (A and B) は (not A) or (not B) not (A or B) は (not A) and (not B) と同じ意味になります。つまり、「両方でない」は「どちらかが違う」、「どちらかでない」は「両方違う」と覚えると簡単です。条件式を整理したり、読みやすくする時に役立ちます。
分岐がたくさんあるとき、elif が連続すると読みにくくなります。Python 3.10 以降なら、match 文で見通しを良くできます。
def category(fruit):
match fruit:
case "apple" | "pear":
return "バラ科"
case "banana":
return "バショウ科"
case "orange" | "lemon":
return "ミカン科"
case _:
return "不明"
パターンごとに処理がはっきり分かれるので、elif の連打よりスッキリします。値のグルーピングや「その他」は case _ で表現でき、読み手にも優しい書き方です。
文字列やコードに応じて関数を呼び分けるタイプの分岐は、辞書でのディスパッチにすると短く、拡張も簡単です。 つまり、たくさんの if や elif を使わずに、辞書で関数を切り替えるようにします。
def add(x, y): return x + y
def sub(x, y): return x - y
def mul(x, y): return x * y
ops = {
"add": add,
"sub": sub,
"mul": mul,
}
op = "mul"
result = ops.get(op, lambda x, y: None)(2, 3)
print(result) # 6
elif を何度も書く代わりに、キーと処理の対応を辞書で表現しています。新しい操作を追加するときは辞書に1行足すだけ。条件分岐の「表」をコードに落とし込む発想は、読みやすさと保守性の両方に効きます。
ここまで読んで、「結局どうやって短くするのが正解?」と思った方もいるかもしれません。最後に、実務でも役立つポイントを整理します。
Pythonの条件分岐は、少しの工夫でグッと簡潔にできます。if / elif / else を土台に、三項演算子、in、any/all、早期リターン、辞書ディスパッチ、そして match 文を使い分ければ、読みやすく変更に強いコードに近づきます。あなたのコードにも「本当にこの if は必要?」と問いかけながら、今日紹介したテクニックを一つずつ取り入れてみてください。シンプルさは、バグを防ぎ、将来の自分を助けてくれます。