Back to Top
 
 

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:

Odpowiedzi do zadań

Zadanie 1

Zadanie 2

Zadanie 3