Rozdział 12 · Wiele fascynujących mini-projektów!

Projekty: książka ocen i wózek na zakupy

Ten sam model danych — lista słowników — i ta sama metoda — akumulator, zastosowana w dwóch różnych zadaniach.

Zastosowanie
listdictциклынакопитель
Poziom
integracja
Rezultat
raport / potwierdzenie

Dwa projekty na tej samej stronie celowo: oba mają ten sam model danych — " lista słowniki — i ten sam sposób — przechowywanie (Rozdział 10), stosowany tylko w inny sposób.

: Książka ocen

students (lista)
[0]
name → "Anna"
score → 95
[1]
name → "Bob"
score → 82
Lista słowników – dlaczego list? Ponieważ uczniowie tworzą uporządkowaną sekwencję rekordów
zhurnal_ocenok.py
students = [
    {"name": "Anna", "score": 95},
    {"name": "Bob", "score": 82},
    {"name": "Maria", "score": 91},
    {"name": "Leo", "score": 58},
]

for student in students:
    print(f"{student['name']}: {student['score']}")

scores = [student["score"] for student in students]
average = sum(scores) / len(scores)
print(f"Średnia ocena: {average:.1f}")
print(„Maximum:”, max(scores))
print(„Minimum:”, min(scores))

otlichniki = [s for s in students if s["score"] >= 90]
print(„Wybitni uczniowie:”, len(otlichniki))
Klasyfikacja przez if/elif
Jeśli potrzebujesz nie tylko filtrowania, ale oceny „doskonały/dobry/poprawka” if/elif/else z rozdziału 9 nie dotyczy prawdziwych kryteriów szkolnych, lecz trenowania algorytmu klasyfikacji.

Projekt: Wózek na zakupy

produktcena × ilośćsuma w wierszuline totalprzechowywaniecart total
Każdy produkt podawa swoją własną ilość, akumulator sumuje je wszystkie razem
korzina_pokupok.py
cart = [
    {"name": „Mleko”, "price": 4.50, "qty": 2},
    {"name": „Chleb”, "price": 2.20, "qty": 1},
    {"name": „Cheese”, "price": 9.90, "qty": 1},
]

total = 0
for item in cart:
    line_total = item["price"] * item["qty"]
    total += line_total
    print(f"{item['name']:<10} {item['qty']} x {item['price']:.2f} = {line_total:.2f}")

print(f"Łącznie: {total:.2f}")
Молоко     2 x 4.50 = 9.00
Хлеб       1 x 2.20 = 2.20
Сыр        1 x 9.90 = 9.90
Итого: 21.10
Check to przykład deterministycznego wykonania
To jest arytmetyka edukacyjna, nie Decimal
Do rzeczywistych obliczeń pieniężnych stosuje się bardziej precyzyjne typy (na przykład, decimal.Decimal), aby uniknąć nieścisłości float (Rozdział 5). Stosuje się tu zwykłą arytmetykę – nie zmienia to celu rozdziału 12: skupia się na strukturze programu, a nie na dokładności monetarnej.

Debug Lab

Dlaczego w tym kodzie total na końcu jest równe sumie tylko OSTATNI PRODUKT?

debug_lab_korzina.py
for item in cart:
    total = 0
    total += item["price"] * item["qty"]
Napęd jest zerowany wewnątrz pętli
Ten sam błąd, który już napotkano w §12.2 i §12.5: total = 0 znajduje się wewnątrz ciała pętli, więc jest odtwarzany przy każdej iteracji. Napęd musi zostać zainicjowany RAZ, przed pętlą.
Praktyka: dziennik ocen — średnia, maksimum, minimum, najlepsi uczniowie
interaktywny laptop bezpośrednio w przeglądarce – Python 3.14 przez Pyodide, bez instalacji
Otwórz praktykę →
Praktyka: koszyk – paragon i całkowita kwota
interaktywny laptop bezpośrednio w przeglądarce – Python 3.14 przez Pyodide, bez instalacji
Otwórz praktykę →