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) # TrueDrugie 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) # TrueZł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
Wyzwanie
PoczątkującyPomagasz sklepowi zoologicznemu stworzyć system, który określi, czy może sprzedać zwierzę klientowi.
Zainicjuj następujące zmienne:
has_licensez wartościąTruehas_spacez wartościąTruehas_experiencez 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ć miejscecan_sell_exotic_pet: Klient może kupić egzotyczne zwierzę, jeśli ma licencję ORAZ doświadczenie, ORAZ musi mieć miejscecannot_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)Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Podstawy
4Operatory, część 2
Operatory logiczne, część 1Operatory logiczne, część 2Powtórka – podstawy logikiOperatory logiczne, część 3Operatory logiczne, część 47Kalkulator podziału rachunku
Wiadomość powitalnaPobieranie danych10FizzBuzz z niespodzianką
Omówienie gryFunkcja FizzBuzz13Listy — zagadnienia zaawansowane
Wycinanie list — część 1Wycinanie list — część 2Operatory sekwencjiPrzynależność2Zmienne
LiczbyCiąg znakówWartość logicznaKonwencje nazewnictwaPuste zmiennePodsumowanie — inicjalizacja zmiennych8Pętle
Pętla forPętla whilePrzerwijKontynuujPowtórka – silniaFunkcja rangePętla zagnieżdżonaPowtórka – dane wejściowe dynamiczne3Operatory, część 1
Operatory arytmetyczneOperator moduloSkróty arytmetycznePowtórka — prosta matematykaOperatory porównania6Podstawowe wejście i wyjście
WyjścieWyjście ze zmiennymiWejścieKonwersja typówPowtórka — do 120Powtórka — prawda czy fałsz9Funkcje
Deklarowanie funkcjiArgumentyWartość zwracanaPowtórka — funkcja SigmaPowtórka — funkcja walidującaWartości domyślnePoćwicz samodzielnie: Kompilator Python online