複合条件文 | if文の基本 | Python本格超入門

スポンサーリンク
スポンサーリンク
amazon
スマイルSALE
--:--:--
ad. 価格範囲を指定して商品を探せます

複合条件文

プログラムを作っていると、「Aであり、かつBでもある場合」や「AまたはBのどちらか一方が成り立つ場合」など、複数の条件を組み合わせて複雑な条件分岐を作りたい場面がよくあります。Pythonでは、複合条件文(論理演算子)を使うことで、2つ以上の条件を綺麗に組み合わせて1つのif文にまとめることができます。この記事では、andornot を使った複合条件文の基本と、実務でハマりやすい注意点について解説します。

複合条件文の基本演算子(and, or, not)

複数の条件を繋ぐために、Pythonでは主に3つの「論理演算子」を使用します。それぞれの役割をしっかりと押さえましょう。

1. and(かつ:両方の成立が必要)

接続した2つの条件が、どちらも同時に真(True)である場合にのみ、if文の中身が実行されます。

# andを使った複合条件文
x = 10
y = 20

if x > 5 and y < 30:
    print("xは5より大きく、かつyは30より小さい")  # 出力されます

この例では、x > 5(True)と y < 30(True)の両方が満たされているため、内部の処理が実行されます。片方でも満たさなければ実行されません。

2. or(または:どちらか一方の成立でOK)

接続した条件のうち、少なくともどちらか一方でも真(True)であれば、if文の中身が実行されます(もちろん両方Trueでも実行されます)。

# orを使った複合条件文
x = 10
y = 50

if x > 5 or y < 30:
    print("xが5より大きいか、またはyが30より小さい")  # 出力されます

この場合、後半の y < 30 は満たしていませんが(False)、前半の x > 5 が満たされている(True)ため、全体としてTrueと判定されてメッセージが表示されます。

3. not(〜ではない:条件の反転)

not を条件式の直前に置くことで、その条件の結果を真逆(TrueならFalse、FalseならTrue)に反転させることができます。「〜ではない場合」に処理を行いたいときに便利です。

# notを使った条件反転
x = 10

if not x < 5:
    print("xは5より小さくない(つまり5以上です)")  # 出力されます

この例では、x < 5 自体はFalseですが、not によってTrueにひっくり返るため、if文の中身が実行されます。

実務での超重要ポイント:論理演算子の優先順位と括弧 ()

andor を1つのif文の中に混ぜて使う場合は、その評価される順番(優先順位)に細心の注意を払う必要があります。Pythonでは、数学の掛け算(and)と足し算(or)のような関係があり、or よりも and のほうが先に結びついて評価されるという絶対ルールがあります。

このルールを知らないと、意図しない判定バグ(不具合)を生む原因になります。以下のコードで違いを確認しましょう。

# 優先順位の検証
x = 10
y = 20
z = 30

# 1. 括弧がない場合(andが優先される)
if x > 5 or y > 25 and z < 10:
    # y > 25 and z < 10 が先に計算されて「False」になる。
    # その後、 x > 5(True) or False が計算され、全体で「True」となる。
    print("括弧なし:条件が成立しました")  # 出力されます

# 2. 括弧がある場合(括弧内が最優先される)
if (x > 5 or y > 25) and z < 10:
    # 先に (x > 5 or y > 25) が計算されて「True」になる。
    # その後、 True and z < 10(False) が計算され、全体で「False」となる。
    print("括弧あり:条件が成立しました")  # 条件が満たされないため出力されません

このように、括弧 () をつけるかどうかで条件の意味が180度変わってしまいます。複合条件が3つ以上になる場合は、Pythonの仕様に頼りすぎず、誰が見ても誤解しないように括弧 () で明示的に囲むのが、実務でバグを出さないためのプロの書き方です。

ショートサーキット(短絡評価)の仕組み

Pythonの複合条件文には、無駄な計算を省いて高速化するためのショートサーキット(短絡評価)という賢い仕組みが備わっています。

  • A and B:もし AFalse だった場合、B が何であれ全体が False になることが確定するため、Pythonは B の式を見ずにその時点で判定を打ち切ります。
  • A or B:もし ATrue だった場合、B が何であれ全体が True になることが確定するため、Pythonは B の式を見ずにその時点で判定を打ち切ります。

この性質を利用すると、「左側でデータの存在チェックをして、存在する場合のみ右側で詳細な中身を調べる」といったエラー(NoneError)を未然に防ぐ安全なコードを書くことができます。

まとめ

複合条件文を使いこなすことで、「かつ(and)」「または(or)」「〜ではない(not)」といった実社会の複雑なルールを、プログラムの中にそのまま落とし込めるようになります。複数の条件を組み合わせる際は、and が優先的に処理される特性を頭に入れ、迷ったら必ず丸括弧 () を使ってグループ化する習慣をつけましょう。条件式が複雑になりすぎて読みにくいと感じたときは、無理に1行にまとめず、事前に変数に小分けして格納しておくのも綺麗なコードを書くコツです。