9: Else, And, Or, Not

W tej lekcji nauczysz się elegancko wykonywać skomplikowane testy logiczne przy użyciu dwóch nowych elementów języka Python.

  • po instrukcji if «C», instrukcja else wykonywana jest tylko wtedy, gdy C jest false
  • można łączyć warunki logiczne za pomocą A and B, A or Bnot A

else

Częstym zadaniem podczas pisania programów jest przetestowanie pewnego warunku i w zależności od tego, czy warunek jest prawdziwy, czy fałszywy zrealizowanie jednej akcji lub innej. Wcześniej, w ćwiczeniu poprosiliśmy cię, że jeśli zmienna age jest mniejsza od 0, to ma być wydrukowany pewien tekst, a inny, jeśli zmienna age jest większa lub równa 0; kod był podobny do poniższego.

if age >= 0:  
  print('Niekoniecznie jesteście podróżnikiem w czasie')
if age < 0:
  print('Jesteś podróżnikiem w czasie')
Zastanówmy się teraz nad użyciem else.

Przykład
 
Możesz wprowadzić dane dla programu w poniższym polu.

Uogólniając, używasz else poprzez stosowanie pary instrukcji blokowych:

if «test»:
   «true-body»        # wcięty blok 
else:
   «false-body»       # jeszcze jeden wcięty blok
Python bada test. Jeśli jest true to wykonywane jest the true-body, jeśli jest false to wykonywane jest the false-body.

Filozofia else

Z else nie otrzymujemy nowych możliwości, ale użycie go, czyni kod łatwiejszym do odczytu, debugowania i konserwacji. Oto dwa fragmenty kodu, które wykonują to samo:

Wersja A
if height < 256:
   print('Zbyt krótki do tej jazdy')
else:
   print('Witamy na pokładzie!')
Wersja B
if height < 256:
   print('Zbyt krótki do tej jazdy')
if height >= 256:
   print('Witamy na pokładzie!')

Zrobienie tych samych obu rzeczy w wersji B wcale nie wymagało użycia else. Jednak większość programistów zgodzi się, że wersja A jest lepsza. Na przykład w przypadku A, zmiana warunku (np. 128 zamiast 256) wymaga tylko jednej zmiany jednej części kodu zamiast dwóch. Również A może być natychmiast zrozumiane przez czytelnika, podczas gdy w w wersji B trzeba sprawdzić i zastanowić się, czy oba te warunki są prawdziwe.

Zadanie na kodowanie : Wartość Bezwzględna
Wartość bezwzględna liczby jest zdefiniowana w następujący sposób. Dla liczby x, która jest dodatnia lub zero, wartością bezwzględną x jest x. W przeciwnym razie, gdy x jest liczbą ujemną, wartość bezwzględna x to -x, czyli innymi słowami, taka sama jak x, ale bez znaku minus. Na przykład wartość bezwzględna 5 wynosi 5, a wartość bezwzględna -10 wynosi 10. Używając if i else, napisz program, który odczytuje liczbę całkowitą jako dane wejściowe, i drukuje jej wartość bezwzględną.
Możesz wprowadzić dane dla programu w poniższym polu.

Python ma wbudowaną funkcję abs(x) obliczającą wartość bezwzględną x. Nasz automatyczny tester daje możliwość korzystania z niej, ale my zrobimy to później.

elif

Python wprowadza jeszcze jedno słowo kluczowe elif, aby ułatwić sprawdzenie kilku warunków z rzędu. Najbardziej podstawową formą elif jest:

if «test1»:
   «body1»        # uruchomione, jeśli test1 jest prawdziwy
elif «test2»:
   «body2»        # uruchomione, jeśli test1 jest fałszywy i test2 jest prawdziwy
Jak pewnie się domyślacie, elif jest skrótem od "else if", ponieważ jest taki sam jak umieszczanie kolejnej instrukcji if wewnątrz innego bloku. Ale prowadzi do krótszego kodu i ma mniej wcięć, co ułatwia czytanie, debugowanie i edytowanie programu. Co więcej, możesz połączyć dowolną liczbę wypowiedzi elif z rzędu i nawet dodać opcjonalne na końcu else:

if «test1»:
   «body1»      # uruchomione, jeśli test1 jest prawdziwy
elif «test2»:
   «body2»      # uruchomione, jeśli test1 fałszywy i test2 jest prawdziwy
elif «test3»:
   «body3»      # uruchomione, jeśli test1 & test2 są oba fałszywe i test3 jest prawdziwy
else:           # te ostatnie dwie linie są opcjonalne
   «else-body»  # uruchomione, jeśli WSZYSTKIE testy są fałszywe
 

