Pythonでは、True/Falseだけでなく、さまざまな値が「条件式の中でどのように評価されるか」が重要になります。
特に、キャスト(型変換)や論理評価の仕組みを理解していないと、意図しない動作やバグにつながることがあります。
そのため、真偽値の基本と、値がどのようにTrue/Falseに扱われるかを正しく理解することが不可欠です。
下の記事でブール値について見てきましたが、「もうあまり説明することはないのでは?」と思ったかもしれません。True と False だけですし、そんなに難しくないように感じますよね。
Python入門:変数と型(データ型)を理解する – Lean Data Office
しかし実は、少し厄介なポイントがいくつかあり、ここでしっかり確認しておく必要があります。
ブール値への型変換(キャスト)
ではコードを見ていきましょう。まず最初に、「型変換(キャスト)」についてです。Pythonでは整数をブール値に簡単に変換できます。1はTrue、もちろん0はFalseです。実際、0以外の数値はすべてTrueとして扱われます。

例えば -1 は感覚的にはFalseに思えるかもしれませんが、PythonではTrueです。

では文字列はどうでしょうか?True という文字列はTrueになります。False という文字列もTrueになります。なぜなら、「空文字列でない限り」すべてTrueになるからです。この "false" という文字列に特別な意味はありません。ただの文字列なのでTrue扱いです。

空文字列 "" だけがFalseになります。ただしスペース " " のように何か入っているとTrueになるので注意が必要です。

データ構造も同じです。空のリストや辞書はFalseになりますが、中に何か入っていればTrueです。

また、明示的なreturn文がない関数が返す「None」もFalseとして扱われます。

条件分岐とブール
では、なぜこのブール値のキャスト規則を学ぶことが重要なのでしょうか?
それは、ブール値を直接使うことはあまりなく、主に if文やforループの条件として使うからです。
my_list = [1, 2]
if my_list:
print("リストに値が入っています")
ここでは my_list をブール値に変換して評価しています。これは次のように書くのと同じ意味です(明示的にTrueかどうかをチェックする形)。

別の例です:
a = 5
b = 5
if a - b:
print("a と b は等しくありません")

この場合、何も表示されません。なぜなら a - b は 0 になり、Falseになるからです。つまり、この式は「a が b と等しいかどうか」をチェックしています。ただし、これは少しトリッキーな書き方なので、普通は a != b と書いた方がよいでしょう。
複数条件のロジック
ここで重要なポイントは、「ブール値の評価方法は複数ある」ということです。ロジックを追うときは注意が必要です。
例えば「散歩に行くかどうか」を判断するケースを考えます。
weather_is_nice = False
have_umbrella = True

「天気がいい or 傘がある」なら散歩に行けることにします。
しかし次のコード:
if not have_umbrella or weather_is_nice:
print("家にいよう")
else:
print("散歩に行こう")

コードの意図は、傘を持っていない、もしくは天気が良くない場合は家にいて、そうでない場合は散歩に行くということ。
しかし、
これは思った通りに動かない場合があります。

Pythonは左から順に評価するため、not have_umbrella が先に評価されます。
つまり、
if (not have_umbrella) or weather_is_nice:
print("家にいよう")
else:
print("散歩に行こう")
左側赤字で囲った部分が、先にFalseを返した結果、散歩に行こうが表示されているわけです。

その結果、全体の条件が意図とずれることがあります。
例えば「傘はないけど天気はいい」という場合、本当は散歩すべきですが、このコードだと「家にいよう」と表示されてしまいます。

これを修正する方法はいくつかあります。
まず、括弧を使う方法:
if not (have_umbrella or weather_is_nice):
print("家にいよう")
else:
print("散歩に行こう")

または論理を書き換える方法:
if not have_umbrella and not weather_is_nice:
print("家にいよう")
else:
print("散歩に行こう")

これらは同じ意味になります。
さらにシンプルに書くなら:
if have_umbrella or weather_is_nice:
print("散歩に行こう")
else:
print("家にいよう")
これが一番読みやすいです。

※結果は同じ
つまり、ブール値は一見とてもシンプルに見えますが、実際には非常に重要で注意が必要です。
ブール式を書くときは、Pythonがどの順番で評価しているかを意識し、必ずロジックを確認するようにしてください。
Pythonでは、bool型だけでなく、数値・文字列・リストなども自動的に真偽値として評価される(truthy / falsy)仕組みがあります。
また、bool()による明示的なキャストと、if文での暗黙的な評価の違いを理解することが、正確な条件分岐につながります。
直感に頼らず、どの値がTrue/Falseになるかのルールを把握して使い分けることが、バグを防ぐポイントです。