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
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
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
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
Praktyka: koszyk – paragon i całkowita kwota
interaktywny laptop bezpośrednio w przeglądarce – Python 3.14 przez Pyodide, bez instalacji