Python & AI Tutorials Logo
Python プログラミング

7. 真偽値と条件

前の章では、数値や文字列、基本的なデータ操作の方法を学びました。ここからは、Python がどのように「判断」を行うかを見ていきます。これは、プログラムが状況に応じて異なる振る舞いをするための、非常に重要な機能です。Python における意思決定の中心となるのが、真偽値 (Boolean values)条件 (conditions) です。

日常の判断を考えてみましょう。「もし雨が降っていたら、傘を持って行く」「もし気温が 30°C を超えたら、エアコンをつける」といったものです。これらの判断は、「真」か「偽」かの条件に基づいています。Python も同じ原理を使います。条件が真か偽かを評価し、その結果に応じて行動します。

この章では、真偽値について学び、比較演算子を使って条件を作る方法、「truthiness(真として扱われる値)」という Python 独自の考え方、そして複雑な論理式を組み立てるための強力なテクニックを見ていきます。この章を終えるころには、次の章で学ぶ if 文やループの土台となる仕組みを習得しているはずです。

7.1) 真偽値 True と False

Python には、真理値を表す特別なデータ型 bool(Boolean の略)があります。この型が取り得る値はちょうど 2 つ、TrueFalse だけです。これらの値は先頭が大文字になっていることに注意してください。これは Python ではとても重要です。truefalse のように小文字で書くと、Python はそれを認識できないためエラーになります。

python
# boolean_basics.py
# 真偽値の変数を作成する
is_sunny = True
is_raining = False
 
print(is_sunny)    # Output: True
print(is_raining)  # Output: False
 
print(type(True))   # Output: <class 'bool'>
print(type(False))  # Output: <class 'bool'>

真偽値は、プログラムが投げかけるあらゆる「はい/いいえ」の質問の結果を表すため、非常に重要です。「この数値は 10 より大きいか?」「この文字列には 'a' が含まれているか?」「ユーザーはログインしているか?」といったものです。Python のあらゆる条件は、最終的には True または False のどちらかに評価されます。

7.1.1) 変数と式の中の真偽値

数値や文字列と同じように、真偽値も変数に保存できます。これは、プログラムの中で何かの状態を追跡したいときに便利です。

python
# boolean_variables.py
# 状態を追跡するために真偽値の変数を使う
is_logged_in = False
has_permission = True
is_valid_email = True
 
print("User logged in:", is_logged_in)        # Output: User logged in: False
print("Has permission:", has_permission)      # Output: Has permission: True
print("Valid email:", is_valid_email)         # Output: Valid email: True
 
# 真偽値の変数は再代入できます
is_logged_in = True
print("User logged in:", is_logged_in)        # Output: User logged in: True

真偽値の変数には、is_has_can_ のような接頭辞をつけて名前を付けることがよくあります。こうした命名規則により、その変数が真偽値(true/false)を持つことが一目で分かるようになり、自分自身にも他の読者にもコードの意図が伝わりやすくなります。

7.2) 比較演算子と基本的な条件

TrueFalse を直接使って真偽値を作成することもできますが、実際のプログラムで使う真偽値の多くは 比較 (comparisons) の結果として生まれます。つまり、値同士の関係を調べることです。Python には、2 つの値を比較して真偽値を返す 比較演算子 (comparison operators) がいくつか用意されています。

7.2.1) 6 つの比較演算子

Python には、主に次の 6 つの比較演算子があります。

OperatorMeaningExampleResult
==等しい5 == 5True
!=等しくない5 != 3True
<より小さい3 < 5True
>より大きい5 > 3True
<=以下5 <= 5True
>=以上5 >= 3True

これらの演算子を実際に見てみましょう。

python
# comparison_operators.py
# 数値の比較
x = 10
y = 20
 
print(x == y)   # Output: False
print(x != y)   # Output: True
print(x < y)    # Output: True
print(x > y)    # Output: False
print(x <= y)   # Output: True
print(x >= y)   # Output: False
 
# 等しい値の比較
a = 15
b = 15
 
