Lekcje modułu (3/4)
break, continue oraz else w pętlach
Wewnątrz pętli (zarówno for, jak i while) możesz zmienić normalny przepływ
za pomocą trzech konstrukcji:
break— natychmiast przerywa pętlę.continue— pomija resztę ciała i przechodzi do kolejnej iteracji.else(przy pętli) — uruchamiane, gdy pętla zakończy się bez instrukcjibreak.
break
for n in [3, 7, 11, 4, 9]:
if n % 2 == 0:
primo_pari = n
break
primo_pari # 4break zatrzymuje pętlę tak szybko, jak to możliwe. Wszystko, co znajduje się po
break w ciele bieżącej iteracji, NIE jest wykonywane.
continue
risultati = []
for n in range(1, 11):
if n % 2 == 0:
continue # skip evens
risultati.append(n * n)
risultati # [1, 9, 25, 49, 81]Pomyśl o continue jak o "przejściu do następnej iteracji". Służy do filtrowania elementów
bez dodawania kolejnego poziomu wcięć.
else w pętli (idiom Pythona)
Specyfika Pythona: pętle mogą mieć również blok else, wykonywany tylko wtedy, gdy
pętla zakończy się naturalnie (bez break). Jest to idealne rozwiązanie do wyszukiwania:
target = 7
for n in [2, 4, 6, 8]:
if n == target:
trovato = True
break
else:
trovato = False
trovato # FalseCzytaj to jako: "dla każdego n na liście; jeśli wejdziesz w gałąź break,
pomiń else; w przeciwnym razie wykonaj else".
Pętle zagnieżdżone: break opuszcza tylko najbardziej wewnętrzną
for x in range(3):
for y in range(3):
if x == y == 1:
break
print(x, y)break opuszcza tylko pętlę for y, a nie for x. Aby opuścić obie, musisz użyć
flagi lub funkcji + return.
Nietypowa konstrukcja pętli loop...else
W Pythonie zarówno pętle for, jak i while mogą zawierać opcjonalną klauzulę else. Blok else jest wykonywany tylko wtedy, gdy pętla zakończy się pomyślnie (tzn. bez napotkania instrukcji break). Jest to bardzo pomocne przy algorytmach wyszukiwania (np. "wyszukaj element: jeśli zostanie znaleziony, break; w przeciwnym razie zgłoś, że go nie znaleziono").
Spróbuj sam
Mając daną listę `numbers = [10, 15, 20, 25, 30, 35]`, znajdź pierwszą liczbę podzielną przez 7 i przypisz ją do zmiennej `result`. Jeśli taka nie istnieje, przypisz -1.
Pokaż wskazówkę
35 to pierwsza (i jedyna) liczba podzielna przez 7 na liście.
Rozwiązanie dostępne po 3 próbach
Ćwiczenie powtórzeniowe
Utwórz listę `odd_numbers` z liczbami nieparzystymi od 1 do 20 (włącznie) za pomocą pętli for po range(1, 21) i continue do pomijania liczb parzystych.
Pokaż wskazówkę
Jeśli n jest parzyste, continue; w przeciwnym razie append.
Rozwiązanie dostępne po 3 próbach
Dodatkowe wyzwanie
Mając daną listę `numbers = [7, 11, 14, 21, 25]`, napisz pętlę `for`, aby znaleźć pierwszą liczbę podzielną przez 7 i jednocześnie ściśle większą od 10. Gdy ją znajdziesz, zapisz ją w zmiennej `found` i opuść pętlę za pomocą `break`. Na koniec oceń `found`.
Pokaż wskazówkę
Wewnątrz pętli sprawdź, czy num % 7 == 0 and num > 10:, przypisz ją do found i wywołaj break.
Rozwiązanie dostępne po 3 próbach