Instrukcja if w Pythonie jest narzędziem do sterowania działaniem programu – sterowanie odbywa się na podstawie wyników testu, najczęściej testu logicznego lub testu prawdziwości. Instrukcje if należą do instrukcji złożonych, a więc takich, które zawierają inne instrukcje.
Instrukcja if służy do tworzenia logiki programu napisanego w Pythonie. Używamy jej do wybierania działania, jakie ma wykonać program. Instrukcje w programie są domyślnie wykonywane jedna po drugiej, lecz instrukcja if pozwala na wybór działania, które ma być wykonane.
Jak zbudowana jest instrukcja if?
Instrukcja warunkowa składa się z następujących elementów: testu if, jednego lub więcej testów elif oraz bloku else będącego blokiem końcowym. W tym zestawieniu jedynie test if nie jest opcjonalny, umieszczenie w instrukcji pozostałych elementów jest opcjonalne. Testy if oraz blok else składają się z zagnieżdżonych bloków instrukcji, które zawierają odpowiednią ilość wcięć w stosunku do poprzedzającego je wiersza. Jak działa instrukcja if „pod spodem”? Python wykona blok kodu, dla którego test if lub elif będzie prawdą, a jeśli wszystkie są fałszem, wówczas wykona blok else. Ogólny format wygląda następująco:
if test1:
instrukcja1
elif test2:
instrukcja2
else:
instrukcja3
Proste przykłady:
>>> if True:
... print('prawda')
...
prawda
>>>
>>> if False:
... print('fałsz')
... elif True:
... print('prawda')
...
prawda
Przykład pełnej instrukcji z if, elif oraz else, gdzie 0 zostanie zinterpretowane jako fałsz dla elif, a w instrukcji else nie wykorzystujemy żadnego warunku:
>>> if False:
... print('fałsz')
... elif 0:
... print('również fałsz')
... else:
... print('A to się wykona')
...
A to się wykona
Python wykonuje instrukcje znajdujące się pod pierwszym wierszem, który będzie prawdą, a jeśli żaden z nich nie jest prawdą, wówczas wykonuje instrukcje przypisane do else. W ten sposób konstrukcja-instrukcja if/elif zastępuje instrukcje switch lub case dostępną w innych językach programowania 😉

