【第18回Python基礎講座】条件分岐の達人へ:比較演算子の連結と短絡評価

本ページはプロモーションが含まれています
【第18回Python基礎講座】条件分岐の達人へ:比較演算子の連結と短絡評価
国内のAI狂い

やっほー!国内のAI狂いだよ!✨

第18回へようこそ!今回は「条件式」を極める回だよ。
「AはBより大きくて、Cよりは小さい」みたいな条件、他の言語だとちょっと面倒なんだけど、Pythonなら数学の教科書みたいにスラスラ書けちゃうの。
あと、プログラムが効率よく動くための「サボる技術(短絡評価)」についても解説するよ。これを知ってると、エラー回避の達人になれるかも!?😎🛡️

公式の「ここがわかりにくい」:短絡って電気回路?

公式ドキュメントの「条件について」の章を見てみよう。

ブール演算子 andor は、いわゆる 短絡 (short-circuit) 演算子 です。これらの演算子の引数は左から右へと順に評価され、結果が確定した時点で評価を止めます。

「短絡(ショート)」って聞くと、電気回路がバチッ!ってなる危ないイメージがあるよね⚡
でもプログラミングでは、「結果が見えたら、残りの処理を省略して(サボって)早めに終わらせる」という、とっても効率的で安全な機能のことなんだ。
これがバグ回避にどう役立つのか、後でじっくり見ていこう!

1. 数学みたいに書ける!比較演算子の連結

要するにこれは「a < b < c と書いてOKな機能」だよ!

例えば、「x が 10以上、かつ、20未満」かどうか調べたいとき。
普通のプログラミング言語だと x >= 10 and x < 20 って書くよね。

Pythonなら、こう書けちゃうんです!✨

🐍 サンプルコードを見る(クリックで開閉)
x = 15

# 普通の書き方
if x >= 10 and x < 20:
    print("普通: 範囲内です")

# Pythonicな書き方(連結!)
if 10 <= x < 20:
    print("連結: 範囲内です")

# こんな変なこともできる(a < b かつ b == c)
a, b, c = 1, 5, 5
if a < b == c:
    print("a < b かつ b == c です")
💻 実行結果:
普通: 範囲内です
連結: 範囲内です
a < b かつ b == c です

直感的で読みやすいよね!
ちなみに 10 <= x < 20 は、内部的には 10 <= x and x < 20 と同じ意味で処理されているよ。

2. and, or, not の優先順位をおさらい

複数の条件を組み合わせる時の、結合の強さ(優先順位)を再確認しよう。
これ、試験でよく計算させられるから覚えておいてね!

【重要】優先順位(上が強い)
  1. 比較演算子 (<, >, ==, in など)
  2. not (否定)
  3. and (かつ)
  4. or (または)

A and not B or C(A and (not B)) or C と同じ意味になるよ。
迷ったらカッコ () をつけるのが一番安全だけど、仕組みは理解しておこう!

3. 【最重要】短絡評価(ショートサーキット)

要するにこれは「結果が確定したら、後ろの処理は実行しない機能」だよ!

Pythonは左から順に条件を見ていって、「あ、もうこれ以上見なくても結果決まったわ」と思ったら、そこで評価を打ち切るんだ。

① and の場合

A and B で、もし A が False だったら?
Bが何であろうと、全体の結果は False だよね。
→ だから B は評価(実行)されない!

② or の場合

A or B で、もし A が True だったら?
Bが何であろうと、全体の結果は True だよね。
→ だから B は評価(実行)されない!

🐍 実験コードを見る(クリックで開閉)
def dangerous_func():
    print("💣 ドカーン!実行されちゃった!")
    return True

print("--- 実験1: False and ... ---")
# 左がFalseなので、右の関数は実行されない(安全!)
if False and dangerous_func():
    print("ここは通らない")
else:
    print("爆発回避!")

print("\n--- 実験2: True or ... ---")
# 左がTrueなので、右の関数は実行されない(安全!)
if True or dangerous_func():
    print("爆発回避!")
💻 実行結果:
--- 実験1: False and ... ---
爆発回避!

