
Składnia pętli for w Pythonie
Według dokumentacji instrukcja for służy do iteracji po elementach sekwencji (na przykład napisu, krotki lub listy) albo innego obiektu iterowalnego. Zmienna pętli dostaje po kolei każdy element, a ciało pętli wykonuje się raz dla każdego z nich.
for litera in "abc":
print(litera, end=",")
# a,b,c,
Ten sam zapis działa dla listy, krotki czy słownika. Do przejścia po elementach z numerami służy enumerate:
for numer, litera in enumerate(["a", "b"]):
print(numer, litera)
# 0 a
# 1 b
Funkcja range: zakres i krok
Jeśli pętla ma wykonać się określoną liczbę razy lub przejść po liczbach, użyj range. Dokumentacja opisuje range jako niemutowalną sekwencję liczb, używaną zwykle do powtarzania pętli określoną liczbę razy. Jeśli pominiesz argument step (krok), domyślnie wynosi 1, a pominięty start to 0. Koniec zakresu (stop) nie wchodzi do wyniku.
Przesuń tabelę, aby zobaczyć wszystkie kolumny →
| Zapis | Wygenerowane liczby |
|---|---|
range(5) | 0, 1, 2, 3, 4 |
range(2, 7) | 2, 3, 4, 5, 6 |
range(0, 10, 3) | 0, 3, 6, 9 |
range(5, 0, -1) | 5, 4, 3, 2, 1 |
range(3, 3) | brak liczb (pusty zakres) |
Przy ujemnym kroku zakres maleje i kończy się przed wartością stop. Krok równy zero powoduje błąd ValueError.
Przykład 1: suma liczb od 1 do 100
suma = 0
for i in range(1, 101):
suma += i
print(suma) # 5050
range(1, 101) daje liczby od 1 do 100, bo 101 już nie wchodzi do zakresu. Wynik 5050 zgadza się z sum(range(1, 101)).
Przykład 2: tabliczka mnożenia
for k in range(1, 4):
print(k, "x 7 =", k * 7)
# 1 x 7 = 7
# 2 x 7 = 14
# 3 x 7 = 21
Pętle zagnieżdżone
Pętla może zawierać inną pętlę. Pętla wewnętrzna wykonuje się w całości przy każdym obiegu zewnętrznej.
for n in range(1, 4):
for m in range(1, 4):
print(n * m, end=" ")
print()
# 1 2 3
# 2 4 6
# 3 6 9
Liczba obiegów ciała wewnętrznej pętli to iloczyn: tu 3 · 3 = 9. Przy zagnieżdżeniu dużych zakresów czas rośnie szybko, więc zakresów nie dobieraj na zapas.
break, continue i else
Dokumentacja Pythona opisuje trzy narzędzia sterowania pętlą:
Przesuń tabelę, aby zobaczyć wszystkie kolumny →
| Instrukcja | Działanie |
|---|---|
break | przerywa najbliższą otaczającą pętlę for lub while |
continue | przechodzi do następnego obiegu pętli |
else przy pętli | wykonuje się po wyczerpaniu sekwencji, ale nie po break |
for i in range(10):
if i % 2 == 0:
continue # pomiń liczby parzyste
if i > 7:
break # zakończ pętlę
print(i, end=" ")
# 1 3 5 7
Klauzula else przydaje się przy wyszukiwaniu. Poniższy kod szuka dzielników i uznaje liczbę za pierwszą, gdy pętla skończyła się bez break:
for n in range(2, 10):
for x in range(2, n):
if n % x == 0:
print(n, "dzielnik", x)
break
else:
print(n, "pierwsza")
# 2 pierwsza, 3 pierwsza, 4 dzielnik 2, 5 pierwsza,
# 6 dzielnik 2, 7 pierwsza, 8 dzielnik 2, 9 dzielnik 3
Uwaga: else należy tu do pętli for, a nie do if; break w pętli wewnętrznej przerywa tylko ją, nie zewnętrzną.
Pętla for w C++ i w Pythonie: różnica
W Pythonie for przechodzi po elementach sekwencji. W C++ pętla for ma trzy części w nawiasie, rozdzielone średnikami: instrukcję początkową (zwykle deklarację licznika), warunek i wyrażenie (zwykle zwiększające licznik). Dokumentacja cppreference opisuje ją jako instrukcję wykonującą powtarzalnie podaną instrukcję, której ciało nie musi samo zarządzać warunkiem pętli. Opisuje też równoważność z pętlą while: instrukcja początkowa wykonuje się raz, potem w każdym obiegu sprawdzany jest warunek, wykonywane jest ciało i na końcu wyrażenie. Pusty warunek jest równoważny prawdzie, a continue w ciele pętli wykonuje to końcowe wyrażenie, więc licznik nadal rośnie.
Poniższy program w C++ liczy sumę liczb od 1 do 100, tak jak przykład 1 w Pythonie. Kod nie był kompilowany ani uruchomiony; wynik 5050 pochodzi z obliczenia w Pythonie.
#include <iostream>
int main() {
int suma = 0;
for (int i = 1; i <= 100; i++) {
suma += i;
}
std::cout << suma << '\n';
}
Przesuń tabelę, aby zobaczyć wszystkie kolumny →
| Część | C++ (for (int i = 1; i <= 100; i++)) | Python (for i in range(1, 101):) |
|---|---|---|
| Start licznika | int i = 1 | początek zakresu: 1 |
| Warunek trwania | i <= 100 (sam piszesz warunek) | koniec zakresu 101 jest wyłączony |
| Krok | i++ (zwiększenie o 1) | domyślny krok 1, inny podajesz w range |
Zwróć uwagę na różnicę, która prowadzi do błędów o jeden: w C++ warunek i <= 100 obejmuje końcową wartość, a w Pythonie koniec zakresu jest wyłączony.
Odpowiednik w Scratchu
Pętli ze stałą liczbą powtórzeń odpowiada w Scratchu blok „powtórz 10 razy” z kategorii Kontrola: wykonuje zawarte w nim polecenia 10 razy, jak for i in range(10): w Pythonie. Blok nie udostępnia licznika, więc jeśli potrzebujesz numeru obiegu, tworzysz własną zmienną i zwiększasz ją w pętli. Szczegóły budowy skryptu opisuje osobny tekst o Scratchu 3.
Typowe błędy
Przesuń tabelę, aby zobaczyć wszystkie kolumny →
| Błąd | Przykład | Poprawka |
|---|---|---|
| Błąd o jeden (zakres) | range(1, 10) zamiast do 10 włącznie | range(1, 11): koniec jest wyłączony |
| Liczenie od 0 | range(n) zaczyna od 0 | range(1, n + 1), jeśli potrzebujesz 1..n |
| Zmiana zmiennej pętli | i = 5 w ciele pętli | Zostanie nadpisana w następnym obiegu |
| Zmiana listy w trakcie pętli | usuwanie elementów z iterowanej listy | Iteruj po kopii: for x in lista[:] |
| Brak wcięcia | instrukcja poza pętlą | Wcięcie wyznacza ciało pętli |
Dokumentacja podaje, że przypisanie do zmiennej pętli nie wpływa na pętlę, bo przy następnym obiegu zmienna zostanie nadpisana kolejnym elementem. Ostrzega też, że kod modyfikujący kolekcję podczas iterowania po niej bywa trudny do poprawnego napisania; zwykle prościej iterować po kopii lub utworzyć nową kolekcję.
Zmienna pętli zostaje po jej zakończeniu. Po for q in range(3): pass wartość q to 2. Gdy zakres jest pusty, zmienna nie zostaje przypisana wcale.
Zobacz też: Pierwszy program w C++, Kompilacja programów w C i C++, Sortowanie bąbelkowe.
Najczęstsze pytania (FAQ)
Jak napisać pętlę for, która wykona się 10 razy?
W Pythonie użyj for i in range(10):. Zmienna i przyjmie wartości od 0 do 9.
Czy range(1, 10) zawiera liczbę 10?
Nie. Koniec zakresu nie wchodzi do wyniku, więc dostaniesz liczby od 1 do 9. Dla 1..10 napisz range(1, 11).
Jak wygląda pętla for w C++?
Ma trzy części w nawiasie: instrukcję początkową, warunek i wyrażenie wykonywane po każdym obiegu, np. for (int i = 1; i <= 3; i++). W przeciwieństwie do range w Pythonie warunek i <= 3 obejmuje wartość końcową.
Jak przejść pętlą od końca?
Użyj ujemnego kroku: range(5, 0, -1) daje 5, 4, 3, 2, 1.
Czym różni się break od continue?
break kończy pętlę całkowicie, a continue pomija resztę bieżącego obiegu i przechodzi do następnego.
Kiedy wykonuje się else przy pętli for?
Po normalnym zakończeniu pętli, czyli gdy sekwencja się wyczerpała i nie było break.