Python | 論理演算子(ブール演算子)

Python
スポンサーリンク

ブール値(True / False)って何?

  • Python では条件の「正しい/間違い」を表す値を ブール値(Boolean) と呼びます。
  • 値は True(真)か False(偽)のどちらか。これを使って ifwhile の条件判断を行います。
print(3 > 1)   # True
print(5 == 2)  # False
Python

比較演算子(よく使うもの)

  • == 等しい、!= 等しくない
  • > より大きい、< より小さい
  • >= 以上、<= 以下

例:

a = 10
print(a == 10)  # True
print(a < 5)    # False
Python

論理演算子:and, or, not

複数の条件を組み合わせるときに使います。

  • and:すべての条件が True のときだけ True
  • or:どれか一つでも True なら True
  • not:条件を 反転(True→False、False→True)

表で覚えると分かりやすい(簡易版):

  • True and TrueTrue
  • True and FalseFalse
  • True or FalseTrue
  • False or FalseFalse
  • not TrueFalse

例:

x = 7
print( x > 0 and x < 10 )   # True(両方とも True)
print( x < 0 or x > 5 )     # True(どちらかが True)
print( not (x % 2 == 0) )   # True(x は偶数ではない → True)
Python

優先順位と括弧

  • not が最も強く、その次が and、最後が or
  • 複雑になったら 必ず括弧 () で意図を明確にしましょう。
# not が先に評価される
print( True or not False and False )  # 結果は True

# 誤解を避けるため括弧で明示
print( (True or not False) and False )  # False
Python

チェーン比較(便利な書き方)

0 < x < 10 のように比較をつなげられます。
これは 0 < x and x < 10 と同じ意味です。

x = 5
if 0 <= x < 10:
    print("x は 0 以上 10 未満です。")
Python

真偽値に暗黙的に変換されるもの(truthy / falsy)

Python では値によって True / False とみなされるものがあります(if 文などで評価されるとき):

False 扱い(Falsy) の例:

  • 0, 0.0
  • ""(空文字列)
  • [], (), {}(空のリスト・タプル・辞書)
  • None
    → これらは条件では False とみなされます。

True 扱い(Truthy)

  • 非ゼロの数値、空でない文字列やコレクションなどは True

例:

if []:
    print("空リストは True")   # 実行されない(Falsy)
else:
    print("空リストは False と評価されます")
Python

短絡評価(ショートサーキット)

  • andor は必要な評価を終えたら残りを評価しません(効率的で、副作用を持つ処理と組み合わせると挙動に注意)。
    例:A and B のとき A が False なら B は評価されない。
def a():
    print("a() 実行")
    return False

def b():
    print("b() 実行")
    return True

print(a() and b())  # a() 実行 -> False -> b() は呼ばれない
print(a() or b())   # a() 実行 -> False -> b() が呼ばれて True
Python

実用的な例(よくある使い方)

  1. ユーザーが 18〜65 歳かチェック:
age = 21
if age >= 18 and age < 65:
    print("就労可能な年齢です")
Python
  1. 入力が空でないことを確認:
name = input("名前を入力してください: ")
if not name:
    print("名前が入力されていません!")
else:
    print("こんにちは", name)
Python
  1. リスト内に値があるか(in を使う):
fruits = ["apple","banana","orange"]
if "banana" in fruits:
    print("banana はリスト内にあります")
Python

初心者がやりがちなミス・注意点

  • =(代入) と ==(比較) を間違える:if x = 5: はエラー。比較は ==
  • and/or の順番に注意。意図せず条件が短絡評価されることがある。複雑なら括弧で整理。
  • 空文字 ""0False と評価されることを知らないとバグの原因に。
  • 複数の比較をつなぐとき、a < b < ca < b and b < c と同じ意味であることを忘れがち。

練習問題(手を動かそう)

下に答え(解説)も付けます。まず自分で考えてから下の解答を見ると学びが深まります。

問1

変数 x = 12 のとき、0 < x < 10 or x % 2 == 0 の評価は?(True/False)

問2

次のコードは何を表示する?

x = ""
if x or x == 0:
    print("True 部分")
else:
    print("False 部分")
Python

問3

n が奇数かつ 1〜100 の範囲にあるかを判定する if 条件を書きなさい。

問4(少し応用)

以下の関数 a(), b() は何が実行される?

def a():
    print("A")
    return False

def b():
    print("B")
    return True

print(a() and b())
print(a() or b())
Python

解答と解説

問1
0 < 12 < 10False(12 は 10 未満ではない) → ただし x % 2 == 0True(12 は偶数) → False or TrueTrue

問2
x は空文字 ""(Falsy)。x or x == 0 は左辺 x が falsy なので右辺 x == 0 を評価。"" == 0False → 全体が False“False 部分” が表示される。

問3(例)

n = 15
if 1 <= n <= 100 and n % 2 == 1:
    print("1〜100 の奇数です")
Python

問4(ショートサーキットの例)

  • a() 実行 → “A” と表示 → False を返す
    • a() and b()a() が False のため b() は呼ばれない → 出力:”A” と False
  • 次に a() or b()a() 実行(”A”)、False のため b() 実行(”B”)、b() は True を返す → 出力:”A” “B” と True

結果として表示される行は:

A
False
A
B
True
Python

最後に(学習のコツ)

  • 小さなコードを実際に動かしてみること。紙で考えるより実行して確認する方が早く身につきます。
  • 条件が複雑なら 括弧 () を使って読みやすく。
  • print() を途中に入れて評価の順序(ショートサーキット)を確認すると理解しやすいです。
タイトルとURLをコピーしました