Na dzisiaj przygotowałem materiał o Pythonie dotyczący kolejnej fundamentalnej konstrukcji, którą należy bezwzględnie znać 💥! Pokażę Ci jak wygląda, do czego służy i w jakich sytuacjach przydaje się pętla "for" w języku Python 🤩! Dowiesz się także czym się różni od opisanej poprzednio pętli "while" 😮!

PĘTLA "FOR" W JĘZYKU PYTHON IDEALNA DO SEKWENCJI

Jak zwykle zacznę od terminu, potem przejdziemy do ukazania kodów źródłowych, a na końcu porównamy sobie tę pętlę z pętlą "while" 😊!

CZYM JEST PĘTLA "FOR" W JĘZYKU PYTHON?

Pętla "for" jaka występuje w Pythonie (ang. "for" loop) to drugi rodzaj pętli, która także służy do wielokrotnego wykonywania podanego kodu, aczkolwiek jest stworzona do obsługi sekwencji, niż do "normalnego" stosowania do wszelkich sytuacji 😳. Sekwencja to taka struktura danych, której elementy są skonstruowane w sposób możliwy do "przechodzenia" po nich jeden po drugim 💡.

Na przykład masz liczby od 1 do 5. Chcesz podnieść każdą z liczb do kwadratu 📈. Wiesz gdzie jest początek i gdzie koniec 🧠. Wtedy pętla "for" będzie idealna do tego zadania 🏆! Dla każdej liczby znajdującej się w sekwencji, wykonujesz mnożenie przez siebie i tyle ✅. Nie musisz zwracać uwagi na wyznaczanie w którym momencie ma nastąpić koniec - pętla sama będzie wiedzieć kiedy przerwać 😁!

To jest przykład "działania w pętli" dla sekwencji 🔁! Jest sekwencja, a każda ma z góry określony początek i koniec 📏! To jest najlepsze zastosowanie pętli "for" 🎯!

Przechodzę do przedstawienia budowy pętli 🔨!

JAK UTWORZYĆ PĘTLĘ "FOR" W JĘZYKU PYTHON?

Pętlę "for" tworzymy w Pythonie w sposób następujący 👇:

for [zmienna iteracyjna aktualnego elementu w sekwencji] in [sekwencja]:
	[instrukcje]

Teraz wytłumaczę samą postać pętli, a potem będzie przykład użycia 👍.

Postać pętli "for" ("dla") składa się z takich oto elementów 👇:

  1. słowo kluczowe "for",
  2. nazwa zmiennej reprezentującej aktualny element sekwencji (niżej wyjaśniam o co chodzi),
  3. słowo kluczowe "in",
  4. dowolna sekwencja (lub zmienna tego typu),
  5. znak dwukropka (obowiązkowa rzecz, bez której będzie błąd składniowy 🚫),
  6. instrukcje po zrobieniu obowiązkowego wcięcia (poprzez spację lub tabulator), które mają się wykonać dla każdego elementu sekwencji.

Wyjaśniam każdy z punktów 📣.

Po słowie kluczowym "for", wpisujesz nazwę zmiennej, która oznacza aktualny element sekwencji (nazywamy taką zmienną "iteracyjną" ℹ️) 🔥. Pętla "for" w języku Python działa w taki sposób, że pobiera pierwszy w kolejności element, wykonuje zamieszczone instrukcje i przechodzi do następnego, aż dojdzie do końca 💡. Za każdym razem, gdy następuje przejście do kolejnego elementu, ta właśnie zmienna automatycznie aktualizuje swoją wartość "wskazując" na następny element ✅. Można powiedzieć, że "wciela się" w jeden z elementów podanej kolekcji 🙂.

Po określeniu nazwy zmiennej wpisujemy kolejne słowo kluczowe: "in", które możemy sobie tłumaczyć jako "zawierające się w" lub "będace w". Zaraz po nim trzeba wstawić dowolną sekwencję, czyli po jakich elementach pętla ma się przemieszczać 🔼. To może być 👇:

  • lista ("list"),
  • zbiór ("set"),
  • krotka ("tuple"),
  • zakres ("range").

To są typy danych, które przechowują wiele elementów 📦. Na końcu wciąż tego samego wiersza wpisujemy dwukropek, bez którego Python odmówi uruchomienia programu 🚫! Wtedy przechodzimy do kolejnego wiersza i wykonując obowiązkowe wcięcie (w postaci spacji lub tabulatora), piszemy wszystkie instrukcje, które zostaną wykonane dla każdego elementu sekwencji 🔁. Wcięcie oznacza co ma dotyczyć pętli, a co nie i to dlatego jest takie ważne ℹ️.