print(a == b)   # Output: True
print(a <= b)   # Output: True
print(a >= b)   # Output: True

7.2.2) 数値と文字列の比較

比較演算子は、整数だけでなくさまざまな型の値に対して動作します。

python
# comparing_types.py
# 浮動小数点数の比較
temperature = 23.5
print(temperature > 20.0)   # Output: True
print(temperature == 23.5)  # Output: True
 
# 文字列の比較(アルファベット/辞書順の順序)
name1 = "Alice"
name2 = "Bob"
print(name1 < name2)   # Output: True
print(name1 == name2)  # Output: False
 
# 文字列の比較は大文字小文字を区別します
word1 = "Python"
word2 = "python"
print(word1 == word2)  # Output: False
 
# len() を使って文字列の長さを比較する
print(len(name1) == len(name2))  # Output: False

文字列を比較する際、Python は 辞書順 (lexicographic ordering) を使います。これは本質的には Unicode 文字コードに基づいたアルファベット順です。この順序では、大文字のほうが小文字よりも前に来ます。そのため "Python" と "python" は等しくありません。

7.2.3) 比較結果を保存する

あらゆる比較の結果は真偽値なので、それを変数に保存できます。

python
# storing_comparisons.py
# 後で使うために比較結果を保存する
age = 25
is_adult = age >= 18
is_senior = age >= 65
is_teenager = 13 <= age <= 19  # 比較の連結(chained comparisons)についてはすぐ後で学びます
 
print("Is adult:", is_adult)        # Output: Is adult: True
print("Is senior:", is_senior)      # Output: Is senior: False
print("Is teenager:", is_teenager)  # Output: Is teenager: False
 
# 保存した比較結果を計算や他の式で使う
price = 100
discount_eligible = price > 50
print("Discount eligible:", discount_eligible)  # Output: Discount eligible: True

比較の結果を、意味の分かりやすい名前の変数に保存することで、コードはより読みやすくなります。プログラムのあちこちで毎回 age >= 18 と書く代わりに、その代わりとして is_adult という変数を使えば、「何をチェックしているか」が明確になります。

7.3) 比較・式・bool() 関数から得られる真偽値

ここまでで、比較が真偽値を生み出すことを見てきました。Python ではそのほかにも、bool() 関数を使って他の型から真偽値を得る方法があります。

7.3.1) bool() 関数

bool() 関数は、任意の値を対応する真偽値に変換します。これは、その値が真偽値コンテキストで真と見なされるか偽と見なされるかを、明示的に確かめたいときに便利です。

python
# bool_function.py
# 数値を真偽値に変換する
print(bool(1))       # Output: True
print(bool(42))      # Output: True
print(bool(-5))      # Output: True
print(bool(0))       # Output: False
print(bool(0.0))     # Output: False
 
# 文字列を真偽値に変換する
print(bool("Hello"))     # Output: True
print(bool("False"))     # Output: True
print(bool(""))          # Output: False
 
# None を真偽値に変換する
print(bool(None))    # Output: False

bool() 関数には、変換の際の明確なルールがあります。これについては次の「truthiness」と「falsiness」の節で詳しく見ていきます。今のところは、多くの値は True に変換される一方で、00.0、空文字列("")、None のような特別な値は False になることに注目してください。

7.4) 条件における Truthiness と Falsiness

Python の強力な特徴のひとつが、truthiness(真として扱われる性質)falsiness(偽として扱われる性質) という考え方です。Python では、TrueFalse だけでなく、あらゆる値が固有の真偽値としての解釈を持っています。つまり、真偽値が期待される場所では、どんな値でも使うことができ、Python はそれを「真」または「偽」として扱います。

7.4.1) 偽と見なされる値 (Falsy Values)

Python では、次のような値が falsy(真偽値コンテキストで False と同様に振る舞う)と見なされます。

  1. 真偽値の False 自体
  2. 特殊な値 None
  3. 数値のゼロ: 00.00j(複素数のゼロ)
  4. 空のシーケンス: ""(空文字列)、[](空リスト)、()(空タプル)
  5. 空のマッピング: {}(空辞書)
  6. 空の集合: set()

