Pythonのand・or・notは、if文などの条件を組み合わせるための論理演算子です。
age >= 20のような条件が1つだけなら読みやすいですが、実際のコードでは『20歳以上かつ会員』『管理者または本人』『空でないとき』のように複数条件がよく出てきます。

andは『全部』、orは『どれか』、notは『反対』。最初はこの3つの日本語に置き換えると読みやすくなります。
この記事では、and・or・notの基本、if文での使い方、True/Falseの考え方、初心者がつまずきやすい条件式を順番に整理します。
まず結論:andは全部、orはどれか、notは反対
Python公式ドキュメントでは、任意のオブジェクトは真偽値として判定でき、and・or・notはその真偽値を使う演算として説明されています。初心者の段階では、まず条件式を『TrueかFalseになる問い』として読みます。
andの使い方
andは、左右の条件がどちらも成り立つときにTrueとして扱います。
age = 25
has_ticket = True
if age >= 20 and has_ticket:
print("入場できます")
この例では、age >= 20とhas_ticketの両方がTrueなので、if文の中が実行されます。比較演算子の基本が不安な場合は、Pythonの比較演算子も確認してください。
orの使い方
orは、左右の条件のどちらか一方でも成り立てばTrueとして扱います。
is_admin = False
is_owner = True
if is_admin or is_owner:
print("編集できます")
この例では、管理者ではなくても本人であれば編集できます。条件を日本語で『管理者または本人なら』と読めると、コードの意味を追いやすくなります。
notの使い方
notは、条件の結果を反転します。TrueならFalse、FalseならTrueとして扱います。
name = ""
if not name:
print("名前を入力してください")
空文字列は条件式の中でFalseとして扱われます。そのため、not nameは『名前が空なら』という意味で読めます。
True/Falseだけでなく空文字や空リストも関係する
Pythonでは、TrueやFalseだけでなく、空文字列、空リスト、0、Noneなども条件式の中でFalseとして扱われます。
| 値 | 条件での扱い | 読み方 |
|---|---|---|
"" | False | 文字が入っていない |
[] | False | 要素がない |
0 | False | 数値として0 |
"Python" | True | 文字が入っている |
この考え方は、while文やリスト処理でもよく出てきます。繰り返し条件の読み方はPythonのwhile文と合わせて理解するとつながります。
複数条件は括弧で読みやすくする
andとorが混ざると、どこまでが1つの条件なのか分かりにくくなります。初心者のうちは、必要に応じて括弧を使い、読む単位を明確にするのがおすすめです。
age = 18
has_parent_permission = True
has_ticket = True
if (age >= 20 or has_parent_permission) and has_ticket:
print("入場できます")
この条件は『20歳以上または保護者の許可があり、かつチケットがある』と読みます。括弧があると、先に読むまとまりが見えます。
短絡評価をざっくり理解する
Pythonのandやorは、結果が決まった時点で残りの評価を省略することがあります。これを短絡評価と呼びます。
user = None
if user is not None and user.is_active:
print("有効なユーザーです")
この例では、user is not NoneがFalseなら、右側のuser.is_activeは評価されません。Noneの値や型判定が曖昧な場合は、type関数とisinstance関数の記事も参考になります。
初心者がつまずきやすいポイント
| つまずき | まずこう理解する |
|---|---|
andとorを日本語で読まない | andは『かつ』、orは『または』で読む |
notの範囲が分からない | notの直後の条件を反転すると考える |
| 空文字や空リストをTrueだと思う | 中身が空ならFalseとして扱われる |
| 複雑な条件を1行に詰める | 括弧や変数名で意味を分ける |
条件を変数に分けると読みやすい
複雑な条件は、無理に1行で書くより、意味のある変数名に分けると読みやすくなります。
age = 22
has_ticket = True
is_member = False
is_adult = age >= 20
can_enter = is_adult and has_ticket
can_discount = is_member or age < 18
if can_enter:
print("入場できます")
is_adultやcan_enterのような名前を付けると、条件式を日本語に近い形で読めます。特にandとorが混ざる場合は、変数に分けるだけで読み間違いを減らせます。
よくある書き間違い
初心者がよく書いてしまうのが、1つの変数に対して複数の値を比べるときの書き方です。
# 意図が伝わりにくい例
if answer == "yes" or "y":
print("続けます")
# それぞれ比較する
if answer == "yes" or answer == "y":
print("続けます")
# または in を使う
if answer in ["yes", "y"]:
print("続けます")
orの左右には、それぞれ条件式を書きます。単に文字列だけを書くと、その文字列自体がTrueとして扱われるため、意図しない結果になりやすいです。
notを使いすぎない
notは便利ですが、否定が重なると読みにくくなります。
is_empty = len(items) == 0
if is_empty:
print("データがありません")
if not is_empty:
print("データがあります")
否定が読みにくいと感じたら、変数名を変えるのも手です。not is_emptyよりhas_itemsの方が自然に読める場面もあります。条件式は、短さよりも読み間違いにくさを優先しましょう。
練習するときの見方
and・or・notは、表を書いて確認すると身につきやすいです。左右の条件がTrueかFalseかを変えながら、最終結果がどう変わるかを見ます。
実務コードで意識したいこと
条件式は、コンピュータが読めるだけでなく、人が後から読んでも意図が分かることが大切です。特に権限、料金、在庫、入力チェックのように間違えると影響が大きい条件では、andやorを詰め込まず、意味のある変数名や関数名に分ける方が安全です。
たとえばif user and user.is_active and user.has_paid:のような条件は短く書けますが、重要な判定ならcan_use_serviceのような名前に分けると、後から仕様を確認しやすくなります。
公式情報と関連して読みたい記事
- Python公式ドキュメント: Truth Value Testing
- Python公式ドキュメント: Boolean Operations
- Pythonのif文
- Pythonの比較演算子
- Pythonのwhile文
まとめ
and・or・notは、条件式を組み立てるための基本です。
論理演算子を読めるようになると、if文やwhile文の条件がかなり追いやすくなります。
