Menu
CoddyTech

論理演算子 パート4

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

論理式を扱う際、簡略化したり並べ替えたりする必要がある場合があります。これは、複数のand演算子とor演算子を組み合わせた複雑な条件を扱うときに特に役立ちます。

ド・モルガンの法則は、論理式を変換するための規則です。こうした変換によって、コードが読みやすく、理解しやすくなります。

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

式に not を分配すると、2つのことが起こることに注目してください。各オペランドが否定され(A は not A に、B は not B になる)、さらに演算子が反転します。つまり、and は or になります。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段階のルールが適用されます。各オペランドが否定され、演算子が反転します。今回はorがandになります。notを分配すると、各部分を否定しながら、常にand ↔ orが反転すると考えてください。

例:

# その人が(学生または就業者)ではないかどうかを確認する
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 の両方を使った複雑な例: 2つの演算子を組み合わせた条件が必要になることがあります。実用的な例を見てみましょう:

# 応募を受け付けられないかどうかを確認
# 不採用にする条件: (経験がない 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 (経験がなく、かつ学位もないため不採用)
# これはド・モルガンの法則を使って次のようにも書けます:
# accept = (experience OR degree) AND meets age; 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:顧客は、ライセンスまたは経験のいずれかがあり、かつスペースがある場合、一般的なペットを購入できます
  • can_sell_exotic_pet:顧客は、ライセンスと経験の両方があり、かつスペースがある場合、エキゾチックペットを購入できます
  • cannot_sell_any_pet:顧客にライセンスも経験もない、またはスペースがない場合、ショップはペットを一切販売できません

与えられた値での期待される結果:

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

自分で試してみよう

# 変数を初期化する

# 条件を計算する
# 以下の各仮の値を正しい論理式に置き換える
can_sell_regular_pet = False
can_sell_exotic_pet = False
cannot_sell_any_pet = False

# 以下の行を削除しないこと
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腕試し

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

基礎のすべてのレッスン

自分で練習してみよう: Pythonオンラインコンパイラ