Menu
Coddy logo textTech

論理演算子 パート4

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

論理式を扱うとき、場合によってはそれらを簡略化したり並べ替えたりする必要があります。これは、複数の and 演算子と or 演算子を組み合わせた複雑な conditions を扱う場合に特に便利です。

De Morgan's Laws は、logical expressions を変換するためのルールです。これらの変換により、コードがより読みやすく、理解しやすくなります。

First Law: not (A and B)(not A) or (not B) と同じです

式に not を分配すると、2つのことが起こることに注目してください。each オペランドが否定される(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の両方を使うComplexな例: 場合によっては、両方の演算子を組み合わせたconditionsが必要になります。実践的なexampleを見てみましょう:

# 求人応募を受け付けられないかどうかを確認する
# 次の場合に却下する: (経験なし 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 = (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 (同じ結果、異なるロジック)

De Morgan's Laws を使用する場合:

  • negative conditions を読みやすくするため
  • 複雑な logical expressions を単純化するため
  • 同じ logic の different な表現の between で変換するため
challenge icon

チャレンジ

初心者

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

次の変数をInitializeしてください:

  • has_license に値 Trueを設定
  • has_space に値 Trueを設定
  • has_experience に値 Falseを設定

次の条件を判定するlogical expressionsを書いてください:

  • can_sell_regular_pet: 顧客が許可証またはexperienceのいずれかを持っており、かつ空きがある場合、regular petを購入できます
  • can_sell_exotic_pet: 顧客が許可証とexperienceの両方を持っており、かつ空きがある場合、exotic petを購入できます
  • cannot_sell_any_pet: 顧客が許可証を持たず、かつexperienceもなく、または空きがない場合、店はどのpetも販売できません

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

  • can_sell_regular_pet: True(許可証と空きがある)
  • can_sell_exotic_pet: False(experienceがない)
  • 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オンラインコンパイラ