← Lekcje
Python · lekcja 08

Pętla for i range

  1. Pętla for: powtarzanie z góry policzone
  2. Funkcja range: od zera, bez ostatniej liczby
  3. range(a, b, krok): własny początek i skok
  4. Ćwiczenie: suma, odliczanie i tabliczka mnożenia
Rozgrzewka · 3 minuty

Co pamiętacie z pętli while?

  1. Co robi pętla while?
  2. Co się stanie, gdy w pętli z licznikiem zapomnicie linijki i = i + 1?
  3. Do czego służy słowo break?
Część 1 · Po co druga pętla

Ten sam wynik, o trzy linijki krócej

Lekcja 07, pętla while:

i = 1
while i <= 5:
    print(i)
    i = i + 1

Dziś, pętla for:

for i in range(1, 6):
    print(i)

Oba wypisują:

1
2
3
4
5

W while sami zakładamy licznik, sami go zwiększamy i sami pilnujemy warunku. W for robi to zakres: pętla dostaje gotową listę wartości i po prostu przechodzi po nich po kolei.

Podręcznik Informatyka na czasie 2 (Nowa Era), s. 225 (dodatek 7, pętla for i pętla while) · docs.python.org, The Python Tutorial, rozdz. 4.2 (for Statements)
Część 1 · range(n)

range(5): pięć liczb, ale od zera

range (po angielsku „zakres”) podaje pętli kolejne liczby. Zapis range(5) to pięć liczb licząc od zera: ostatnia podana liczba już do zakresu nie wchodzi.

range(5) pięć powtórzeń, pierwsza wartość to 0 0 1 2 3 4 5 już poza zakresem zmienna i przyjmuje kolejno te wartości
docs.python.org, The Python Tutorial, rozdz. 4.3 (The range() Function)
Część 2 · range(a, b, krok)

Własny początek i własny skok

W nawiasie mogą stać trzy liczby: od czego zacząć, przed czym się zatrzymać i o ile skakać. Krok to różnica między kolejnymi liczbami; gdy jest ujemny, zakres idzie w dół.

ZapisLiczby w zakresieIle powtórzeń
range(3)0, 1, 23
range(5, 10)5, 6, 7, 8, 95
range(1, 11)1, 2, 3, … , 1010
range(0, 10, 3)0, 3, 6, 94
range(10, 0, -1)10, 9, 8, … , 110

W praktyce: range nie tworzy listy liczb w pamięci, tylko podaje je pojedynczo. Dlatego samo range(10) wypisuje się jako range(0, 10), a pętla po miliardzie liczb nie zajmuje ani grama więcej pamięci niż pętla po dziesięciu.

docs.python.org, The Python Tutorial, rozdz. 4.3 (The range() Function)
Część 2 · Suma od 1 do n

Pętla, która zbiera wynik

# suma liczb od 1 do 100
total = 0
for i in range(1, 101):
    total = total + i
print("Suma wynosi:", total)

Na ekranie: Suma wynosi: 5050

Zmienna total to worek na wynik. Zaczyna od zera, a każdy obieg pętli dokłada do niej kolejną liczbę.

Obiegitotal po dodaniu
1.11
2.23
3.36
100.1005050
docs.python.org, The Python Tutorial, rozdz. 4.3 (The range() Function) · Podręcznik Informatyka na czasie 2 (Nowa Era), s. 225 (dodatek 7, pętla for po zakresie)
Część 3 · Tabliczka mnożenia

Dziesięć linijek z dwóch linijek kodu

number = 7
for i in range(1, 11):
    print(number, "*", i, "=", number * i)

Pętla wykonuje się dziesięć razy, bo range(1, 11) to liczby od 1 do 10. Za każdym razem print dostaje inną wartość i.

7 * 1 = 7
7 * 2 = 14
7 * 3 = 21
7 * 4 = 28
7 * 5 = 35
7 * 6 = 42
7 * 7 = 49
7 * 8 = 56
7 * 9 = 63
7 * 10 = 70
Podręcznik Informatyka na czasie 2 (Nowa Era), s. 225 (dodatek 7, pętla for z zakresem, przykład wypisania liczb od 1 do 10)
Część 3 · Wybór pętli

Kiedy for, a kiedy while?

Czy z góry wiem, ile powtórzeń? tak nie pętla for 10 razy, 100 liczb, tabliczka zakres zna koniec, licznik robi się sam pętla while pytaj, aż suma sięgnie 300 koniec zależy od tego, co wpisze użytkownik
Podręcznik Informatyka na czasie 2 (Nowa Era), s. 225 (dodatek 7: while stosuje się, gdy nie znamy dokładnej liczby powtórzeń) i s. 100 (program Zbiór jabłek)
Ćwiczenie · przy komputerze · 12 minut

Ćwiczenie: trzy pętle do napisania

Załóż plik petle.py i rozwiąż trzy zadania. Po każdym uruchom program i sprawdź, czy wypisuje dokładnie to, co ma wypisać.

  1. Wypisz liczby od 1 do 20, każdą w osobnej linii. Potem zmień jedną liczbę w range tak, żeby program wypisał tylko liczby nieparzyste: 1, 3, 5, … , 19.
  2. Policz sumę liczb od 1 do 50 i wypisz ją jednym print na końcu. Ile wyszło?
  3. Zrób odliczanie: program wypisuje 10, 9, 8, … , 1, a na końcu słowo „Start!”. Uwaga: print("Start!") ma być poza pętlą.
Jak sprawdzić, czy pętla ma dobrą liczbę obiegów

Policz linijki, które program wypisał. Zadanie 1 to 20 linijek, po zmianie 10. Zadanie 3 to 10 linijek plus jedna ze słowem „Start!”. Gdy wychodzi o jedną za mało albo za dużo, popraw drugą liczbę w range: ona do zakresu nie wchodzi.

Sprawdzenie

Trzy pytania na koniec

  1. Ile razy wykona się pętla for i in range(4) i jakie wartości przyjmie i?
  2. Czym różni się range(6) od range(1, 6)?
  3. Kiedy wybieracie for, a kiedy while?
Podsumowanie

A jak to wygląda w produkcji?

Na lekcjiW produkcjiStatus
for i in range(n)Sklep wypisuje 24 produkty na stronie: jeden obieg pętli to jeden kafelek z cenącodziennie
range(a, b)Numery stron pod listą wyników: strony od 1 do liczby stron, bez zera i bez jednej za dużocodziennie
range(a, b, krok)Godziny wizyt co 15 minut w kalendarzu rezerwacji: krok zamiast wypisywania każdej godziny ręczniecodziennie
Suma w pętliPodsumowanie koszyka i faktury: program przechodzi po pozycjach i dokłada każdą do sumystandard w firmach