Widzisz już sam(a), że ta pętla wygląda zupełnie inaczej, niż pętla "while" 🙂. Pokażę teraz prosty przykład użycia w praktyce!

PRZYKŁAD UŻYCIA PĘTLI "FOR" W JĘZYKU PYTHON

Przypuśćmy, że mamy sekwencję liczb od 1 do 10 i chcemy każdą z nich podnieść do kwadratu 📈. Aby mieć pewność, że modyfikacja się udała, chcemy wyświetlić stan tych liczb przed i po 👀. To znając pętlę "for", możemy zrealizować zadanie następująco 👇:

def print_sequence(sequence):
	print('Elementy sekwencji:')
	
	for element in sequence:
		print(element)

maximum_number = 10
numbers = list(range(1, maximum_number + 1))

print_sequence(numbers)

for index in range(maximum_number):
	numbers[index] *= numbers[index]

print_sequence(numbers)

Tłumaczę od samej góry.

Na początku mamy definicję funkcji służącej do wyświetlania wszystkich elementów podanej sekwencji 👍. Wewnątrz niej widnieją wywołania funkcji "print", a jedno z nich znajduje się w pętli "for". Pod funkcją wypisującą zawartość sekwencji, definiujemy sobie dwie zmienne określającą maksymalną liczbę w sekwencji oraz listę liczb. Tutaj korzystamy z konstruktora typu danych "list", aby uzyskać postać listy z podanego zakresu 💛.

Zauważ, że maksimum zakresu jest podane jako maksymalna liczba zwiększona o 1 👀! To dlatego, iż "range" nie uwzględnia górnej granicy (nazywa się to "exclusive end"), czyli gdybyśmy patrzyli na to, jak na przedział liczbowy w matematyce, to prawa strona ma nawias okrągły 🔥. Dlatego aby otrzymać zakres od A do B, trzeba podnieść górną granicę o 1 do góry ⬆️.

Zaraz po zmiennych, wywołujemy po raz pierwszy funkcję do wypisywania elementów sekwencji (w tym przypadku listy liczb), aby poznać ich stan przed modyfikacją ☑️. Teraz mamy pętlę "for" do podnoszenia liczb do kwadratu 😊. Tutaj elementem są indeksy liczb według odrębnego zakresu wstawionego już bezpośrednio w pętli 😲. Ten zakres 👇:

range(maximum_number)

składa się z liczb od 0 do 9, czyli idealnie z notacją indeksową stosowaną do pobierania pojedynczych elementów z sekwencji ✅.

W środku pętli mamy jedyną instrukcję, która modyfikuje element jeden po drugim. Nas interesuje kwadrat tej liczby, więc mnożymy je przez siebie i wynik przypisujemy do elementu listy o właściwym indeksie. Na samym końcu wywołujemy po raz drugi tę samą funkcję do wypisywania elementów sekwencji i jak uruchomisz program, to zobaczysz, że modyfikacja się udała ❤️!

Pętla "for" w języku Python

Pętla "for" w języku Python to drugi rodzaj pętli stworzony do poruszania się po elementach dowolnej sekwencji.

Kod działa jak powinien, aczkolwiek nie sposób nie zauważyć, że jak na podniesienie każdej liczby w liście do kwadratu, to instrukcji jest zdecydowanie za dużo 😐. Dlatego w tym miejscu pokażę drugi sposób, który nie dotyczy samej pętli "for", aczkolwiek ma z nią związek. Pokażę Ci podejście "listy składanej", czyli "list comprehension" 😱!

CZYM JEST "LIST COMPREHENSION" W JĘZYKU PYTHON?

W Pythonie, "lista składana" (ang. list comprehension) odnosi się do zwięzłej formy modyfikowania każdego elementu w liście poprzez utworzenie nowej listy z określeniem co ma się wydarzyć z każdym elementem. Najpiękniejsze jest to, że wszystko odbywa się w jednym wierszu kodu 🤩! Patrząc ponownie na ten sam przykład z podnoszeniem każdej liczby w liście do kwadratu, tak wygląda przykład użycia listy "składanej" 👇:

numbers = [number*number for number in range(1, maximum_number + 1)]

