6. Instrukcje warunkowe - majsylw/Introduction-to-programming-in-python GitHub Wiki

W programie często musimy obsłużyć następujący scenariusz: wykonać kod, ale tylko pod jakimś warunkiem, w przeciwnym wypadku albo nie robić nic, albo wręcz wykonać zupełnie odmienny kod. W tym celu stworzono instrukcje warunkowe.

Instrukcja warunkowa if

W języku python instrukcja warunkowa ma postać:

if warunek:
    instrukcja1
    instrukcja2
    ...

Warunek występuje bezpośrednio po instrukcji sterującej if i nie jest zamknięty w okrągłych nawiasach (w przeciwności do większości języków programowania), po nim następuje znak :. W pythonie instrukcje znajdujące się w instrukcji warunkowej są wcięte, jak już wspominałam o tym w przypadku pierwszej lekcji. Oczywiście tworząc warunek możemy korzystać ze wszystkich dobrodziejstw jakie stwarzają operatory porównania oraz logiczne, które przedstawiłam w przypadku wcześniejszych lekcji.

Zobaczmy tę konstrukcję na prostym przykładzie:

wiek = 37
if wiek >= 18:
    print("W Polsce ta osoba jest pełnoletnia!")
## W Polsce ta osoba jest pełnoletnia!

Sprawdźmy jeszcze co się stanie, gdy warunek nie zostanie spełniony:

wiek = 10
if wiek >= 18:
    print("W Polsce ta osoba jest pełnoletnia!")
## Nie zostanie wypisane nic

Instukcja if...else

Co, gdy chcemy wykonać pewien kod, gdy warunek nie jest spełniony? Wtedy z pomocą przychodzi nam słowo kluczowe else:

if warunek:
    instrukcja1
    instrukcja2
else: # kod poniżej wykona się, gdy warunek nie będzie spełniony
    instrukcja3
    instrukcja4

Teraz możemy rozbudować nasz wcześniejszy program:

wiek = 15
if wiek >= 18:
    print("W Polsce osoba jest pełnoletnia!")
else:
    print("W Polsce osoba jest niepełnoletnia!")
## W Polsce osoba jest niepełnoletnia!

Instrukcja if...elif..else

Jednak to jeszcze nie koniec! W języku Python, w przeciwności do innych języków programowania, istnieje specjalna konstrukcja, gdy chcemy obsługiwać więcej, niż 3 przypadki:

if warunek:
    instrukcja1
    instrukcja2
elif warunek2: # gdy warunek nieprawdziwy, sprawdz warunek2
    instrukcja3
    instrukcja4
elif warunek3: #gdy warunek2 nieprawdziwy, sprawdz warunek3
    instrukcja5
    instrukcja6
else: #gdy zaden z warunkow nie byl prawdziwy
    instrukcja7
    instrukcja8

Rozbudujmy jeszcze bardziej nasz przykład:

wiek = 15
if wiek >= 18:
    print("Ta osoba może pić alkohol.")
elif wiek >= 14:
    print("Ta osoba może wyrobi prawo jazdy kategorii AM.")
else:
    print("Owa osoba nie może pić alkoholu ani wyrobić prawa jazdy kategorii AM")
## Ta osoba może wyrobi prawo jazdy kategorii AM.

Operator warunkowy w Pythonie

Jeśli nie jest to twoja pierwsza styczność z programowaniem może spotkałeś się już z jednolinijkowym trójargumentowym operatorem warunkowym, powszechnie znanym w języku C/C++, którego składnia jest następująca:

zmienna = warunek ? wyrażenie1 : wyrażenie2;
// daje taki sam rezultat, co
if (warunek)
    zmienna = wyrażenie1
else
    zmienna = wyrażenie2;

W języku Python też istnieje taka konstrukcja, jednak bardziej naśladuje ona język naturalny i prezentuje się tak:

wyrażenie1 if warunek else wyrażenie2
# Przykład
i = 5 if 9 > 4 else 12 
print(i) # zmienna i przyjmie wartość 5, gdyż 9 jest większe od 4, czyli warunek jest prawdziwy

Operatory is oraz in

Za pomocą operatora in możesz sprawdzić, czy konkretny obiekt znajduje sie w tablicy lub innym obiekcie gromadzącym inne obiekty, np:

imie = "jabłko"
if imie in ["jabłko", "banan"]:
    print("W koszyku masz jabłko lub banana.")

Operator is, w przeciwieństwie do operatora ==, nie sprawdza, czy zmienne mają taką samą wartość, ale czy wskazują na ten sam obszar w pamięci komputera. Przykładowo:

x = [1,2,3]
y = [1,2,3]
print x == y # Wypisze True
print x is y # Wypisze False

tablica = [1, 2, 3]
tablica2 = ['a', 'b', tablica]
print tablica == tablica2[2] # True
print tablica is tablica2[2] # True

# Ponizej dowod na to, ze is mowi prawde
tablica.append(4) # Dodajemy do tablicy liczbe 4
print tablica2[2] # wypisze [1, 2, 3, 4]

Ponieważ tablica i tablica2 odnoszą się do tego samego obiektu, zmiana jednej oznacza zmianę drugiej. Niestety istnieje w tym miejscu duże ryzyko pomyłki. Stosując proste podstawienie tablica traci kontakt ze starszym obiektem i zapisuje na jego miejscu całkiem nowy i niezależny.