プログラムは条件分岐や繰り返しを動かすために、状況が正しいか誤っているかを見極めます。
その判定に使うのが真偽値です。
本記事では、Pythonのbool
型とTrue
/False
の基本から、比較や論理演算、短絡評価、Truthy/Falsyのルール、初心者がつまずきやすい注意点までを、実行結果付きのサンプルで丁寧に解説します。
bool型とは?Pythonの真偽値(True/False)の基本
bool型とは何か(boolの意味)
Pythonのbool
は「真(正しい)か偽(誤り)か」を表すデータ型です。
値はTrue
かFalse
の2つだけで、条件式や分岐、ループの判定に用います。
内部的には整数型int
のサブクラスで、計算に参加するとTrue == 1
、False == 0
として振る舞いますが、判定目的なら「真偽の意味」で使うのが基本です。
# bool型の基本
print(True, type(True)) # True の中身と型
print(False, type(False)) # False の中身と型
# intのサブクラスとしての振る舞い
print(True + True) # 1 + 1 と同じ
print(False * 10) # 0 * 10 と同じ
print(True == 1, False == 0)
True <class 'bool'>
False <class 'bool'>
2
0
True True
True と False の書き方と大文字小文字
True
とFalse
は先頭大文字が必須です。
true
やfalse
はPythonには存在しません。
文字列"True"
とも別物なので注意します。
# 正しい例
flag = True
# 間違いの例(コメントのみ、実行するとNameErrorになります)
# flag = true # NameError: name 'true' is not defined
# flag = "True" # これは文字列であってboolではありません
print(flag, type(flag))
True <class 'bool'>
boolの使いどころと基本例
条件分岐if
や繰り返しwhile
の判定、比較や含有判定の結果、ユーザー入力の検証などに使います。
まずは単純な条件分岐の例です。
# しきい値で合否を判定する例
score = 72
is_passed = score >= 60 # 比較の結果はbool
print("合格か?", is_passed)
if is_passed:
print("おめでとうございます。合格です。")
else:
print("残念ながら不合格です。")
合格か? True
おめでとうございます。合格です。
- 関連記事:if文の基本と書き方
- 関連記事:if-elif-else文の基本と書き方
条件式と比較演算子で得る真偽値
比較演算子(== != < > <= >=)の結果はbool
比較の結果は必ずTrue
かFalse
になります。
数値や文字列、長さなど、比較の対象は多様です。
a, b = 10, 20
print(a == b) # 等しいか
print(a != b) # 等しくないか
print(a < b) # より小さいか
print(a <= 10) # 以下か
s = "python"
print(s == "Python") # 大文字小文字は区別される
print(len(s) >= 3) # 長さの比較もOK
False
True
True
True
False
True
- 関連記事:文字列の長さを調べる
- 関連記事:条件式で使うand/or/notの基本と使い方
in / not in で含有判定
in
とnot in
は「含まれているか」をbool
で返します。
文字列、リスト、タプル、集合、辞書(キーの存在)で使われます。
text = "hello world"
print("world" in text) # 部分文字列の含有
print("WORLD" in text) # 大文字小文字の違いに注意
nums = [1, 2, 3]
print(2 in nums) # リストに含まれるか
print(4 not in nums) # 含まれないか
d = {"key": 123}
print("key" in d) # dictはキーの存在を調べる
print(123 in d) # 値の存在ではない(これはFalse)
True
False
True
True
True
False
- 関連記事:リストに値が含まれるかを判定 – in演算子
- 関連記事:辞書(dict)の基本的な使い方
- 関連記事:辞書でキー存在をチェックする3つの方法
is と == の違い(同一性と等価)
==
は「値が等しいか」、is
は「同じオブジェクト(同一性)か」を判定します。
is
は主にNone
やシングルトンに使います。
# 値が同じでも別オブジェクトなら == は True、is は False
x = [1, 2, 3]
y = [1, 2, 3]
print(x == y) # 値は等しい
print(x is y) # 別々に作られたリストなので同一ではない
# 参照を共有すれば is は True
z = x
print(x is z)
# 文字列や小さな整数は最適化(インターン)で is が True になる場合があるが依存しないこと
a = "py"
b = "py"
print(a == b, a is b) # 環境によって is の結果が変わる可能性がある
# None の判定は is を使う(== でも動くが慣習として is)
value = None
print(value is None)
True
False
True
True True
True
同一性の判定に==
を使わない、等価性の判定にis
を使わないようにしましょう。
- 関連記事:比較で使うisと==の違い
- 関連記事:Noneの意味と使い方
論理演算子の使い方と評価の流れ
and / or / not の基本
and
は「かつ」、or
は「または」、not
は「否定」です。
複数の条件を組み合わせて判定を作れます。
age = 20
has_ticket = True
is_adult = age >= 18
can_enter = is_adult and has_ticket
print("成人か?", is_adult)
print("入場可能か?", can_enter)
# or はどちらか一方でもTrueならTrue
is_member = False
has_coupon = True
discount = is_member or has_coupon
print("割引が効くか?", discount)
# not は真偽を反転
print("会員ではない?", not is_member)
成人か? True
入場可能か? True
割引が効くか? True
会員ではない? True
- 関連記事:any()とall()の使い方まとめ
and/or は「最後に評価された値」を返す
Pythonのand
/or
は必ずしもbool
を返さず、最後に評価したオペランドそのものを返します。
条件式では自動的に真偽として解釈されますが、値が返る性質も覚えておくと表現力が上がります。
print("A" and "B") # and は左が真なら右を返す
print("" and "B") # 左が偽なら左(空文字)を返す
print("" or "B") # or は左が偽なら右を返す
print("A" or "B") # 左が真なら左を返す
B
B
A
短絡評価(short-circuit)の挙動
短絡評価とは、結果が確定した時点で右側を評価しない最適化です。
副作用のある処理と組み合わせると挙動の理解が重要です。
def left():
print("leftを評価")
return False
def right():
print("rightを評価")
return True
print("---- and の例 ----")
result_and = left() and right() # leftがFalseならrightは呼ばれない
print("結果:", result_and)
print("---- or の例 ----")
result_or = right() or left() # rightがTrueならleftは呼ばれない
print("結果:", result_or)
---- and の例 ----
leftを評価
結果: False
---- or の例 ----
rightを評価
結果: True
if / while での条件分岐に使う
真偽値は分岐とループの中心です。
複数条件の組み合わせやカウンタの判定を見てみます。
# if で複数条件を組み合わせる
temperature = 28
is_rain = False
if (temperature >= 25) and (not is_rain):
print("暑くて雨でないので洗濯日和です。")
else:
print("洗濯は控えめに。")
# while で条件がTrueの間だけ繰り返す
count = 3
while count > 0:
print("カウント:", count)
count -= 1
print("ループ終了")
暑くて雨でないので洗濯日和です。
カウント: 3
カウント: 2
カウント: 1
ループ終了
真偽値の判定ルールと型変換
Truthy / Falsy の考え方
Pythonでは「真偽値に自動変換される」規則があります。
条件式はTruthy(真とみなす)かFalsy(偽とみなす)として評価されます。
代表的なFalsy値は次のとおりです。
False
- 数値のゼロ群
0
/0.0
/0j
- 空のコンテナ
""
/[]
/()
/{}
/set()
/range(0)
None
それ以外は基本的にTruthyです。
以下はまとめ表です。
値の例 | 判定 |
---|---|
False, None | False |
0, 0.0, 0j | False |
“”, [], (), {}, set(), range(0) | False |
“a”, [1], (0,), {“x”: 1}, {1}, range(3) | True |
任意のオブジェクト(通常) | True |
- 関連記事:ifの条件で意外とFalseになる値まとめ
- 関連記事:__len__()や__bool__()などの特殊メソッドの実装方法
- Python公式ドキュメント: Truth Value Testing
bool(x) で真偽値に変換
bool(x)
は、上のルールに従って<x>をTrue
/False
に変換します。
入力チェックやオプション判定で便利です。
print(bool(1), bool(0))
print(bool("hello"), bool(""))
print(bool([1, 2]), bool([]))
print(bool(None))
True False
True False
True False
False
- 関連記事:文字列と数値の型を変換したい
空の文字列や0はFalseになる
「空」や「ゼロ」は偽という直感的なルールを覚えておくと、簡潔な条件式が書けます。
name = ""
age = 0
if not name:
print("名前が未入力です。")
if not age:
print("年齢が0または未設定です。")
名前が未入力です。
年齢が0または未設定です。
よくある注意点(if x == True は書かない)
if x == True のような書き方は冗長で誤解の元です。
条件はそのまま書くのがPythonicです。
またis
と==
の使い分けにも注意します。
# 悪い例
x = 5
if (x > 0) == True:
print("正の数")
# 良い例(そのまま書く)
if x > 0:
print("正の数")
# True/False を数値として比較しない(読みづらくバグの原因)
print(True == 1) # 技術的にはTrueだが…
print(sum([True, True, False])) # 2 になる(集計で便利だが用法に注意)
# None の判定は is を使う
value = None
if value is None:
print("値がありません")
正の数
正の数
True
2
値がありません
「条件は素直に書く」「等価は==
、同一性はis
」を合言葉にしましょう。
- 関連記事:コーディング規約PEP8の書き方まとめ
まとめ
本記事では、Pythonのbool
型とTrue
/False
の基本を、比較・含有判定・論理演算・短絡評価・Truthy/Falsy・型変換・注意点の順に解説しました。
条件の結果はbool
、複合条件はand
/or
/not
、値の有無はTruthy/Falsyでシンプルに表現できます。
最後に、「if x == True と書かない」「等価は==
、同一性はis
」を徹底すれば、多くの初学者エラーを防げます。
実際に手を動かし、出力を確認しながら身につけていきましょう。
- 関連記事:assert文でバグを早期発見する