真偽値の変換と truthy / falsy
真偽値の変換と truthy / falsy とは
bool 関数と truthy / falsy 判定の使い方を学びます。本レッスンでは、真偽値の変換と truthy / falsy の基本から実際の使いどころまでを整理し、現場で迷わず使える形に落とし込みます。
真偽値とは
Python の 真偽値 (boolean) は True と False の 2 値だけを取る bool 型の値です。if 文や while 文の条件で使われる、プログラムの分岐を決める根本的な型です。== != < > in などの比較演算子は、評価すると必ず bool を返します。
Python
1 < 2 # True
'a' == 'b' # False
3 in [1, 2, 3] # TruePython では
Trueは1、Falseは0と同じ整数として扱える、というのも覚えておくと便利です。boolはintのサブクラスです。
bool 関数による変換
組み込み関数 の bool は、任意の値を True または False に変換します。
Python
bool(1) # True
bool(0) # False
bool('hello') # True
bool('') # False
bool([1, 2]) # True
bool([]) # False
bool(None) # Falseつまり Python では、値そのものが真偽の意味を持っている わけです。空でないリストや空でない文字列、ゼロでない数値は True 扱い、空のリスト・空文字列・ゼロ・None は False 扱いになります。この性質を truthy (真として扱われる) / falsy (偽として扱われる) と呼びます。
falsy になる代表的な値
falsy として扱われる値は意外と少なく、覚えてしまえば楽です。次の通りです。
FalseNone- 数値の
0(0,0.0,0j) - 空のシーケンス (
'',[],()) - 空のマッピング (
{})
これら以外はほぼすべて
truthyです。'False'(文字列) や[0](要素 1 個のリスト) はtruthyなので注意。
動きを追ってみる
if 文の条件式は bool に評価されます。if value: と書くと、Python は内部で bool(value) を呼んで判定しています。
Python
def has_value(x):
if x:
return True
return Falseこれは次のように書き直せます。
Python
def has_value(x):
return bool(x)短く書けてバグも減るので、if x: return True / return False というパターンは return bool(x) に置き換えるのが定石です。
よくある間違い
真偽値変換でつまずきやすいポイントを 3 つ紹介します。
'False'をFalseと思い込む 文字列'False'は 空ではない文字列 なのでbool('False')はTrueです。文字列の真偽判定ではvalue == 'False'のように内容を見ます。if x == True:と書く 冗長で、if x:でほぼ同じ意味になります。if x is True:まで書くと、1とTrueを区別したいときに役立ちます。0とNoneを混同する 数値0とNoneはどちらも falsy ですが、意味は違います。「値がない」のか「値はあるけどゼロ」なのかを判定したいなら、x is Noneを使い分けます。
関数の引数に
default=Noneを取ってif value:で分岐すると、0もNoneも同じ扱いになってしまうので、if value is None:のほうが安全な場面が多いです。
and と or の戻り値
Python の and と or は、実は True False を返すとは限らない という面白い性質があります。a and b は a が falsy なら a をそのまま返し、truthy なら b を返します。a or b は逆で、a が truthy なら a、falsy なら b を返します。
Python
0 or 'default' # 'default'
'value' or 'fb' # 'value'
[] and 'never' # []
1 and 'last' # 'last'name = user_name or 'ゲスト' のように書くと、user_name が空文字や None のときに 'ゲスト' が代入されるので、デフォルト値を設定するイディオム としてよく使われます。
やってみよう
引数 value を受け取り、その値が truthy なら True、falsy なら False を返す関数 is_truthy を実装してください。bool 関数を使うのが最短ルートです。if value: return True else: return False のような冗長な書き方ではなく、return bool(value) の 1 行で書きましょう。テストでは数値・文字列・リスト・None などさまざまな値が渡されます。
よくある質問
Q. このトピックは Python 以外の言語でも同じ書き方ですか?
A. 考え方は他言語と共通ですが、構文や標準ライブラリは異なります。Python はインデントでブロックを表し、コロン + 改行で構造を作るのが特徴です。他言語に移行する際は基本概念を維持しつつ、構文の差分を意識して書き換えると混乱が少ないです。
Q. 実行してエラーが出た場合の対処は?
A. エラーメッセージの最後の行(TypeError や NameError などの型)から原因と該当行を確認します。Python はトレースバックが下から上に読むと「呼び出し元 → 内部」の順で辿れます。print や IDE のデバッガで途中の変数を確認すると原因が見えてきます。
Q. 次のステップで何を学ぶべきですか?
A. 本レッスンの内容を理解できたら、本文の「やってみよう」を実装し、章末クイズに進むのがおすすめです。さらに自分のミニアプリ(電卓・todo・スコア集計など)に応用するとスキルが定着します。詰まったら本文の H2 セクションに戻って読み返してください。
次のレッスン
次は None の判定 で、bool 関数と truthy / falsy 判定の使い方を学びます を学びます。
事前確認 — 進む前に次の 3 つができることを確認しましょう。
- bool 変換 の要点を自分の言葉で説明できる
- このレッスンの最小コード (または操作手順) を見ずに書ける
- 練習問題やクイズで間違えた箇所を読み直して理解した
理解度チェック (30 秒)
Q. bool 変換 とは何か、1 文で説明してください。
A. 本文の「このレッスンで分かること」または冒頭の説明文を見直し、自分の言葉で要約できれば OK。詰まったら本レッスンの最初の H2 セクションを読み返してみましょう。
関連レッスン
要件
- bool 関数を使って値の真偽を判定する
- if 文を使わずに 1 行で書く
- return で True か False を返す
入出力例
test-cases.txt
is_truthy(1) → true
is_truthy(0) → false
is_truthy("") → false
is_truthy("hello") → true
is_truthy(null) → false
is_truthy([]) → false
is_truthy([1,2]) → true