Menu
Coddy logo textTech

論理演算子 パート4

CoddyのPythonジャーニー「Fundamentals」セクションの一部 — レッスン 19/77。

論理式を扱う際、それらを簡略化したり再配置したりする必要がある場合があります。これは、複数の and および or 演算子を組み合わせた複雑な条件を扱う場合に特に役立ちます。

ド・モルガンの法則は、論理式を変形するための規則を提供します。これらの変換は、コードをより読みやすく、理解しやすくするのに役立ちます。

第一法則: not (A and B)(not A) or (not B) と同じです

not を式の中に分配すると、2つのことが起こることに注意してください:各オペランドが否定され (A は not A になり、B は not B になります)、そして演算子が反転します。つまり、andor になります。not は単に値を否定するだけでなく、それらの間の結合演算子も切り替えます。

例えば:

# 数値が(1から10の間)ではないか確認してみましょう
number = 15

# これら2つの式は等価です:
result1 = not (number >= 1 and number <= 10)
result2 = (not number >= 1) or (not number <= 10)

print(result1)  # True
print(result2)  # True

第二法則: not (A or B)(not A) and (not B) と同じです

ここでも同じ2ステップのルールが適用されます:各オペランドが否定され、演算子が反転します — 今回は orand になります。次のように考えてください:not を分配すると、各部分を否定しながら andor が常に反転します。

例えば:

# ある人が(学生でもなく、雇用もされていない)かどうかを確認する
is_student = False
is_employed = False

# これら2つの式は等価です:
result1 = not (is_student or is_employed)
result2 = (not is_student) and (not is_employed)

print(result1)  # True
print(result2)  # True

ANDとORの両方を使用した複雑な例: 時には、両方の演算子を組み合わせた条件が必要になることがあります。実用的な例を以下に示します。

# 求人応募を受け付けられないかどうかを確認する
# 却下条件: (経験なし AND 学位なし) OR 年齢要件を満たしていない

has_experience = False
has_degree = False
meets_age = True

# ANDとORの両方を使用した複雑な条件
reject_application = (not has_experience and not has_degree) or not meets_age

print(reject_application)  # True (経験なし AND 学位なしのため却下)
# これはド・モルガンの法則を使って書くこともできます:
# accept = (経験 または 学位) かつ 年齢条件を満たす; reject = not accept
accept_application = (has_experience or has_degree) and meets_age
reject_application2 = not accept_application

print(reject_application2)  # True (同じ結果、異なるロジック)

ド・モルガンの法則を使用する場面:

  • 否定条件を読みやすくするため
  • 複雑な論理式を簡略化するため
  • 同じ論理の異なる表現間で変換するため
challenge icon

チャレンジ

初心者

ペットショップが、顧客にペットを販売できるかどうかを判断するシステムを作成するのを手伝っています。

以下の変数を初期化してください:

  • has_license:値 True
  • has_space:値 True
  • has_experience:値 False

以下の条件を判断するための論理式を記述してください:

  • can_sell_regular_pet: 顧客がライセンス(license)または経験(experience)の「いずれか」を持っており、「かつ」スペース(space)がある場合に、通常のペットを販売できます。
  • can_sell_exotic_pet: 顧客がライセンス(license)と経験(experience)の「両方」を持っており、「かつ」スペース(space)がある場合に、エキゾチックアニマルを販売できます。
  • cannot_sell_any_pet: 顧客がライセンス(license)も経験(experience)も「持っていない」、またはスペース(space)が「ない」場合に、ショップはいかなるペットも販売「できません」。

指定された値での期待される結果:

  • can_sell_regular_pet: True (ライセンスとスペースがあるため)
  • can_sell_exotic_pet: False (経験がないため)
  • cannot_sell_any_pet: False (ライセンスとスペースの両方があるため)

チートシート

ド・モルガンの法則 — 論理式を変形するための規則:

  • not (A and B)(not A) or (not B)
  • not (A or B)(not A) and (not B)

not を分配するとき:各オペランド(被演算子)が否定され、演算子が反転します(andor)。

# 第1法則の例
result = not (number >= 1 and number <= 10)
result = (not number >= 1) or (not number <= 10)  # 同等

# 第2法則の例
result = not (is_student or is_employed)
result = (not is_student) and (not is_employed)  # 同等

自分で試してみよう

# 変数を初期化する

# 条件を計算する
can_sell_regular_pet = 
can_sell_exotic_pet = 
cannot_sell_any_pet =

# 以下の行を削除しないでください
print("Can sell regular pet:", can_sell_regular_pet)
print("Can sell exotic pet:", can_sell_exotic_pet)
print("Cannot sell any pet:", cannot_sell_any_pet)
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

Fundamentalsのすべてのレッスン