Technikum Klasa II 45 minut PP: II.1+II.2 | s. 343

Lekcja 2: Zaawansowane programowanie - struktury danych, listy

Listy, slowniki, krotki i wyrazenia listowe w Pythonie

📋 Podstawa programowa: II.1+II.2
kolejkalistaprogramowaniestosstruktury danych
00:00
Wprowadzenie
5 min
00:05
Teoria
15 min
00:20
Cwiczenia
15 min
00:35
Podsumowanie
10 min
📚

Teoria

Listy w Pythonie

Lista to uporzadkowany zbior elementow, ktory moze przechowywac dane roznych typow. Listy sa mutowalne - mozna je zmieniac po utworzeniu:

oceny = [5, 4, 3, 5, 6, 4]
imiona = ["Anna", "Jan", "Kasia"]
mieszana = [1, "tekst", True, 3.14]

# Operacje na listach
oceny.append(5)          # dodaj element na koniec
oceny.insert(0, 6)       # wstaw na pozycje 0
oceny.remove(3)          # usun pierwsza trojke
ostatnia = oceny.pop()   # usun i zwroc ostatni element
oceny.sort()             # sortuj rosnaco
print(len(oceny))        # dlugosc listy

Wycinki (slicing)

Wycinki pozwalaja na pobranie fragmentu listy:

dane = [10, 20, 30, 40, 50, 60, 70]
print(dane[2:5])    # [30, 40, 50]
print(dane[:3])     # [10, 20, 30]
print(dane[4:])     # [50, 60, 70]
print(dane[::2])    # [10, 30, 50, 70] - co drugi
print(dane[::-1])   # [70, 60, 50, 40, 30, 20, 10] - odwrocona

Slowniki (dict)

Slownik przechowuje pary klucz-wartosc. Klucze musza byc unikalne:

uczen = {
    "imie": "Jan",
    "nazwisko": "Kowalski",
    "wiek": 17,
    "oceny": [4, 5, 3, 5]
}

print(uczen["imie"])         # Jan
uczen["klasa"] = "2TI"       # dodaj nowy klucz
del uczen["wiek"]            # usun klucz

# Iteracja po slowniku
for klucz, wartosc in uczen.items():
    print(f"{klucz}: {wartosc}")

Krotki (tuple)

Krotka to niemutowalna (niezmienna) lista. Uzywamy jej, gdy dane nie powinny byc modyfikowane:

wspolrzedne = (52.23, 21.01)  # Warszawa
kolory_rgb = (255, 128, 0)
x, y = wspolrzedne  # rozpakowywanie krotki

Wyrazenia listowe (list comprehension)

Zwiezly sposob tworzenia list na podstawie istniejacych danych:

# Kwadraty liczb od 1 do 10
kwadraty = [x**2 for x in range(1, 11)]
# [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

# Tylko liczby parzyste
parzyste = [x for x in range(1, 21) if x % 2 == 0]
# [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]

# Dlugosci slow
slowa = ["Python", "jest", "super"]
dlugosci = [len(s) for s in slowa]
# [6, 4, 5]
Kiedy uzyc czego? Lista - gdy dane moga sie zmieniac. Krotka - gdy dane sa stale. Slownik - gdy potrzebujesz dostepu po kluczu. Wyrazenie listowe - gdy tworzysz liste na podstawie innej kolekcji.
✏️

Zadania

Latwe

Zadanie 1: Statystyki listy

Napisz program, ktory pobiera od uzytkownika ciag liczb (zakonczony zerem) i zapisuje je do listy. Nastepnie oblicz i wyswietl: srednia, minimum, maksimum, mediane oraz sume.

Pokaz przykladowe rozwiazanie
liczby = []
while True:
    n = float(input("Podaj liczbe (0 konczy): "))
    if n == 0:
        break
    liczby.append(n)