これを bool() 関数で確認してみましょう。

python
# falsy_values.py
# これらの値はすべて falsy です
print("Boolean False:", bool(False))     # Output: Boolean False: False
print("None:", bool(None))               # Output: None: False
print("Zero integer:", bool(0))          # Output: Zero integer: False
print("Zero float:", bool(0.0))          # Output: Zero float: False
print("Empty string:", bool(""))         # Output: Empty string: False
print("Empty list:", bool([]))           # Output: Empty list: False
print("Empty tuple:", bool(()))          # Output: Empty tuple: False
print("Empty dict:", bool({}))           # Output: Empty dict: False

7.4.2) 真と見なされる値 (Truthy Values)

上記以外のすべての値は、Python では truthy(真偽値コンテキストで True と同様に振る舞う)と見なされます。たとえば次のようなものです。

  1. 真偽値の True 自体
  2. 0 以外の数値(正でも負でも)
  3. 空でない文字列、リスト、タプル、辞書、集合
  4. ほとんどの自作オブジェクト
python
# truthy_values.py
# これらの値はすべて truthy です
print("Boolean True:", bool(True))           # Output: Boolean True: True
print("Positive integer:", bool(42))         # Output: Positive integer: True
print("Negative integer:", bool(-1))         # Output: Negative integer: True
print("Non-zero float:", bool(3.14))         # Output: Non-zero float: True
print("Non-empty string:", bool("Hello"))    # Output: Non-empty string: True
print("String 'False':", bool("False"))      # Output: String 'False': True
print("String '0':", bool("0"))              # Output: String '0': True
print("Non-empty list:", bool([1, 2, 3]))    # Output: Non-empty list: True
print("Non-empty tuple:", bool((1,)))        # Output: Non-empty tuple: True
print("Non-empty dict:", bool({"a": 1}))     # Output: Non-empty dict: True

重要な注意: 文字列 "False" は、空でない文字列なので truthy です。同じ理由で、文字列 "0" も truthy です。falsy なのは、真偽値の False 自体と数値の 0(およびそのほかのゼロ値)だけです。

7.4.3) Truthiness が重要な理由

truthiness を理解することは重要です。というのも、これは Python の基本概念であり、頻繁に出会うからです。第 8 章では、条件に基づいて判断を行う if 文を学びます。これらの文では、明示的な真偽値の比較だけでなく、任意の値を条件として使うことができます。Python が自動的に値の truthiness を評価してくれるからです。

truthiness を利用すると、「コレクションに要素が含まれているか」「文字列に中身があるか」「オプションの値が存在するか」といったことを、簡潔なコードで書けるようになります。ここで、truthiness がどのように役立つかを少しだけ先取りして見てみましょう(完全な if 文の構文は第 8 章で学びます)。

python
# truthiness_preview.py
# bool() を使って truthiness を確認するデモ
# (第 8 章では、これらを直接 if 文の中で使います)
 
# 文字列に中身があるかをチェックする
user_input = ""
has_content = bool(user_input)
print("User entered something:", has_content)  # Output: User entered something: False
 
user_input = "Alice"
has_content = bool(user_input)
print("User entered something:", has_content)  # Output: User entered something: True
 
# リストに要素があるかをチェックする
shopping_list = []
has_items = bool(shopping_list)
print("Shopping list has items:", has_items)  # Output: Shopping list has items: False
 
shopping_list = ["milk", "eggs", "bread"]
has_items = bool(shopping_list)
print("Shopping list has items:", has_items)  # Output: Shopping list has items: True
 
# 値が存在するか(None ではないか)をチェックする
optional_value = None
value_exists = bool(optional_value)
print("Value exists:", value_exists)  # Output: Value exists: False

truthiness を理解すると、あなたのコードはより「Python らしく (Pythonic)」なものになります。Python の慣習やイディオムに沿った書き方ができるようになるからです。経験豊富な Python プログラマが、明示的な比較を使わずに条件をチェックしているのを見かけたら、それは truthiness を活用して、より簡潔で読みやすいコードを書いているのです。