Po znaku przypisania, otwieramy nawiasy kwadratowe, tak jak przy odwoływaniu się do poszczególnych elementów dowolnej sekwencji. Zaraz po nawiasie otwierającym piszemy wyrażenie jakie ma przyjąć każdy element sekwencji. Chcąc przypisać kwadrat aktualnej wartości elementu, wykonujemy mnożenie przez siebie 😉!

Zaraz po nim, podajemy dokładnie ten sam nagłówek jaki występuje w pętli "for", czyli słowo kluczowe "for", nazwa zmiennej do reprezentowania aktualnego elementu sekwencji, słowo kluczowe "in" i sekwencja, na jakiej pętla ma działać ⏩. I to jest tyle 😄!

Podkreślę ważną rzecz jaką trzeba wiedzieć o Pythonie 🐍. Język odbiega składnią od większości innych języków tak bardzo, że w wielu miejscach przyjmuje własną oryginalną formę 😲! Dotyczy to również pętli "for", zatem muszę Ci uświadomić ważny fakt 😳!

CZYM SIĘ RÓŻNI PĘTLA "FOR" W JĘZYKU PYTHON OD INNYCH JĘZYKÓW?

Tradycyjna pętla "for" wygląda inaczej od tej istniejącej w Pythonie 💥. To jest forma, która jest najczęściej stosowana 👇:

for (int i = 0; i < 10; i++)
{
    [instrukcje]
}

Jej postać składa się z trzech części oddzielonych od siebie znakiem średnika 👇:

  • inicjalizacja,
  • weryfikacja warunku powtórzenia,
  • modyfikacja co iterację.

To oznacza, że jej zastosowanie wykracza poza operowanie na strukturach danych przechowujących wiele elementów (choć cały czas pasuje do tego najbardziej ze wszystkich pętli) 🔥!

W Pythonie zrobiono to inaczej. Skrócono tę postać do dwóch części (inicjalizacja i wskazanie sekwencji) i ograniczono jej stosowanie tylko do sekwencji. Czyli nie ma możliwości, aby stworzyć sobie licznik i za każdym razem modyfikować jego wartość 🚫! Można to zrobić z użyciem sekwencji "range", czyli przedziału liczbowego, natomiast cały czas trzeba korzystać z sekwencji 😐.

Piszę o tym dlatego, bo jak zaczniesz kiedykolwiek naukę innego języka niż Python, to żebyś uniknął/uniknęła dużego szoku, że widzisz coś innego, niż to, do czego zdążyłeś(-aś) się przyzwyczaić 🙂.

Ostatnia rzecz do wyjaśnienia, czyli kiedy najlepiej korzystać z pętli "for", a nie "while" i kończę temat 🔚.

KIEDY NAJLEPIEJ UŻYĆ PĘTLI "FOR" W JĘZYKU PYTHON?

Wtedy, gdy potrzebujesz wykonać jakieś instrukcje dla każdego elementu w sekwencji 👍. Patrząc na tradycyjny zapis pętli "for" znany z innych języków, to drugim najlepszym zastosowaniem jest przypadek, w którym wiemy dokładnie ile razy coś musi się wykonać ✅.

Z uwagi na to, iż pętla "for" w Pythonie przyjmuje zupełnie inną postać, niż większość innych języków, to nie mamy możliwości napisania kodu w taki sposób, aby coś się zrobiło N razy, od liczby A do liczby B ⛔. Jedynym sposobem jest skorzystanie z sekwencji "range", która definiuje przedział liczbowy "od do" i tylko w taki sposób możemy otrzymać formę tradycyjną, czyli: "rozpoczynając od liczby A, wykonaj coś N razy, aż dojdziesz do liczby B" ℹ️. Natomiast nie istnieje forma modyfikacji co iterację znana z innych języków "jeden do jeden" ✋.

Także w przypadku Pythona, pętla "for" okaże się lepiej dopasowana niż pętla "while" w sytuacji wykonania czegoś na każdym elemencie w dowolnej sekwencji (liczb, liter, obiektów, czegokolwiek innego) 🔥. Każda sekwencja jest ograniczona, zatem możemy łatwo przewidzieć ile powtórzeń okaże się niezbędnych 💡. W przypadku Pythona, jedynym takim wyznacznikiem będzie rozmiar sekwencji 📦. Jeżeli jednak coś nie ma żadnego związku z sekwencją i nie jesteśmy w stanie określić ile razy coś powinno się wykonać, wtedy wchodzi w grę tylko pętla "while" 💥.


Dotarliśmy do mety ✅. Pętla "for" w języku Python została wyłożona tak porządnie, jak byłem w stanie 🙂.

PODOBNE ARTYKUŁY