Instrukcja warunkowa

https://docs.python.org/3/tutorial/controlflow.html

WPROWADZENIE

W Pythonie nie ma instrukcji switch czy case, ponieważ można je łatwo zastąpić serią testów if i elif. Można również wykorzystać słownik do symulacji wyborów. Python 3.10 wprowadził nową instrukcję 'match'.


# Porównanie C i Pythona.
if (x > y) {               /* ANSI C */
    x = 1;
    y = 2;
}

if x > y:                  # Python, nawiasy opcjonalne
    x = 1                 # bez klamerek, średników
    y = 2                 # obowiązkowe wcięcie kodu (4 spacje)

# Instrukcje złożone w Pythonie.
wiersz_nagłówka:              # obowiązkowy dwukropek
    zagnieżdżony_blok_instrukcji

# Przypadek specjalny - lepiej unikać.
# Przy instrukcjach prostych można zrezygnować z wcięcia.
# Może to być wygodne w trybie interaktywnym.
wiersz_nagłówka: instrukcja_prosta
if condition: simple_statement
if x > y: print(x)   # print(x) to instrukcja prosta w Py2 lub wyrażenie w Py3

# Zagnieżdżone bloki.
blok1
Wiersz nagłówka:
    blok2
    Wiersz nagłówka:
        blok3
    blok2 (kontynuacja)
blok1 (kontynuacja)

Koniec wiersza kończy instrukcję.

Koniec wcięcia to koniec bloku.

Konwencja: wcięcia (indentację) tworzymy wykorzystując tylko 4 spacje (PEP 8). Indentacja wymusza na programistach tworzenie jednolitego, regularnego i czytelnego kodu.

INSTRUKCJA WARUNKOWA IF-ELSE


# Składnia.
if test1:
    instrukcje
elif test2:                   # opcjonalne, może być więcej sekcji elif
    instrukcje
else:                         # opcjonalne (jeden raz), jeśli nic nie pasuje
    instrukcje

# Niech n będzie pewną liczbą całkowitą.
if n < 0:
    print("liczba ujemna!")
elif n % 2 == 0:              # sprawdzamy inną możliwość
    print("{} {}".format(n, "liczba parzysta"))
else:                         # to jest sekcja opcjonalna
    print("{} {}".format(n, "liczba nieparzysta"))

# Porównanie C i Pythona.
# W C else należy do ostatniego (najbliższego) if, ale generalnie
# dla uniknięcia pomyłki w rozumieniu lepiej wstawić nawiasy klamrowe.
# W Pythonie wcięcia decydują o logice.
if x:
    if y:
        instrukcja1
else:   # powiązane z 'if x'
    instrukcja2

# Zastosowanie słownika (nie korzystać na siłę).
# W zależności od wyboru użytkownika podstawiamy inne wartości.
adict = {"a":1, "b":2, "c":3}           # lista możliwości
choice = "b"
result = adict[choice]                  # zamiast if-elif
resutl = adict.get(choice, "Error")     # z zabezpieczeniem

WYRAŻENIE TRÓJARGUMENTOWE

Wyrażenie trójargumentowe if-else przypomina operator trójargumentowy z języka C [PEP 308].


if W:
    A = Y
else:
    A = Z
# Można to zapisać prościej (wyrażenie trójargumentowe).
A = Y if W else Z

a = 25 ; b = 30
pos_a = (-a) if a < 0 else a   # prościej użyć abs(a)
max_ab = b if a < b else a   # prościej użyć max(a, b)

# Zastosowanie do słowników.
# Ustawienie domyślnej wartości, jeżeli klucza nie ma.
value = D.get("x", 0)                   # klasycznie
value = D["x"] if "x" in D else 0       # if-else