PR

【Python】and・or・notとは?論理演算子を初心者向けに解説

unDraw準拠のデータ処理イラストを使ったPython論理演算子記事のアイキャッチ画像 Python

Pythonのandornotは、if文などの条件を組み合わせるための論理演算子です。

age >= 20のような条件が1つだけなら読みやすいですが、実際のコードでは『20歳以上かつ会員』『管理者または本人』『空でないとき』のように複数条件がよく出てきます。

andは『全部』、orは『どれか』、notは『反対』。最初はこの3つの日本語に置き換えると読みやすくなります。

この記事では、and・or・notの基本、if文での使い方、True/Falseの考え方、初心者がつまずきやすい条件式を順番に整理します。

スポンサーリンク

まず結論:andは全部、orはどれか、notは反対

Python公式ドキュメントでは、任意のオブジェクトは真偽値として判定でき、andornotはその真偽値を使う演算として説明されています。初心者の段階では、まず条件式を『TrueかFalseになる問い』として読みます。

andの使い方

andは、左右の条件がどちらも成り立つときにTrueとして扱います。

age = 25
has_ticket = True

if age >= 20 and has_ticket:
    print("入場できます")

この例では、age >= 20has_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では、TrueFalseだけでなく、空文字列、空リスト、0、Noneなども条件式の中でFalseとして扱われます。

条件での扱い読み方
""False文字が入っていない
[]False要素がない
0False数値として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のandorは、結果が決まった時点で残りの評価を省略することがあります。これを短絡評価と呼びます。

user = None

if user is not None and user.is_active:
    print("有効なユーザーです")

この例では、user is not NoneがFalseなら、右側のuser.is_activeは評価されません。Noneの値や型判定が曖昧な場合は、type関数とisinstance関数の記事も参考になります。

初心者がつまずきやすいポイント

つまずきまずこう理解する
andorを日本語で読まない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_adultcan_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は4パターンのうち両方TrueのときだけTrue
  • orは4パターンのうち少なくとも1つTrueならTrue
  • notはTrueをFalseへ、FalseをTrueへ反転する
  • 複雑な条件は小さい条件に名前を付けて確認する

実務コードで意識したいこと

条件式は、コンピュータが読めるだけでなく、人が後から読んでも意図が分かることが大切です。特に権限、料金、在庫、入力チェックのように間違えると影響が大きい条件では、andやorを詰め込まず、意味のある変数名や関数名に分ける方が安全です。

たとえばif user and user.is_active and user.has_paid:のような条件は短く書けますが、重要な判定ならcan_use_serviceのような名前に分けると、後から仕様を確認しやすくなります。

公式情報と関連して読みたい記事

まとめ

andornotは、条件式を組み立てるための基本です。

  • andは左右の条件が両方TrueならTrue
  • orはどちらか一方でもTrueならTrue
  • notは条件の結果を反転する
  • 複雑な条件は括弧や変数名で読みやすくする

論理演算子を読めるようになると、if文やwhile文の条件がかなり追いやすくなります。

タイトルとURLをコピーしました