Przejdź do głównej treści
eLearner.app
Moduł 2 · Lekcja 3 z 47/36 w kursie~10 min
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ę.
  • continuepomija resztę ciała i przechodzi do kolejnej iteracji.
  • else (przy pętli) — uruchamiane, gdy pętla zakończy się bez instrukcji break.

break

Python
for n in [3, 7, 11, 4, 9]:
    if n % 2 == 0:
        primo_pari = n
        break
primo_pari  # 4

break zatrzymuje pętlę tak szybko, jak to możliwe. Wszystko, co znajduje się po break w ciele bieżącej iteracji, NIE jest wykonywane.

continue

Python
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:

Python
target = 7
for n in [2, 4, 6, 8]:
    if n == target:
        trovato = True
        break
else:
    trovato = False
trovato  # False

Czytaj 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ą

Python
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

Ćwiczenie#python.m2.l3.e1
Próby: 0Ładowanie...

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.

Ładowanie edytora...
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

Ćwiczenie#python.m2.l3.e2
Próby: 0Ładowanie...

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.

Ładowanie edytora...
Pokaż wskazówkę

Jeśli n jest parzyste, continue; w przeciwnym razie append.

Rozwiązanie dostępne po 3 próbach

Dodatkowe wyzwanie

Ćwiczenie#python.m2.l3.e3
Próby: 0Ładowanie...

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`.

Ładowanie edytora...
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