Na 31 marca przygotowałem dla Was materiał dotyczący następnej fundamentalnej rzeczy, bez której programowanie wielu funkcjonalności byłoby nawet niemożliwe do zrealizowania. Zaprezentuję Wam jak wygląda, do czego służy oraz w jakich sytuacjach najlepiej sprawdza się pętla "for" w Pythonie. Dowiecie się również czym się ona różni od omawianej wcześniej pętli "while".
Tweet |
PĘTLA "FOR" W PYTHONIE. PODOBIEŃSTWA I RÓŻNICE
Warto podkreślić, że w odróżnieniu od pętli "while", ta już różni się mocno od wersji tradycyjnej w języku C. Tak jak wtedy, tutaj interesuje nas tylko postać w języku Python. Tu się robi ciekawiej, bo nie ma postaci znanej z takich języków jak Java czy C#! Czyli nie ma możliwości, żeby podstawić licznik i modyfikować jego wartość! Robi się to w inny sposób.
SKŁADNIA
Pętla "for" w Pythonie polega na ustawieniu zmiennej lokalnej będącej aktualnym elementem podanej kolekcji takiej jak lista, krotka czy słownik. Wybijcie sobie z głowy tworzenie zmiennej i przypisywanie jej początkowej wartości po operatorze przypisania. Najprostszy zapis prezentuje się w taki oto sposób:
for [zmienna] in [kolekcja]:
# dalsze instrukcje
Dla przykładu, załóżmy że mamy listę pięciu słów. To wówczas przy użyciu pętli "for", nasza zmienna występująca obok słowa "for" będzie reprezentować każde słówko jeden po drugim:
words = ["Programowanie", "w", "Pythonie", "jest", "łatwiejsze"]
for w in words:
print_(w)
Pętla "for" składa się ze zmiennej iteracyjnej, która "wciela się" w jeden z elementów podanej kolekcji i powtarza swoje czynności, dopóki nie natrafi na koniec kolekcji.
PODEJŚCIE "SEMI-ITERACYJNE"
Wspomniałem na początku, że pętla "for" w Pythonie dopuszcza jedynie możliwość "chodzenia" po zbiorze danych. Czy to znaczy w takim razie, że nie da się traktować zmiennej jak licznika, żeby ulegał on zmianie co iterację? Niezupełnie. Jest sposób, który można interpretować jak obejście i posłuży Wam do tego celu funkcja "range". "range" zwraca listę liczb po podanym zakresie "od do" jako dwa przyjmowane parametry i tak możecie to zrobić iteracyjnie. Dlatego nazwałem to "obejściem", gdyż to nie jest de facto modyfikowanie licznika co powtórzenie, tylko przelatywanie przez liczbowe argumenty i przyjmowanie konkretnej liczby z indeksu.
Tak to wygląda od strony kodowej:
for i in range(A, B):
# dalsze instrukcje
Przestrzegam jednak przed jedną pułapką dotyczącą zakresu! Wprawdzie "range" pozwoli iterować jak w tradycyjnej formie z języka C do określonego momentu, aczkolwiek nie uwzględnia on ostatniej liczby będącej zadanym "maksimum" (nazywa się to "exclusive")! Zatem gdy pętla "for" w Pythonie otrzyma zakres:
range([min], [max])
będzie on w rzeczywistości poddawany iterowaniu od minimum do (maksimum - 1). Jeśli chcesz żeby została uwzględniona wartość maksymalna, trzeba ją zwiększyć o jeden.
Funkcja "range" tworzy listę liczbowych wartości według podanego zakresu, jednak nie uwzględnia on ostatniej wartości podanej jako maksimum!
ZASTOSOWANIE
Obie formy zapisów doskonale pokazują do czego najlepiej pasuje pętla "for" w Pythonie. Do rozwiązania każdego problemu, w którym możemy łatwo przewidzieć ile powtórzeń okaże się niezbędnych, żeby otrzymać rozwiązanie. W przypadku Pythona będzie tylko jedna granica - rozmiar podanego zbioru danych (inaczej kolekcji).
Dotarliśmy do mety. Pętla "for" w Pythonie pozbawiona jest możliwości podejścia "czysto iteracyjnego" i myślę, że to jest najważniejszy wniosek do wyciągnięcia na finisz.