Oto przykład elif użytego wewnątrz pętli. Czy możesz przewidzieć jakie będzie wyjście przed uruchomieniem?

Zadanie na kodowanie : First, Second, Third
Kolejne przymiotniki porządkowe w języku angielskim to: 1st, 2nd, 3rd, 4th, 5th, 6th, 7th, 8th, 9th. Napisz program, który odczytuje liczbę całkowitą x od 1 do 9. Następnie wyprowadza przymiotnik porządkowy odpowiadający x.
Wskazówka: nie potrzebujesz 9 osobnych przypadków; wystarczą 4.
Możesz wprowadzić dane dla programu w poniższym polu.

Operatory Logiczne: and, or, not

Można łączyć wyrażenia logiczne za pomocą "and", "or" i "not", które są takie same jak w języku angielskim.

  • Wyrażenie A and B jest prawdziwe, jeśli A jest prawdziwe i B jest prawdziwe, a fałsze, jeśli jedno z nich jest fałszywe. (np. zmokniesz jeśli będzie padać and zapomnisz parasola)
  • Wyrażenie A or B jest prawdziwe, jeśli A jest prawdziwe lub B jest prawdziwe, a fałszywe jeśli oba są fałszywe. (np. szkoła jest zamknięta, jeśli jest to święto or jest weekendem.)
  • Wyrażenie not A jest prawdziwe, jeśli A jest fałszywe, a fałszywe, jeśli A jest prawdziwe. (np. jesteś głodny, jeśli nie jadłeś lunchu.)

Oto program, który automatycznie wyświetla wszystkie możliwości. Podobnie jak 'tabliczka mnożenia', którą pamiętasz ze szkoły, tą nazywamy tabelą prawdy.

Przykład
Tabela prawdy

Oto przykład użycia and, tutaj jest przykład programu, który konwertuje liczby na litery z pewną kontrolą sprawdzania błędów.

Przykład
Przykład z and konwertuje liczby na litery w następujący sposób: 1=A, 2=B, etc.
Możesz wprowadzić dane dla programu w poniższym polu.

Zadanie na kodowanie : 26 Liter
Napisz program, który wykonuje odwrócenie powyższego przykładu: na wejściu powinien odczytywać literę a wyprowadzać odpowiadającą jej liczbę (pomiędzy 1 a 26). Twój program powinien akceptować tylko duże litery. Jeśli wejście nie jest wielką literą powinien wydrukować invalid (nieprawidłowy). WskazówkaAlternatywna metoda porównywania łańcuchów
Możesz wprowadzić dane dla programu w poniższym polu.

Zadanie wielokrotnego wyboru: Prawo De Morgana
Które z następujących wyrażeń jest równoważne z A or B?
Bardzo dobrze! Oto jeden ze sposobów uzyskania odpowiedzi. Po pierwsze, not (A or B) jest tylko wtedy prawdziwe, gdy oba A i B są fałszywe. Należy również pamiętać, że (not A) and (not B) jest tylko wtedy prawdziwe, gdy oba not A i not B są prawdziwe, tzn. jeśli oba A i B są fałszywe. Mamy więc następujące równości:
(not A) and (not B) = not (A or B)
Umieszczając not po obu stronach, możemy wnioskować
not ((not A) and (not B)) = not (not (A or B))
zauważamy, że not(not X)) zawsze równe jest X, więc
not ((not A) and (not B)) = not (not (A or B)) = A or B
Ten sposób zapisywania wyrażeń boolowskich jest jednym z praw De Morgana.

Operatory typu Boolean mają "porządek operacji" podobnie jak operatorzy matematyki. Kolejność jest
NAO: nie (najwyższy priorytet) i, lub (najniższy priorytet)
Więc na przykład,
Nie x lub y i z oznacza (nie x) lub (y i z)
Podsumowując lekcję z krótkim pytaniem wykorzystujemy te fakty.

Kolejność Operacji

"Kolejność operacji" boolowskich jest podobna do kolejności operacji matematycznych. Kolejność jest następująca

NAO: not (najwyższy priorytet), and, or (najniższy priorytet)

zatem, przykład

not x or y and z oznacza (not x) or (y and z)

Podsumowujemy tą lekcję krótkim pytaniem wykorzystującym te fakty.

Zadanie wielokrotnego wyboru: Kolejność Operacji
Jaka jest wartość:

A or not B and C
jesli (A, B, C) = (False, True, True)? Wskazówka
Bardzo dobrze! Kolejność operacji jest jednakowa dla
A or ((not B) and C)
zastępując wartościami, otrzymujemy
False or ((not True) and True)
i teraz upraszczając otrzymujemy
False or ((not True) and True)
= False or (False and True)
= False or False
= False

Po zakończeniu tego zadania jesteś gotowy na następną lekcję.