Menu
Coddy logo textTech

Operatory logiczne, część 4

Część sekcji Podstawy ścieżki Python w Coddy. Lekcja 19 z 77.

Podczas pracy z wyrażeniami logicznymi czasami musimy je uprościć lub zmienić ich kolejność. Jest to szczególnie przydatne podczas pracy ze złożonymi warunkami, które łączą wiele operatorów and i or.

Prawa de Morgana określają zasady przekształcania wyrażeń logicznych. Dzięki tym przekształceniom kod jest bardziej czytelny i łatwiejszy do zrozumienia.

Pierwsze prawo: not (A and B) jest tym samym co (not A) or (not B)

Zwróć uwagę na dwie rzeczy, które dzieją się, gdy rozdzielasz not w wyrażeniu: każdy operand zostaje zanegowany (A staje się not A, B staje się not B), a operator się zmienia: and staje się or. not nie tylko neguje wartości, ale także zmienia łączący je operator.

Na przykład:

# Sprawdźmy, czy liczba NIE jest (między 1 a 10)
number = 15
# Te dwa wyrażenia są równoważne:
result1 = not (number >= 1 and number <= 10)
result2 = (not number >= 1) or (not number <= 10)
print(result1)  # True
print(result2)  # True

Drugie prawo: not (A or B) jest tym samym co (not A) and (not B)

Obowiązuje tu ta sama zasada dwóch kroków: każdy operand zostaje zanegowany, a operator zmienia się na przeciwny. Tym razem or zmienia się w and. Pomyśl o tym tak: rozdzielanie not zawsze zamienia and ↔ or, jednocześnie negując każdą część.

Na przykład:

# Sprawdzanie, czy osoba NIE jest (studentem ani osobą zatrudnioną)
is_student = False
is_employed = False
# Te dwa wyrażenia są równoważne:
result1 = not (is_student or is_employed)
result2 = (not is_student) and (not is_employed)
print(result1)  # True
print(result2)  # True

Złożony przykład z operatorami AND i OR: Czasami potrzebujesz warunków łączących oba operatory. Oto praktyczny przykład:

# Sprawdzamy, czy NIE MOŻEMY przyjąć podania o pracę
# Odrzucamy, jeśli: (brak doświadczenia AND brak dyplomu) OR niespełniony jest wymóg wieku
has_experience = False
has_degree = False
meets_age = True
# Złożony warunek wykorzystujący zarówno AND, jak i OR
reject_application = (not has_experience and not has_degree) or not meets_age
print(reject_application)  # True (odrzucono z powodu braku doświadczenia AND braku dyplomu)
# Można to również zapisać, korzystając z praw de Morgana:
# accept = (experience OR degree) AND spełnia wymóg wieku; reject = not accept
accept_application = (has_experience or has_degree) and meets_age
reject_application2 = not accept_application
print(reject_application2)  # True (ten sam wynik, inna logika)

Kiedy stosować prawa de Morgana:

  • Aby ułatwić odczytywanie warunków negatywnych
  • Aby uprościć złożone wyrażenia logiczne
  • Aby przekształcać różne reprezentacje tej samej logiki
challenge icon

Wyzwanie

Początkujący

Pomagasz sklepowi zoologicznemu stworzyć system, który określi, czy może sprzedać zwierzę klientowi.

Zainicjuj następujące zmienne:

  • has_license z wartością True
  • has_space z wartością True
  • has_experience z wartością False

Napisz wyrażenia logiczne, aby określić, czy:

  • can_sell_regular_pet: Klient może kupić zwykłe zwierzę, jeśli ma licencję LUB doświadczenie ORAZ musi mieć miejsce
  • can_sell_exotic_pet: Klient może kupić egzotyczne zwierzę, jeśli ma licencję ORAZ doświadczenie, ORAZ musi mieć miejsce
  • cannot_sell_any_pet: Sklep NIE MOŻE sprzedać żadnego zwierzęcia, jeśli klient NIE ma licencji ORAZ NIE ma doświadczenia LUB NIE ma miejsca

Oczekiwane wyniki dla podanych wartości:

  • can_sell_regular_pet: True (ma licencję i miejsce)
  • can_sell_exotic_pet: False (brak doświadczenia)
  • cannot_sell_any_pet: False (ma licencję i miejsce)

Spróbuj swoich sił

# Zainicjalizuj zmienne

# Oblicz warunki
# Zastąp każdą wartość zastępczą poniżej poprawnym wyrażeniem logicznym
can_sell_regular_pet = False
can_sell_exotic_pet = False
cannot_sell_any_pet = False

# Nie usuwaj poniższych wierszy
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 iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Podstawy

Poćwicz samodzielnie: Kompilator Python online