Pętle zagnieżdżone
Wstęp
W tym artykule poznamy pętle zagnieżdżone. Tworzą je przynajmniej dwie pętle, jedna wewnątrz drugiej. Pętla wewnętrzna jest instrukcją pętli zewnętrznej, zatem musi być poprzedzona dodatkowym wcięciem. Jest ona wykonywana przy każdym obrocie pętli zewnętrznej. Pętle zagnieżdżone mogą być wykorzystane np. do przejrzenia wszystkich par elementów listy, jak w poniższym kodzie:
liczby = [1, 4, 3]
for pierwsza in liczby:
for druga in liczby:
print(pierwsza, druga)
Program ten wypisze:
1 1
1 4
1 3
4 1
4 4
4 3
3 1
3 4
3 3
Przykład 1 - Dwuznakowe kody
Napiszemy program, który wygeneruje wszystkie dwuznakowe kody, w których pierwszym znakiem będzie litera (A, B lub C), a drugim cyfra (1, 2, 3 lub 4).
W tym celu każdą literę połączymy w parę z cyfrą. Przejście po literach realizujemy za pomocą pętli for. Dla ustalonej litery do przejścia po cyfrach wykorzystamy drugą (zagnieżdżoną) pętlę for. Każdą otrzymaną w ten sposób parę znaków skleimy i wypiszemy.
litery = "ABC"
cyfry = "1234"
for litera in litery:
for cyfra in cyfry:
print(litera + cyfra, end=" ")
Powyższy program da w wyniku:
A1 A2 A3 A4 B1 B2 B3 B4 C1 C2 C3 C4
Przykład 2 - Przedziały
Napiszemy program, który wypisze wszystkie pary reprezentujące przedziały liczb naturalnych od 1 do podanego N. Przykładowo, dla N = 4, należy wypisać następujące pary: 1-1, 1-2, 1-3, 1-4, 2-2, 2-3, 2-4, 3-3, 3-4 oraz 4-4. Pętla zewnętrzna będzie przebiegać po początkach przedziałów, a wewnętrzna po ich końcach.
N = int(input())
for poczatek in range(1, N + 1):
for koniec in range(poczatek, N + 1):
print(poczatek, "-", koniec, sep="")
Dla N = 4 otrzymamy:
1-1
1-2
1-3
1-4
2-2
2-3
2-4
3-3
3-4
4-4
Przykład 3 - Plan kwadratu
Napiszemy program, który wypisze kolejne liczby od 1 do N^2 na planie kwadratu. Takie zadanie rozwiązywaliśmy już w lekcji "Pętla for". Tym razem w rozwiązaniu użyjemy pętli zagnieżdżonych.
Wyobraźmy sobie, że kwadrat jest podzielony na wiersze ponumerowane od 1 do N (od góry do dołu) oraz kolumny ponumerowane od 1 do N (od lewej do prawej). Chcemy odwiedzić wszystkie pola, przeglądając je wierszami od góry do dołu, a wiersze od lewej do prawej. Takie przejście możemy zrealizować za pomocą pętli zagnieżdżonych. Pierwsza pętla będzie iterować po numerze wiersza, a druga po numerze kolumny. Liczbę, która powinna znaleźć się w danym polu, możemy obliczyć na podstawie numeru wiersza i numeru kolumny. Zauważmy, że we wszystkich wierszach, które do tej pory przejrzeliśmy, było łącznie (wiersz - 1) N pól. Zatem liczba, która powinna znaleźć się na aktualnym polu to: (wiersz - 1) * N + kolumna.
N = int(input())
for wiersz in range(1, N + 1):
for kolumna in range(1, N + 1):
print((wiersz - 1) * N + kolumna, end=" ")
print()
Dla N = 4 powyższy program wypisze:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
Przykład 4 - Liczby trzycyfrowe
Napiszemy program, który wypisze liczby trzycyfrowe, których cyfry są uporządkowane rosnąco (kolejna cyfra jest większa od poprzedniej).
Za pomocą pętli for przejdziemy po każdej cyfrze, która może stać na pierwszym miejscu (od 1 do 7 włącznie) - nazwijmy tę cyfrę A. Dla tak ustalonej cyfry przejdziemy po każdej możliwości wybrania drugiej (od A + 1 do 8 włącznie; startujemy od A + 1, aby zapewnić, że druga cyfra będzie większa od poprzedniej) - nazwijmy tę cyfrę B. Następnie wybieramy trzecią cyfrę (od B + 1 do 9 włącznie). Wybrane cyfry wypisujemy na ekran, uzyskując liczbę trzycyfrową.
for A in range(1, 8):
for B in range(A + 1, 9):
for C in range(B + 1, 10):
print(A, B, C, sep="", end=" ")
Powyższy program wypisze:
123 124 125 126 127 ... 589 678 679 689 789
Trenuj z nami!
Pisanie programów jest bardzo ważnym elementem nauki programowania. Możesz to robić rozwiązując zadania (mikroprojekty) dostępne na naszej platformie edukacyjnej Codeforia. Rozwiązania są sprawdzane automatycznie, a po chwili od wysłania kodu dowiesz się, czy jest ono poprawne, czy wymaga zmian. Zapraszamy również na regularne zajęcia online, gdzie będziesz mógł/mogła rozwijać się pod okiem doświadczonego trenera. Zobacz nasze dostępne kursy.