7.5) 比較の連結 (Chained Comparisons) と真偽値でのよくある落とし穴

Python には 比較の連結 (chained comparisons) という強力な機能があり、ある種の条件を数学の表記に近い形で、読みやすく書くことができます。ただし、この機能や真偽値まわりのいくつかの挙動は、よくある間違いの原因にもなります。

7.5.1) 比較の連結 (Chained Comparisons)

数学では、「10 < x < 20」のように書いて、x が 10 と 20 の間にあることを表すことがあります。Python では、まったく同じように書くことができます。

python
# chained_comparisons.py
# 値がある範囲内にあるかをチェックする
x = 15
 
# 数学的な書き方(比較の連結)
in_range = 10 < x < 20
print("x is between 10 and 20:", in_range)  # Output: x is between 10 and 20: True
 
# これは 2 つの比較を組み合わせたものと同じです
# ('and' については第 9 章で学びます)
in_range = (10 < x) and (x < 20)
print("x is between 10 and 20:", in_range)  # Output: x is between 10 and 20: True
 
# 範囲外の値でテストする
y = 25
in_range = 10 < y < 20
print("y is between 10 and 20:", in_range)  # Output: y is between 10 and 20: False
 
# 境界値でテストする
z = 10
in_range = 10 < z < 20
print("z is between 10 and 20:", in_range)  # Output: z is between 10 and 20: False
 
# <= と >= を使って境界を含める
in_range_inclusive = 10 <= z <= 20
print("z is between 10 and 20 (inclusive):", in_range_inclusive)  # Output: z is between 10 and 20 (inclusive): True

比較の連結は、隣り合う要素ごとに比較を行うことで動作します。10 < x < 20 という式は、内部的には (10 < x) and (x < 20) として評価されます。連結されたすべての比較が真になったときにのみ、全体として真になります。

2 つ以上の比較を連結することもできます。

python
# multiple_chains.py
# 複数の比較を連結する
a = 5
b = 10
c = 15
d = 20
 
# 値が昇順になっているかをチェックする
ascending = a < b < c < d
print("Values are in ascending order:", ascending)  # Output: Values are in ascending order: True

比較の連結がどのように動作するかを、図で表すと次のようになります。

True

False

True

False

Start: Evaluate 10 < x < 20

Is 10 < x?

Is x < 20?

Result: False

Result: True

7.5.2) よくある落とし穴: 代入と比較の取り違え

初心者が最もよく犯す間違いのひとつが、「代入 (=)」と「比較 (==)」を取り違えることです。

python
# assignment_vs_comparison_pitfall.py
x = 10
 
# これは比較ではなく代入です
# x に 20 を代入しているだけで、x と 20 を比較してはいません
# x = 20  # これは x を 20 に変更します
 
# こちらが比較です
result = (x == 20)  # x が 20 と等しいかどうかをチェックします
print("x equals 20:", result)  # Output: x equals 20: False
print("x is now:", x)  # Output: x is now: 10
 
# 第 8 章で学ぶ if 文の中で = を使うとエラーになります
# if x = 20:  # SyntaxError: invalid syntax
#     print("This won't work")
 
# 正しい比較
# 第 8 章では、次のように書くことになります: if x == 10:
result = x == 10
print("x equals 10:", result)  # Output: x equals 10: True

Python は、if 文(第 8 章で学びます)の中で代入演算子 = を使ってしまった場合、SyntaxError を出してこの間違いを防いでくれます。しかし、それ以外の文脈では、「== と書くつもりで = と書いてしまう」と、分かりにくいバグを生む原因になります。

7.5.3) よくある落とし穴: 浮動小数点の比較

浮動小数点数を比較するときには、精度の問題に注意する必要があります。

python
# floating_point_comparison.py
# 浮動小数点の計算には精度の問題があることがあります
result = 0.1 + 0.2
print("0.1 + 0.2 =", result)  # Output: 0.1 + 0.2 = 0.30000000000000004
 
