Python | and / or を組み合わせた複雑条件の読み方

Python
スポンサーリンク

初心者が いちばんつまずきやすい「and と or の組み合わせ」 を、
図解・具体例・読み方のコツ つきでわかりやすく説明する。

andor が混ざると、文章でもコードでも
「どっちが先に判定されるの?」「どう読むの?」
となりやすい。


まず結論(めちゃ大事)

and のほうが強い(先に判定される)

つまり…

A or B and C

A or (B and C)

自動で ( ) がある扱い になる。

数学の「掛け算が足し算より優先される」のと同じイメージ。


図で理解しよう

  • 弱い(後) → or
  • 強い(先) → and
      ┌─ and(先に判定)
A  or  B
      └─ and(先に判定) C

例 1|読み方でミスしやすいパターン

if age >= 20 or height >= 150 and weight <= 60:

どの順番で判定?

正しい順番

age >= 20  or  (height >= 150 and weight <= 60)

読み方

  • 「20歳以上なら OK」
  • そうでなければ
    • 「身長150以上 かつ 体重60以下なら OK」

❌ 間違った思い込み

「年齢20以上 かつ 身長150以上 かつ 体重60以下」ではない!


例 2|( ) を付けないと意味が変わる例

A or B and C

A or (B and C)

だが、
もし以下のようにしたいなら ( ) が必要:

(A or B) and C

順番が逆になる!


ケース別の読み方ガイド

ケース 1:or で区切った中の and

条件X or 条件Y and 条件Z

読み方:

  • 「X が True なら OK」
  • そうでなければ、「Y と Z が両方 True なら OK」

“大きな OR の中に小さな AND がある” イメージ。

図:

   ┌───────── OR ─────────┐
   ▼                                    ▼
[ X ]                          [ Y ]──AND──[ Z ]

ケース 2:and の中に or(意外と使う)

A and (B or C)

例:

is_member and (age >= 20 or has_coupon)

読み方:

  • 「会員である」
  • かつ
  • 「年齢20以上 または クーポンを持っている」

図:

        AND
   ┌─────┴─────┐
 [ 会員 ]     ┌──── OR ────┐
              ▼                  ▼
           [20以上]           [クーポン]

ケース 3:not が入るとき

not (A and B)

→「A か B のどちらかが False」の意味
(De Morgan の法則)

(not A) or (not B)

に言い換え可能。

例:

not (age >= 20 and is_student)

→「20歳以上で学生である」ではない
→「20歳未満 OR 学生ではない」


実践例:読み方をミスりがちな3つ

例 1

if score >= 80 and passed or bonus:

正しくは:

(score >= 80 and passed) or bonus

読み方:

  • 「80以上 かつ 合格フラグが立っている」
    → OK
  • または「ボーナスがある」
    → OK

例 2

if is_member or is_vip and age >= 18:

正しくは:

is_member or (is_vip and age >= 18)

読み方:

  • 「会員ならOK」
  • そうでなければ
    • 「VIP かつ 18歳以上ならOK」

例 3

if not is_banned and (age >= 18 or has_parent):

読み方:

  • 「禁止されておらず」
  • さらに
    • 「18歳以上 または 保護者同伴」

読み方の“黄金ルール” まとめ

1. and は強い → 先にまとまる

A or B and C
→ A or (B and C)

2. 迷ったら 必ず ( ) をつける

(A or B) and C

A or (B and C)

はまったく別物!

3. 複雑な条件は 日本語の文章に言い換える

A or (B and C)

  • 「AならOK」
  • それ以外なら「BとCが両方OKならOK」

文章に直すと一気に理解しやすくなる。

Python
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました