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