# 直接の比較は期待通りに動かないことがあります
is_equal = (result == 0.3)
print("Result equals 0.3:", is_equal)  # Output: Result equals 0.3: False
 
# 実際の値は 0.3 に非常に近いですが、完全に等しくはありません
print("Difference:", result - 0.3)  # Output: Difference: 5.551115123125783e-17
 
# 浮動小数点の比較には、小さな許容誤差を使います
tolerance = 0.0001
is_close = abs(result - 0.3) < tolerance
print("Result is close to 0.3:", is_close)  # Output: Result is close to 0.3: True
 
# Python 3.5+ では、このために math.isclose() が用意されています
# モジュールのインポートについては第 23 章で学びます
# import math
# is_close = math.isclose(result, 0.3)

この問題は、コンピュータが浮動小数点数を 2 進数で保存していることに起因します。そのため、0.1 のような 10 進数の一部は 2 進数では正確に表現できません。こうした数値で計算を行うと、ごく小さな丸め誤差が蓄積されます。ほとんどの実用的な用途では、これらの誤差は無視できるほど小さいのですが、直接の等値比較を行うと、思わぬ比較結果になることがあります。

7.6) 1 と 0 としての真偽値と、算術演算を避けるべき理由

少し驚くかもしれませんが、Python において TrueFalse は実は整数の特別なケースです。True1 に、False0 に相当します。これは Python の設計上の歴史的な理由によるものですが、いくつか面白い影響を持ちます。この関係を理解しておくと混乱を避けられますが、通常のコードの中でこの性質を直接利用する場面はあまり多くありません。

7.6.1) 真偽値は整数の一種

真偽値が整数の一種であることは、型を調べたり、整数の演算を行ったりして確かめられます。

python
# booleans_as_integers.py
# 真偽値は整数型のサブタイプです
print(isinstance(True, int))   # Output: True
print(isinstance(False, int))  # Output: True
 
# True は 1、False は 0 に等しい
print(True == 1)    # Output: True
print(False == 0)   # Output: True
print(True == 2)    # Output: False
 
# 真偽値を算術演算に使うことができます(が、推奨されません!)
result = True + True
print("True + True =", result)  # Output: True + True = 2
 
result = True + False
print("True + False =", result)  # Output: True + False = 1
 
result = False * 100
print("False * 100 =", result)  # Output: False * 100 = 0
 
# 真偽値はリストのインデックスとしても使えます
items = ["first", "second", "third"]
print(items[False])  # Output: first
print(items[True])   # Output: second

isinstance() 関数は、ある値がある型のインスタンスかどうかを調べます。isinstance(True, int) を調べると True になるのは、bool 型が int 型のサブクラスだからです。

7.6.2) 真偽値での算術演算を避けるべき理由

Python では真偽値を算術演算に使うことができますが、そうするべきではありません。真偽値を数値として扱うと、コードが分かりにくくなり、理解しづらくなります。真偽値と整数の関係は、主に歴史的な事情によるものであり、知っておくに越したことはありませんが、通常のコードで積極的に利用するべきものではありません。

真偽値の算術演算が問題になりやすい理由を見てみましょう。

python
# boolean_arithmetic_problems.py
# 分かりにくいコードの例
count = 0
has_error = True
has_warning = False
 
# 動作はしますが、意味が分かりにくいです
total = count + has_error + has_warning
print("Total:", total)  # Output: Total: 1
 
# これが何を意味しているのか、ぱっと見では分かりません!
# よりよい方法: 明示的に書く
# if-else 式については第 10 章で学びます。
error_count = 1 if has_error else 0
warning_count = 1 if has_warning else 0
total = count + error_count + warning_count
print("Total:", total)  # Output: Total: 1

このルールの、よくある唯一の例外が、「コレクションの中で True がいくつあるかを数える」ときです。

python
# counting_trues.py
# いくつの条件が True かを数える
conditions = [True, False, True, True, False]
 
# これは意図が明確なので許容されます
true_count = sum(conditions)
print("Number of true conditions:", true_count)  # Output: Number of true conditions: 3
 