Tego typu instrukcję można zapisać w kodzie wykorzystującym wszystkie nagłówki typowe dla instrukcji wyboru, a więc if/elif/else:
>>> choice = 1
>>> if choice == 0:
... print('wybór to 0')
... elif choice == 1:
... print('wybór to 1')
... else:
... print('liczba inna niż 0 i 1')
...
wybór to 1
lub za pomocą indeksowania po kluczu w słowniku:
>>> print({1: 'wybór to jeden', 0: 'wybór to 0'}[choice])
wybór to jeden
Jeśli chcemy odzwierciedlić zachowanie klauzuli else za pomocą indeksowania słownika, można skorzystać z metody get(), która podaje wartość domyślną, gdy żaden kluczy ze słownika nie pasuje:
>>> my_dict = {1: 'wybór to jeden', 0: 'wybór to 0'}
>>> print(my_dict.get(choice, 'liczba inna niż 0 i 1'))
wybór to jeden
Testy prawdziwości i testy logiczne w Pythonie – jak ich używać?
Instrukcja if jest instrukcją, która w największej mierze wykorzystuje testy logiczne oraz testy prawdziwości. Żeby poprawnie ich używać, należy zapoznać się z zasadami tego, jak interpretowana jest prawda i fałsz w Pythonie. Reguły są następujące:
- wszystkie obiekty mają przypisaną wartość logiczną będącą prawdą lub fałszem,
- wszystkie liczby oprócz zera, a także obiekty, które nie są puste, są uznawane za prawdę,
- wartość logiczna zera, pustego obiektu oraz None to fałsz,
- porównania oraz testy wartości zwracają wartości True i False, których odpowiedniki to liczby 1 i 0,
- dla struktur danych porównania i testów równości są wykonywane za pomocą rekurencji,
- operatory logiczne and i or zwracają obiekty interpretowane jako prawda lub fałsz.
Ze względu na to, że każdy obiekt w Pythonie jest interpretowany jako fałsz lub prawda, możemy testować je bezpośrednio, a więc w formie if x: …, a nie if x = True: …
Analiza skrótowa obiektów
Dotychczas do sprawdzania prawdziwości danego warunku wykorzystywaliśmy jedynie instrukcję if. Python oferuje jednak bardziej złożone narzędzia, czyli operatory typu boolean: and, or, not. Wyniki działań wykorzystujących operatory logiczne są zakańczone od razu wtedy, gdy znany jest wynik wyrażenia.
X and Y
Wyrażenie jest prawdziwe, gdy oba elementy są prawdziwe.
X or Y
Wyrażenie jest prawdziwe, kiedy przynajmniej jeden element jest prawdziwy.
not X
Wyrażenie jest prawdziwe, gdy X jest fałszem.
Przykład w kodzie:
>>> bool(1 and 0)
False
>>> bool(1 or 0)
True
>>> bool(not 0)
True
X oraz Y mogą mieć przypisaną wartość logiczną lub być wyrażeniem, które taką wartość logiczną zwraca:
>>> (2 < 3) < (3 < 2)
False
Należy jednak pamiętać, że w przypadku porównywania wartości logicznych, a nie wyrażeń, operator nie zwraca wartości True lub False, ale jeden z obiektów. W przypadku operatora or zwracany jest pierwszy element będący prawdą.
>>> 1 or 2
1
>>> 2 or 1
2
Jeśli oba elementy są interpretowane jako fałsz, wówczas zwracany jest drugi obiekt:
>>> 0 or []
[]
Dzieje się tak ponieważ w przypadku instrukcji or ustalenie wyniku jest możliwe już po tym, gdy pierwszy wynik jest prawdą. Odwrotnie jest z kolei w przypadku instrukcji and, gdzie zwracany jest drugi wynik w przypadku operacji zwracającej prawdę lub pierwszy wynik, gdy operacja zwraca fałsz.
>>> 1 and 2, 2 and 1
(2, 1)
>>> 0 and ()
0
Operacjae ogiczne w Pythonie zwracają zatem obiekty, a nie liczbową reprezentacją prawdy lub fałszu. Wyrażenia logiczne są oczywiście stosowane w instrukcji if, ale również while.
Wyrażenie trójargumentowe if/else
Wyrażenia trójargumentowe można skrócić do formy if/else, jeśli instrukcja jest na tyle prosta. Przypatrzmy się poniższemu przykładowi:
>>> if a:
... x = 10
... else:
... x = 5
...
>>> x
5
Instrukcja if jest w tym przypadku na tyle prosta, że można zapisać ją za pomocą jednego wiersza:
>>> x = 10 if a else 5
>>> x
5
Jest to często stosowany skrót, jednak należy wykorzystywać go tylko wtedy, gdy instrukcja if nie jest zagnieżdżona. Trójargumentowe polecenie if przyjmuje zatem następującą formę:
A = Y if X else Z
Zwracanie pierwszego niepustego elementu – analiza skrótowa obiektów
Operatory logiczne są wykorzystywane również do wykonywania takich czynności jak wybór pierwszego niepustego, a więc będącego prawdą elementu w danym zbiorze. Ogólna postać taki instrukcji wygląda następująco:
X = A or B or C or None
Instrukcja zwraca pierwszy obiekt, który zostanie zinterpretowany jako prawda, jeśli nie znajdzie takiego obiektu, wówczas zwraca None.
>>> A = 0
>>> B = []
>>> C = 1
>>> X = A or B or C or None
>>> X
1
Należy być świadomym tego zachowania zwłaszcza wtedy, gdy w nagłówku instrukcji if wykorzystuje się wyniki zwracane przez funkcję. W poniższym przykładzie, jeśli pierwsza funkcja zwraca wynik interpretowany jako prawda (czyli True, niepusty obiekt lub liczbę inną niż 0 – jeśli funkcja kończy się użyciem funkcji print, to zwraca None), wówczas nie dojdzie do wykonania drugiej funkcji.
if func1() or func2(): pass
W następnym wpisie zajmiemy się pętlami w Pythonie 🙂
Dodaj komentarz
Musisz się zalogować, aby móc dodać komentarz.