https://docs.python.org/3/tutorial/controlflow.html
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.
# 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 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