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»
, instrukcjaelse
wykonywana jest tylko wtedy, gdyC
jest false - można łączyć warunki logiczne za pomocą
A and B
,A or B
inot 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
.
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 blokPython 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.
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 prawdziwyJak 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?
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śliA
jest prawdziwe iB
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śliA
jest prawdziwe lubB
jest prawdziwe, a fałszywe jeśli oba są fałszywe. (np. szkoła jest zamknięta, jeśli jest to świętoor
jest weekendem.) - Wyrażenie
not A
jest prawdziwe, jeśliA
jest fałszywe, a fałszywe, jeśliA
jest prawdziwe. (np. jesteś głodny, jeślinie
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.
Oto przykład użycia and
, tutaj jest przykład programu, który konwertuje liczby na litery z pewną kontrolą sprawdzania błędów.
A or B
?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 BTen 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.
A or not B and Cjesli (A, B, C) = (False, True, True)? Wskazówka
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ę.