← Lekcje
Python · lekcja 10

Listy 2: pętla po liście

  1. Pętla for po elementach listy, bez indeksów
  2. Suma i średnia: licznik, który rośnie w pętli
  3. Największy element: raz ręcznie, raz funkcją max
  4. Porządkowanie listy metodą sort
Rozgrzewka · 3 minuty

Co pamiętacie z lekcji 9?

  1. Jak zapisać listę z trzema ocenami i jak odczytać z niej pierwszą ocenę?
  2. Co oddaje len(grades) i jaki indeks ma ostatni element tej listy?
  3. Co robi grades.append(6) z listą [4, 5, 3]?
Część 1 · Pętla po liście

Jedna pętla, cała lista

Pętla for bierze po kolei elementy listy, w takiej kolejności, w jakiej w niej stoją. Nie musicie znać ich liczby ani pisać indeksów.

grades = [4, 5, 3, 5, 2]

for grade in grades:
    print(grade)
4
5
3
5
2

Nazwa grade jest Wasza: to pudełko, do którego pętla wkłada kolejny element listy. Instrukcje z wcięciem powtarzają się tyle razy, ile lista ma elementów.

docs.python.org, The Python Tutorial, rozdz. 4.2 (for Statements) · Podręcznik Informatyka na czasie 2 (Nowa Era), s. 225 (dodatek 7, pętla for po elementach listy)
Część 1 · Element czy indeks

Dwie drogi przez tę samą listę

grades = [4, 5, 3, 5, 2] indeks 0 indeks 1 indeks 2 indeks 3 indeks 4 4 5 3 5 2 for grade in grades: grade to wartość: 4, 5, 3, 5, 2 for i in range(len(grades)): i to numer: 0, 1, 2, 3, 4

Gdy potrzebujecie samych wartości, wybierajcie pętlę po elementach: jest krótsza i nie da się w niej pomylić numeru. Numer pozycji przyda się dopiero wtedy, gdy trzeba go wypisać albo podmienić element.

docs.python.org, The Python Tutorial, rozdz. 4.2 (for Statements) i 4.3 (The range() Function)
Część 2 · Suma i średnia

Licznik, który rośnie w pętli

grades = [4, 5, 3, 5, 2]

total = 0
for grade in grades:
    total = total + grade

print(total)
print(total / len(grades))

Wynik: 19, a potem 3.8.

Zmienna total to licznik: pudełko, do którego pętla dokłada kolejną wartość. Zapis total = total + grade znaczy „nowa zawartość to stara plus ta ocena”.

Po kolei: 0 → 4 → 9 → 12 → 17 → 19. Średnia to suma podzielona przez liczbę elementów, a dzielenie / zawsze daje float.

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

Pamiętaj najlepszy dotychczasowy wynik

grades = [4, 5, 3, 5, 2]

biggest = grades[0]
for grade in grades:
    if grade > biggest:
        biggest = grade

print(biggest)

Wynik: 5.

ocena rekord 4 5 3 5 4 5 5 5 nowy rekord
Podręcznik Informatyka na czasie 2 (Nowa Era), s. 130 (9.1 Szukamy największej liczby, lista kroków algorytmu)
Część 3 · Gotowe funkcje

Cztery funkcje, które liczą za Was

Python ma te działania gotowe. Do nawiasu wstawiacie nazwę listy, a funkcja oddaje jedną wartość.

ZapisCo robiWynik dla [4, 5, 3, 5, 2]
sum(grades)dodaje wszystkie elementy19
max(grades)oddaje największy element5
min(grades)oddaje najmniejszy element2
len(grades)liczy elementy5
sum(grades) / len(grades)średnia3.8

W praktyce: pętla for chodzi po elementach dowolnej sekwencji, nie tylko listy. Zapis for letter in "Ola": wypisze w osobnych liniach O, l i a. Napisami zajmiemy się na osobnej lekcji.

docs.python.org, Built-in Functions (sum, max, min, len) · docs.python.org, The Python Tutorial, rozdz. 4.2 (for Statements)
Część 3 · Porządkowanie

Metoda sort: lista po kolei

grades = [4, 5, 3, 5, 2]

grades.sort()
print(grades)

grades.sort(reverse=True)
print(grades)
[2, 3, 4, 5, 5]

[5, 5, 4, 3, 2]

Napisy też się porządkują, alfabetycznie: ["Zosia", "Ola", "Bartek"] po sort() to ['Bartek', 'Ola', 'Zosia'].

sort porządkuje listę w miejscu: zmienia tę listę i nic nie oddaje. Dlatego print(grades.sort()) wypisze None, a grades = grades.sort() zgubi całą listę.

docs.python.org, The Python Tutorial, rozdz. 5.1 (More on Lists, list.sort)
Ćwiczenie · przy komputerze · 12 minut

Ćwiczenie: pomiary temperatury

Utwórz plik temperatures.py i wpisz do niego listę: temps = [21.5, 19.0, 23.5, 18.0]. Potem dopisz rozwiązania trzech zadań, uruchamiając program po każdym z nich.

  1. Wypisz każdy pomiar w osobnej linii, używając pętli po elementach listy.
  2. Policz sumę i średnią pomiarów bez gotowych funkcji: użyj licznika i pętli.
  3. Znajdź najwyższy pomiar własną pętlą, porównaj wynik z max(temps), a na koniec posortuj listę i wypisz ją.
Jak to sprawdzić

Po każdym zadaniu uruchom program i porównaj to, co widzisz na ekranie, z tym, co policzyłeś w głowie. Jeśli średnia wyszła inna niż 20.5, sprawdź, czy zerujesz licznik przed pętlą, a nie w środku.

Sprawdzenie

Trzy pytania na koniec

  1. Czym różni się for grade in grades: od for i in range(len(grades)):?
  2. Dlaczego total = 0 stoi przed pętlą, a nie w jej wnętrzu?
  3. Co wypisze print(grades.sort()) i dlaczego?
Podsumowanie

A jak to wygląda w produkcji?

Na lekcjiW produkcjiStatus
Pętla po liścieSklep przechodzi po liście produktów w koszyku i sumuje ceny przed zapłatącodziennie
sum i średniaDziennik elektroniczny liczy średnią z ocen dokładnie tak: suma podzielona przez liczbę ocencodziennie
max i minPrognoza pogody pokazuje temperaturę najwyższą i najniższą z pomiarów całej dobycodziennie
sortLista plików w oknie systemu układa się po nazwie albo po dacie, gdy klikniesz nagłówek kolumnystandard