Decyzja zapisana prawie jak zdanie
if to pierwsze narzędzie, po które sięga większość programów. Pozwala kodowi pójść jedną ścieżką, gdy warunek jest prawdziwy, i inną, gdy nie jest. Python zapisuje to bezpośrednio:
Dwie linie, jedna decyzja. Linia z if kończy się dwukropkiem. Wcięta linia poniżej to ciało if, czyli kod, który wykona się, jeśli warunek jest prawdziwy. Gdyby hour wynosiło 15, ciało zostałoby całkowicie pominięte i nic by się nie wypisało.
To wcięcia tworzą tu strukturę. Python rozpoznaje, które linie należą do if, po ich początkowych białych znakach. Konwencja to cztery spacje na poziom: trzymaj się jej konsekwentnie.
Dodanie gałęzi else
Często chcesz, żeby coś się stało w obu przypadkach: to, gdy warunek jest prawdziwy, a tamto w przeciwnym razie. Do tego służy else:
Linia z else nie ma warunku: łapie wszystko, czego nie złapał if.
Wiele gałęzi z elif
Przy więcej niż dwóch ścieżkach wstaw klauzule elif ("else if") między if a else:
Python sprawdza warunki od góry do dołu i wykonuje blok pierwszego prawdziwego. Pozostałe są pomijane. Ta kolejność ma znaczenie: jeśli postawisz score >= 60 przed score >= 90, wszyscy dostaną D, bo wygrywa pierwszy prawdziwy warunek.
Porządna struktura, o której warto pamiętać: dla danego wejścia warunki powinny się wzajemnie wykluczać, a ich kolejność powinna odzwierciedlać naturalny sposób myślenia o problemie. Najbardziej szczegółowe przypadki daj na początek, a najbardziej ogólne na koniec.
Wartości prawdziwe i fałszywe w warunkach
Wyrażenie w if nie musi dawać dosłownie True ani False. Python przyjmuje dowolną wartość i ocenia, czy jest prawdziwa (truthy):
if items: czyta się jako "jeśli lista cokolwiek zawiera". Wartości fałszywe (falsy) to:
False0,0.0None- Puste kontenery:
"",[],{},set(),()
Wszystko inne jest prawdziwe. Korzystanie z tego sprawia, że kod czyta się naturalniej, z jednym zastrzeżeniem: jeśli zero jest znaczącą wartością (licznik, który całkiem poprawnie wynosi zero), porównuj jawnie przez is not None albo != 0, żeby uniknąć pomyłki "puste = zero".
Łączenie warunków
and, or i not pozwalają budować warunki złożone:
Porównania łańcuchowe są schludniejsze niż jawne and, gdy oba końce dotyczą tej samej wartości środkowej:
To samo co 18 <= age and age < 65, ale czyta się jak nierówność z matematyki.
Zagnieżdżone instrukcje if
Możesz umieścić if wewnątrz if. To dozwolone i czasem najczytelniejsze, ale to też główny powód, dla którego kod warunkowy staje się trudny do śledzenia. Jeśli schodzisz na trzeci poziom, rozważ spłaszczenie przez wczesne powroty (gdy już piszesz funkcje) albo przez łączenie warunków:
Obie wersje działają. Wybierz tę, która lepiej czyta się komuś, kto nie widział wcześniej tego kodu.
Wyrażenie trójargumentowe
Gdy wartość ma być jedną z dwóch rzeczy w zależności od warunku, Python ma zwięzłą formę:
Czytaj od lewej do prawej: "warm, jeśli temp wynosi co najmniej 70, a w przeciwnym razie cool". Świetnie nadaje się do krótkich przypisań typu albo-albo. Przestań go używać, gdy gałęzie robią się długie albo zawierają kilka operacji: wtedy pełny blok if/else jest łatwiejszy dla oka.
if jest wyrażeniem tylko w jednym miejscu
W przeciwieństwie do niektórych języków sama instrukcja if w Pythonie nie daje wartości. Robi to tylko forma trójargumentowa. Nie da się napisać x = if ...: tak jak w Ruście czy Kotlinie. Jeśli chcesz wartości zależnej od warunku, użyj wyrażenia trójargumentowego, a jeśli zachowania zależnego od warunku, użyj pełnego bloku if.
Mały kompletny przykład
Krótki program, który klasyfikuje temperaturę:
Zauważ, że logika sprowadza się głównie do decyzji, jaka ma być wartość advice. Jednym rzutem oka widać, który zakres temperatur odpowiada któremu komunikatowi. Do takiego kształtu warto dążyć przy pisaniu warunków: każda gałąź powinna być mała, a ogólny zamiar oczywisty.
Co dalej
Warunki pozwalają kodowi wybrać ścieżkę. Pętle pozwalają mu powtarzać. Dalej: pętle for, zdecydowanie najczęściej używane pętle w Pythonie i naturalny partner kolekcji, które poznasz kilka stron później.
Najczęściej zadawane pytania
Jak działa instrukcja if w Pythonie?
if condition:, a po nim wcięty blok, wykonuje ten blok tylko wtedy, gdy warunek jest prawdziwy. Opcjonalne klauzule elif (else if) pozwalają sprawdzić kolejne warunki, a opcjonalne else wykonuje się, gdy nic innego nie pasowało.
Czy Python ma instrukcję switch?
Python 3.10 dodał match/case do strukturalnego dopasowywania wzorców, które pokrywa większość zastosowań instrukcji switch, a nawet więcej. Przy prostym rozgałęzianiu łańcuch if/elif jest nadal popularny i całkowicie w porządku.
Czym jest trójargumentowy if w Pythonie?
To jednolinijkowe wyrażenie warunkowe: result = a if condition else b. Czyta się je od lewej do prawej: oblicz a, gdy condition jest prawdziwe, a w przeciwnym razie oblicz b. Przydatne przy krótkich przypisaniach typu albo-albo, mniej czytelne, gdy gałęzie się wydłużają.