--- 実験2: True or ... ---
爆発回避!

これを利用すると、「データが空っぽじゃなかったら中身にアクセスする」みたいな安全なコードが書けるんだ。
if data and data[0] == "A":
もし data が空(False)なら、後ろの data[0](エラーになる処理)は実行されないからね!✨

4. True/False以外が返ってくる!?

andor の結果は、必ずしも TrueFalse になるとは限らないんだ。
実は、「最後に評価された値そのもの」が返ってくるんだよ。

A or B or C
→ 左から見ていって、最初に 真 (True) になった値を返す。
(全部 偽 なら、最後の値を返す)

これを使うと、変数の「デフォルト値」を設定するのによく使われるよ!

🐍 実用テクニックを見る(クリックで開閉)
# ユーザー名が空文字(False扱い)なら、デフォルト名を使う
input_name = ""
default_name = "名無しさん"

# or を使うと、input_name が真ならそれを、偽なら default_name を返す
final_name = input_name or default_name

print(f"ようこそ、{final_name}!")

# 文字列が入っている場合
input_name = "AI狂い"
final_name = input_name or default_name
print(f"ようこそ、{final_name}!")
💻 実行結果:
ようこそ、名無しさん!
ようこそ、AI狂い!

試験に出る!要注意ポイント

今回の範囲で、Python 3 エンジニア認定基礎試験によく出るひっかけポイントをまとめたよ!📝

① 演算子の優先順位問題

not A or B and C みたいな式が出たら、焦らず順番を考えよう。
1. not A
2. B and C
3. それらを or する
という順番だよ。

② 短絡評価の副作用

「条件式の右側に、変数の中身を変更するような関数(副作用のある関数)を置く」のは要注意。
短絡評価によってその関数が実行されず、変数が変わらない可能性があるからだよ。

💡 管理人の失敗エピソード
if user != None and user.is_active: って書くべきところを、うっかり逆に if user.is_active and user != None: って書いちゃって...。
userNone の時に「Noneには is_active なんて属性ないよ!」ってエラー(AttributeError)で落ちたことがあるよ😭
「存在確認(Noneチェック)は必ず左側に書く!」 これ、鉄則です!

理解度チェック!ミニクイズ

条件式の挙動、しっかり理解できたかな?
試験レベルの問題でチェックしてみよう!🔍

次の式の結果はどうなる?
x = 10
1 < x < 20
  1. SyntaxError(構文エラー)
  2. True
  3. False
▼ クリックで正解を表示
正解: 2. True

解説:
Pythonでは比較演算子を連結できるよ。
1 < 10 (True) かつ 10 < 20 (True) なので、全体も True になるね。

次のコードの実行結果は?
print("A" or "B")
  1. True
  2. "A"
  3. "B"
▼ クリックで正解を表示
正解: 2. "A"

解説:
or 演算子は、左から評価して最初に「真」になった値を返すよ。
空でない文字列 "A" は真なので、そこで評価終了して "A" が返るんだ。

次の式で、関数 func() が実行されるのはどれ?
  1. False and func()
  2. True or func()
  3. False or func()
▼ クリックで正解を表示
正解: 3. False or func()

解説:
1は and の左がFalseなので終了。
2は or の左がTrueなので終了。
3は or の左がFalseなので、結果を確定させるために右の func() も評価しにいくよ!

まとめ:次回への引き

今回は「比較演算子の連結と短絡評価」について解説したよ!
「サボれるところはサボる」のがPython流の効率化。短絡評価を使いこなして安全なコードを書こうね✨

次回は、シーケンス(リストや文字列)同士の比較について深掘り!
テーマは「比較のルール:リストやタプルの大小はどう決まる?」だよ。
[1, 2, 3][1, 2, 10] はどっちが大きい? 文字列の "Python""Java" は?
辞書順比較(lexicographical order)のルールを知れば、ソートの仕組みも完璧に理解できるはず!お楽しみに!👋✨

出典: Python公式チュートリアル
Copyright © 2001-2026 Python Software Foundation. Licensed under the PSF License.

よかったらシェアしてね!
  • URLをコピーしました!
目次