# sum() は値を合計するので動作します
# True は 1、False は 0 として扱われます
# したがって sum([True, False, True, True, False]) = 1 + 0 + 1 + 1 + 0 = 3 となります

このケースでは、真偽値のリストに対して sum() を使うのは、Python で広く使われているイディオムです。「いくつの条件が真かを数えている」という意図が、文脈から明らかだからです。

7.6.3) 型変換における真偽値

真偽値が整数であるため、真偽値を整数に明示的に変換することは本質的には冗長です。

python
# boolean_conversion.py
# 真偽値を整数に変換する(本来は不要)
value = True
int_value = int(value)
print("Integer value:", int_value)  # Output: Integer value: 1
print("Are they equal?", value == int_value)  # Output: Are they equal? True
 
# しかし、整数を真偽値に変換するのは有用です
number = 0
bool_value = bool(number)
print("Boolean value:", bool_value)  # Output: Boolean value: False
 
number = 42
bool_value = bool(number)
print("Boolean value:", bool_value)  # Output: Boolean value: True

int() で真偽値を整数に変換するのは、真偽値がすでに整数として振る舞うため、通常は必要ありません。一方で、整数(やその他の型)を bool() で真偽値に変換するのは、その値の truthiness を明示的に確認したいときに役立ちます。

7.6.4) 歴史的な理由

Python で真偽値が整数である理由は、歴史的なものです。初期の Python(2.3 より前)には、真偽値専用の型がありませんでした。プログラマは 1 を true、0 を false として使っていました。bool 型が追加されたとき、既存のコードとの後方互換性を保つために、boolint のサブクラスとして設計されました。

今日では、TrueFalse はまず真偽値として捉えるべきです。10 との関係は実装上の詳細であり、意図せず遭遇したときに頭の片隅で思い出すくらいで十分でしょう。

7.7) 条件式での in と not in の利用

in 演算子と not in 演算子は、「メンバーシップ (membership)」をテストします。つまり、ある値がコレクションの中に存在するかどうかを調べます。これらの演算子は、文字列やリストなどのコレクションを扱うときに、読みやすい条件式を書くためにとても役立ちます。

7.7.1) 文字列でのメンバーシップテスト

in 演算子は、ある文字列の中に別の文字列が含まれているかをチェックします。

python
# string_membership.py
# 部分文字列が文字列の中に存在するかをチェックする
text = "Python programming is fun"
 
# 'in' を使って部分文字列をチェックする
has_python = "Python" in text
print("Contains 'Python':", has_python)  # Output: Contains 'Python': True
 
has_java = "Java" in text
print("Contains 'Java':", has_java)  # Output: Contains 'Java': False
 
# 大文字小文字を区別するマッチ
has_python_lower = "python" in text
print("Contains 'python':", has_python_lower)  # Output: Contains 'python': False
 
# 'not in' を使って含まれていないことをチェックする
has_no_java = "Java" not in text
print("Does not contain 'Java':", has_no_java)  # Output: Does not contain 'Java': True

in 演算子は、大文字小文字を区別する検索を行います。大文字小文字を区別しない検索をしたい場合は、両方の文字列を同じ大文字/小文字に変換してから比較します。

python
# case_insensitive_search.py
text = "Python Programming"
 
# 大文字小文字を区別する検索(マッチしません)
result = "python" in text
print("Contains 'python':", result)  # Output: Contains 'python': False
 
# 大文字小文字を区別しない検索(両方を小文字に変換)
result = "python" in text.lower()
print("Contains 'python' (case-insensitive):", result)  # Output: Contains 'python' (case-insensitive): True
 
# 元の文字列は変わりません
print("Original text:", text)  # Output: Original text: Python Programming

7.7.2) リストでのメンバーシップテスト

in 演算子は、リスト(詳細は第 14 章で学びます)に対しても動作します。

python
# list_membership.py
# リストの中に値が存在するかをチェックする
numbers = [1, 2, 3, 4, 5]
 
