複数条件の評価

実際のアプリケーション開発では、「ログイン状態であり、かつプレミアム会員で、なおかつ有効期限内である場合」のように、複数の条件を複雑に組み合わせて評価(判定)する場面が日常的に発生します。Pythonでは、論理演算子(and、or、not)を巧みに組み合わせることで、これらを1つの制御フローとして評価できます。この記事では、複数条件を安全かつ綺麗に評価するためのテクニックと、コードが読みにくくなったときの解決策を解説します。
AND条件での複数評価
and 演算子は、並べられたすべての条件が True になったときだけ内部の処理を実行します。
# AND条件で複数評価する例
x = 10
y = 20
if x > 5 and y < 30:
print("xは5より大きく、かつyは30より小さい") # すべての条件を満たすため実行されます
もし条件が3つ、4つと増えていく場合も and で後ろに繋げることができますが、すべての条件が同時に満たされる必要があるため、判定のハードルは高くなります。
OR条件での複数評価
or 演算子は、並べられた条件のうちどこか1箇所でも True があれば、その時点で全体を True として内部の処理を実行します。
# OR条件で複数評価する例
x = 10
y = 50
if x > 5 or y < 30:
print("xが5より大きいか、またはyが30より小さい") # xの条件を満たすため実行されます
NOT条件による判定の反転
not 演算子は、後ろに続く条件全体の評価をひっくり返します。True は False に、False は True に変換されます。
# NOT条件での評価
x = 10
if not x < 5:
print("xは5より小さくない(つまり5以上)") # x < 5 はFalseなので、反転してTrueになり実行されます
複数条件が混ざるときの優先順位と「括弧のルール」
1つの if 文の中に not、and、or が混在する場合、Pythonは以下の優先順位に従って左から自動的に評価していきます。
not(最も高い)andor(最も低い)
しかし、この優先順位通りに処理されることにに頼ってコードを書くと、他の開発者が読んだときに誤解を招いたり、バグの温床になったりします。そのため、評価させたい塊を丸括弧 () で明示的に囲むのが鉄則です。
# 複数条件の優先順位をコントロールする
x = 10
y = 20
z = 30
# 括弧内の「x > 5 または y > 25」が最優先で評価され、その結果と「z < 35」をandで評価します
if (x > 5 or y > 25) and z < 35:
print("複雑な複数条件が成立しました")
複数条件が多くてコードが読みにくい時の対策
条件が4つも5つも重なると、1行が長くなりすぎてコードの可読性が著しく低下します。実務では、以下の2つのアプローチでコードをスッキリと整理します。
対策1:条件式を「説明変数」に切り出す(おすすめ)
複雑な条件式を一度分かりやすい名前の変数に代入し、if 文にはその変数を並べる方法です。コード自体が何を意味しているのかが日本語(変数名)で読めるようになるため、最も推奨される書き方です。
# 悪い例:長すぎて何を確認しているのか分かりにくい
# if user.is_authenticated and user.has_premium_plan and user.subscription_status == "active":
# 良い例:条件を説明変数に小分けする
is_logged_in = user.is_authenticated
is_premium = user.has_premium_plan
is_valid_date = (user.subscription_status == "active")
# if文が驚くほどシンプルに読める
if is_logged_in and is_premium and is_valid_date:
print("プレミアムサービスを提供します")
対策2:丸括弧 () を使って途中で綺麗に改行する
Pythonでは、丸括弧 () の内部であれば、バックスラッシュ(\)を使わずに自然に行をまたいで記述することができます。これを利用して条件ごとに改行位置を揃えると、縦に綺麗に並んだ読みやすいコードになります。
# 丸括弧を利用した複数条件の綺麗な改行スタイル
if (
user.is_authenticated
and user.has_premium_plan
and user.subscription_status == "active"
):
print("プレミアムサービスを提供します")
まとめ
複数の条件を組み合わせることで、プログラムの判断ロジックはより緻密で実用的なものになります。しかし、ただ条件を and や or で横に長く繋げるだけでは、後から見返したときに解読不可能なコードになってしまいます。演算子の優先順位を意識して丸括弧 () で囲むことはもちろん、条件が多くなってきたら「説明変数への切り出し」や「括弧内でのスマートな改行」を積極的に取り入れ、常に誰が見ても一瞬で意図が伝わるクリーンなコードを意識しましょう。