Pętle
Wyobraź sobie, że obierasz ziemniaki. Bierzesz pierwszy ziemniak z torby, obierasz, odkładasz do garnka. Następnie bierzesz kolejny ziemniak, obierasz, odkładasz – tak długo, aż wszystkie są obrane. A teraz, wyobraź sobie, że musisz zaprogramować robota, który to robi. Jak się do tego zabrać?
Najprostszym, a jednocześnie najmniej efektywnym pomysłem jest napisanie tylu operacji weź ziemniak – obierz – odłóż, ile mamy ziemniaków w torbie. To zły pomysł, bo:
- po pierwsze, jest to jednorazowa akcja (bo następnym razem będziemy mieć inną liczbę ziemniaków i trzeba będzie zmodyfikować program),
- po drugie, gra jest niewarta świeczki, bo obieramy ziemniaki dla pułku wojska i musimy napisać kilkaset takich powtórzeń* ręcznie
Najprostszym i najefektywniejszym sposobem będzie napisanie programu w taki sposób:
1. jeśli są jeszcze ziemniaki w torbie:
- weź ziemniak,
- obierz go,
- odłóż do garnka,
2. wróć do punktu 1.
Ten sposób zadziała zawsze, niezależnie czy do obrania mamy trzy ziemniaki, dziesięć, czy sto pięćdziesiąt.
* Cykliczne powtarzanie zestawu czynności, np. weź ziemniak – obierz – odłóż do garnka nazywamy iteracją.
Konstrukcja pętli
W języku Python (i we wszystkich innych też) istnieją specjalne konstrukcje zwane pętlami. Pętle to właśnie wielokrotne powtórzenie pewnego zestawu czynności. Jest wiele sposobów zapisywania pętli, ale my – Pythoniści, najczęściej używamy konstrukcji for – in.
Oto przykład:
# torba z ziemniakami
bag = [“ziemniak 1”, “ziemniak 2”, “ziemniak 3”, “ziemniak 4”,
“ziemniak 5”]
# robimy pętlę
for potato in bag:
print(potato, “obrany!”)
Efektem działania tego programu jest:
- ziemniak 1 obrany!
- ziemniak 2 obrany!
- ziemniak 3 obrany!
- ziemniak 4 obrany!
- ziemniak 5 obrany!
Oto przykład konstrukcji pętli:
Tworzenie pętli for-in
Pętlę for – in tworzymy w następujący sposób:
- najpierw mamy słowo kluczowe for,
- potem deklarujemy zmienną, do której będą wrzucane kolejne elementy z kolekcji; w naszym przypadku jest to zmienna potato, do niej będą wrzucane kolejne wartości z listy bag,
- następnie piszemy słowo kluczowe in,
- na koniec podajemy kolekcję, po której iterujemy*.
* Cykliczne powtarzanie zestawu czynności, np. weź ziemniak – obierz – odłóż do garnka nazywamy iteracją.
dla każdego ziemniaka w torbie zrób, co następuje
for potato in bag :
Zwróć uwagę na dwukropek na końcu linii kodu. Jest obowiązkowy!
Instrukcja print
To, co ma się wydarzyć jako kolejny krok pętli (obierz ziemniak), zapisane jest w bloku kodu (tam, gdzie jest instrukcja print). Ten blok kodu, to tzw. ciało pętli, wszystkie instrukcje, które mają być powtarzane, dopóki ziemniaki są w torbie. Zwróć uwagę, że linijka print jest wcięta w stosunku do instrukcji for. To wcięcie jest obowiązkowe. Może to być 1 tabulator (zadziała, ale jest niechętnie przyjmowane przez programistów), albo kilka spacji (preferowane rozwiązanie – najlepiej 4 spacje). Wszystkie instrukcje wykonujące się wewnątrz pętli powinny być wcięte!
Pętla, będzie pobierać kolejny element z listy i ten element będzie przypisywany do zmiennej potato. Następnie będzie wykonywać się ciało pętli (czyli kod we wcięciu). Po zakończeniu kodu we wcięciu – będzie brany kolejny element listy i przypisany zostanie do zmiennej potato. Będzie się to wykonywać tak długo, dopóki w liście bag będą jeszcze jakieś elementy.
To rozwiązanie jest uniwersalne! Jeśli lista bag, będzie zawierała 100 ziemniaków, to wykona się 100 razy. Jeśli tylko jeden – wykona się tylko raz. Jeśli lista będzie pusta – nie wykona się ani razu, bo nie będzie ziemniaków w torbie! :)
Zadania
Zadanie 1
W zadaniach nie będziemy obierać ziemniaków. Zajmiemy się fajniejszymi rzeczami, czyli zespołem The Beatles. Zajrzyj do kodu. Znajdziesz tam listę utworów na płycie “Please Please Me”. Przejdź pętlą for – in po liście utworów i wyświetl każdy utwór osobno.
Przejdź do pierwszego zadania:
Zadanie 2
Zajrzyj do kodu. Znajdziesz tam listę please_please_me_time, która zawiera sekundowy czas trwania wszystkich piosenek z płyty “Please Please Me”. Przejdź pętlą for – in po tej liście i zsumuj wszystkie czasy. Wynik wyświetl na ekranie.
Jak to zrobić?
Najpierw zadeklaruj zmienną, nazwij ją dowolnie, np. result i przypisz jej na początek wartość 0. Następnie, w ciele pętli, dodawaj do zmiennej result wartość kolejnego elementu pętli
Przejdź do drugiego zadania:
Zadanie 3
Pora na coś trudniejszego: powtórz kod z pierwszego zadania: ale zamiast wyświetlać kolejne napisy z listy please_please_me, zrób tak: Wyświetl tytuł piosenki, napis “\t” (znak \t oznacza tabulator) i czas trwania piosenki, w jednej linijce.
Przejdź do trzeciego zadania: