閉じる

Pythonの真偽値boolとは?True/Falseの基本と使い方

プログラムは条件分岐や繰り返しを動かすために、状況が正しいか誤っているかを見極めます。

その判定に使うのが真偽値です。

本記事では、Pythonのbool型とTrue/Falseの基本から、比較や論理演算、短絡評価、Truthy/Falsyのルール、初心者がつまずきやすい注意点までを、実行結果付きのサンプルで丁寧に解説します。

bool型とは?Pythonの真偽値(True/False)の基本

bool型とは何か(boolの意味)

Pythonのboolは「真(正しい)か偽(誤り)か」を表すデータ型です。

値はTrueFalseの2つだけで、条件式や分岐、ループの判定に用います。

内部的には整数型intのサブクラスで、計算に参加するとTrue == 1False == 0として振る舞いますが、判定目的なら「真偽の意味」で使うのが基本です。

Python
# 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 の書き方と大文字小文字

TrueFalseは先頭大文字が必須です。

truefalseはPythonには存在しません。

文字列"True"とも別物なので注意します。

Python
# 正しい例
flag = True

# 間違いの例(コメントのみ、実行するとNameErrorになります)
# flag = true   # NameError: name 'true' is not defined
# flag = "True" # これは文字列であってboolではありません
print(flag, type(flag))
実行結果
True <class 'bool'>

boolの使いどころと基本例

条件分岐ifや繰り返しwhileの判定比較や含有判定の結果ユーザー入力の検証などに使います。

まずは単純な条件分岐の例です。

Python
# しきい値で合否を判定する例
score = 72
is_passed = score >= 60  # 比較の結果はbool
print("合格か?", is_passed)

if is_passed:
    print("おめでとうございます。合格です。")
else:
    print("残念ながら不合格です。")
実行結果
合格か? True
おめでとうございます。合格です。

条件式と比較演算子で得る真偽値

比較演算子(== != < > <= >=)の結果はbool

比較の結果は必ずTrueFalseになります

数値や文字列、長さなど、比較の対象は多様です。

Python
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

in / not in で含有判定

innot inは「含まれているか」をboolで返します

文字列、リスト、タプル、集合、辞書(キーの存在)で使われます。

Python
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

is と == の違い(同一性と等価)

==は「値が等しいか」isは「同じオブジェクト(同一性)か」を判定します。

isは主にNoneやシングルトンに使います。

Python
# 値が同じでも別オブジェクトなら == は 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を使わないようにしましょう。

論理演算子の使い方と評価の流れ

and / or / not の基本

andは「かつ」、orは「または」、notは「否定」です。

複数の条件を組み合わせて判定を作れます。

Python
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

and/or は「最後に評価された値」を返す

Pythonのand/or必ずしもboolを返さず最後に評価したオペランドそのものを返します。

条件式では自動的に真偽として解釈されますが、値が返る性質も覚えておくと表現力が上がります。

Python
print("A" and "B")  # and は左が真なら右を返す
print("" and "B")   # 左が偽なら左(空文字)を返す
print("" or "B")    # or は左が偽なら右を返す
print("A" or "B")   # 左が真なら左を返す
実行結果
B

B
A

短絡評価(short-circuit)の挙動

短絡評価とは、結果が確定した時点で右側を評価しない最適化です。

副作用のある処理と組み合わせると挙動の理解が重要です。

Python
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 での条件分岐に使う

真偽値は分岐とループの中心です。

複数条件の組み合わせやカウンタの判定を見てみます。

Python
# 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, NoneFalse
0, 0.0, 0jFalse
“”, [], (), {}, set(), range(0)False
“a”, [1], (0,), {“x”: 1}, {1}, range(3)True
任意のオブジェクト(通常)True

bool(x) で真偽値に変換

bool(x)は、上のルールに従って<x>をTrue/Falseに変換します

入力チェックやオプション判定で便利です。

Python
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になる

「空」や「ゼロ」は偽という直感的なルールを覚えておくと、簡潔な条件式が書けます。

Python
name = ""
age = 0

if not name:
    print("名前が未入力です。")

if not age:
    print("年齢が0または未設定です。")
実行結果
名前が未入力です。
年齢が0または未設定です。

よくある注意点(if x == True は書かない)

if x == True のような書き方は冗長で誤解の元です。

条件はそのまま書くのがPythonicです。

またis==の使い分けにも注意します。

Python
# 悪い例
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を合言葉にしましょう。

まとめ

本記事では、Pythonのbool型とTrue/Falseの基本を、比較・含有判定・論理演算・短絡評価・Truthy/Falsy・型変換・注意点の順に解説しました。

条件の結果はbool、複合条件はand/or/not、値の有無はTruthy/Falsyでシンプルに表現できます。

最後に、「if x == True と書かない」「等価は==、同一性はisを徹底すれば、多くの初学者エラーを防げます。

実際に手を動かし、出力を確認しながら身につけていきましょう。

この記事を書いた人
エーテリア編集部
エーテリア編集部

人気のPythonを初めて学ぶ方向けに、文法の基本から小さな自動化まで、実際に手を動かして理解できる記事を書いています。

クラウドSSLサイトシールは安心の証です。

URLをコピーしました!