has_three = 3 in numbers
print("List contains 3:", has_three)  # Output: List contains 3: True
 
has_ten = 10 in numbers
print("List contains 10:", has_ten)  # Output: List contains 10: False
 
# 'not in' の使用
missing_ten = 10 not in numbers
print("List does not contain 10:", missing_ten)  # Output: List does not contain 10: True
 
# 文字列のリストでも動作します
fruits = ["apple", "banana", "cherry"]
has_banana = "banana" in fruits
print("List contains 'banana':", has_banana)  # Output: List contains 'banana': True
 
has_grape = "grape" in fruits
print("List contains 'grape':", has_grape)  # Output: List contains 'grape': False

7.7.3) range でのメンバーシップテスト

range オブジェクト(第 12 章で学びます)に対しても in を使うことができます。

python
# range_membership.py
# 数値が range の中に含まれているかをチェックする
age = 25
 
# range と一緒に 'in' を使う
is_adult = age in range(18, 100)
print("Is adult:", is_adult)  # Output: Is adult: True
 
# ただし、数値の範囲には比較演算子の方が効率的です
is_adult = 18 <= age < 100
print("Is adult:", is_adult)  # Output: Is adult: True
 
# 特定のシーケンスに対しては range と 'in' が便利です
valid_ages = range(18, 66)  # 働く年齢の範囲
is_working_age = age in valid_ages
print("Is working age:", is_working_age)  # Output: Is working age: True

7.7.4) not in 演算子

not in 演算子は in の反対で、「値がコレクションの中に見つからなかったときに True を返す」ものです。

python
# not_in_operator.py
# より分かりやすいロジックのための 'not in' の使用
allowed_users = ["alice", "bob", "charlie"]
current_user = "eve"
 
# 'not in' を使う方が読みやすいです
is_unauthorized = current_user not in allowed_users
print("User is unauthorized:", is_unauthorized)  # Output: User is unauthorized: True
 
# 必須フィールドが欠けていないかをチェックする
provided_fields = ["name", "email"]
 
# 欠けているフィールドを調べる
missing_name = "name" not in provided_fields
missing_email = "email" not in provided_fields
missing_password = "password" not in provided_fields
 
print("Missing name:", missing_name)      # Output: Missing name: False
print("Missing email:", missing_email)    # Output: Missing email: False
print("Missing password:", missing_password)  # Output: Missing password: True

innot in 演算子を使うことで、条件式はより読みやすく、表現力豊かになります。複雑な比較を書く代わりに、「この値がこのコレクションの中にあるか?」という、頭の中で考えているのと同じ形で条件を表現できるようになります。


この章では、Python における真偽値と条件の基本を学びました。ここまでで次のことが理解できているはずです。

  • 意思決定における真偽値 TrueFalse の役割
  • 条件を作るための比較演算子(==!=<><=>=
  • 値を真偽値に変換するための bool() 関数
  • truthiness と falsiness ― Python がすべての値を真または偽として扱う仕組み
  • 読みやすい範囲チェックのための比較の連結
  • 真偽値を扱うときに避けるべきよくある落とし穴
  • 真偽値と整数の関係(そして真偽値を算術に使うべきでない理由)
  • innot in 演算子によるメンバーシップテスト

これらの概念は、この後の章で学ぶ制御フロー構造の土台になります。第 8 章では、if 文の中で真偽値の式を使い、プログラムが状況に応じて異なる振る舞いをするようにします。第 9 章では、andornot といった論理演算子を使って、複数の条件を組み合わせる方法を学びます。さらに第 10 章と第 11 章では、条件を使って、処理を繰り返すループを制御する方法を学びます。

真偽値と条件を理解することは、判断を行うプログラムを書くうえで不可欠です。たとえば入力値を検証したり、さまざまな状況に適切に応答したりするプログラムを書くことができるようになります。ここで学んだ概念を実際に手を動かして試してみれば、Python における意思決定は、自然で直感的なものに感じられるようになるでしょう。

© 2025. Primesoft Co., Ltd.
support@primesoft.ai