if liczby:
    liczby.sort()
    n = len(liczby)
    srednia = sum(liczby) / n
    mediana = liczby[n // 2] if n % 2 == 1 else (liczby[n//2 - 1] + liczby[n//2]) / 2
    print(f"Suma: {sum(liczby)}")
    print(f"Srednia: {srednia:.2f}")
    print(f"Min: {min(liczby)}, Max: {max(liczby)}")
    print(f"Mediana: {mediana}")
Srednie

Zadanie 2: Dziennik ucznia

Stworz slownik reprezentujacy dziennik ucznia z przedmiotami jako kluczami i listami ocen jako wartosciami. Napisz funkcje: dodaj_ocene(dziennik, przedmiot, ocena), srednia_przedmiot(dziennik, przedmiot), najlepsza_srednia(dziennik).

Pokaz przykladowe rozwiazanie
def dodaj_ocene(dziennik, przedmiot, ocena):
    if przedmiot not in dziennik:
        dziennik[przedmiot] = []
    dziennik[przedmiot].append(ocena)

def srednia_przedmiot(dziennik, przedmiot):
    oceny = dziennik.get(przedmiot, [])
    return sum(oceny) / len(oceny) if oceny else 0

def najlepsza_srednia(dziennik):
    najlepszy = max(dziennik, key=lambda p: srednia_przedmiot(dziennik, p))
    return najlepszy, srednia_przedmiot(dziennik, najlepszy)

dziennik = {}
dodaj_ocene(dziennik, "Matematyka", 4)
dodaj_ocene(dziennik, "Matematyka", 5)
dodaj_ocene(dziennik, "Informatyka", 6)
dodaj_ocene(dziennik, "Informatyka", 5)
print(f"Srednia z matematyki: {srednia_przedmiot(dziennik, 'Matematyka'):.2f}")
przedmiot, sr = najlepsza_srednia(dziennik)
print(f"Najlepsza srednia: {przedmiot} ({sr:.2f})")
Srednie

Zadanie 3: Wyrazenia listowe - filtrowanie

Uzyj wyrazen listowych do: a) stworzenia listy kwadratow liczb nieparzystych od 1 do 20, b) wybrania z listy imion tylko tych zaczynajacych sie na "A", c) stworzenia slownika {liczba: liczba**3} dla liczb od 1 do 10.

Pokaz przykladowe rozwiazanie
# a) Kwadraty liczb nieparzystych
kwadraty = [x**2 for x in range(1, 21) if x % 2 == 1]
print(kwadraty)

# b) Imiona na "A"
imiona = ["Anna", "Bartek", "Ala", "Adam", "Basia", "Alicja"]
na_a = [im for im in imiona if im.startswith("A")]
print(na_a)

# c) Slownik szescianow
szesciany = {x: x**3 for x in range(1, 11)}
print(szesciany)
Trudne

Zadanie 4: Analiza tekstu

Napisz program, ktory wczytuje tekst od uzytkownika i za pomoca slownika zlicza czestotliwosc wystapien kazdego slowa. Wyswietl 5 najczesciej wystepujacych slow (uzyj metody sorted() z parametrem key).

Pokaz przykladowe rozwiazanie
tekst = input("Podaj tekst: ").lower()
slowa = tekst.split()
czestotliwosc = {}
for slowo in slowa:
    slowo = slowo.strip(".,!?;:")
    czestotliwosc[slowo] = czestotliwosc.get(slowo, 0) + 1

top5 = sorted(czestotliwosc.items(), key=lambda x: x[1], reverse=True)[:5]
print("Top 5 najczestszych slow:")
for slowo, ile in top5:
    print(f"  {slowo}: {ile}")
🎥

Materialy wideo

15. Kurs Python 3 - słownik (kolekcja) - dictionary
Kanał o Wszystkim
kurs podstaw Pythona w godzinę
Matura z Lewusem
🎧

Podcasty

✔️

Quiz - sprawdz sie!

📜

Podstawa programowa

← Lekcja 1: Powtorzenie programowania Lekcja 3: Algorytmy sortowania →