Lekcja 8 / finał
Finał: mini-aplikacja do śledzenia postępu kursu
Składasz wcześniejsze elementy w jeden mały program: lekcje, kurs, oznaczanie ukończenia, wypisywanie listy i liczenie procentu postępu.
Sytuacja z pracy
Chcesz stworzyć prosty tracker. Kurs ma kilka lekcji. Uczeń może ukończyć jedną z nich. Program pokazuje status każdej lekcji i liczy procent postępu.
Plan programu
- Klasa
Lessontrzyma tytuł i status ukończenia. - Klasa
Coursetrzyma tytuł kursu i listę lekcji. - Kurs umie pokazać lekcje, oznaczyć jedną jako ukończoną i policzyć postęp.
Kod finałowy
class Lesson:
def __init__(self, title):
self.title = title
self.completed = False
def mark_completed(self):
self.completed = True
class Course:
def __init__(self, title, lessons):
self.title = title
self.lessons = lessons
def show_lessons(self):
for lesson in self.lessons:
if lesson.completed:
status = "ukończona"
else:
status = "do zrobienia"
print(lesson.title + " - " + status)
def mark_lesson_completed(self, title):
for lesson in self.lessons:
if lesson.title == title:
lesson.mark_completed()
return True
return False
def progress_percent(self):
completed_count = 0
for lesson in self.lessons:
if lesson.completed:
completed_count += 1
return round(completed_count / len(self.lessons) * 100, 2)
lessons = [
Lesson("Zmienne"),
Lesson("Warunki"),
Lesson("Listy i pętle")
]
course = Course("Python od podstaw", lessons)
course.mark_lesson_completed("Zmienne")
course.show_lessons()
print("Postęp:", course.progress_percent(), "%")
Wynik
Zmienne - ukończona
Warunki - do zrobienia
Listy i pętle - do zrobienia
Postęp: 33.33 %
Co tu połączyliśmy?
Tytuły kursu i lekcji.
Decyzja, czy lekcja jest ukończona.
Przejście po wszystkich lekcjach.
Dane i zachowanie w jednym miejscu.
Mini-zadanie
Zmień ukończoną lekcję z "Zmienne" na "Warunki". Sprawdź wynik i procent postępu.
Ćwiczenie końcowe
Dodaj metodę show_unfinished_lessons(), która wypisuje tylko lekcje do zrobienia.
Użyj pętli for i warunku if not lesson.completed.
Quiz finałowy
Dlaczego Course ma listę Lesson?
Bo kurs składa się z wielu lekcji. To przykład kompozycji: jeden obiekt zawiera inne obiekty.
Co robi mark_lesson_completed?
Szuka lekcji po tytule i oznacza ją jako ukończoną.
Dlaczego progress_percent używa pętli?
Bo musi przejść po wszystkich lekcjach i policzyć ukończone.
Co dalej?
To mały program, ale ma prawdziwą strukturę. Następny krok to zapis postępu do JSON albo prosty interfejs tekstowy, w którym użytkownik wybiera lekcję do oznaczenia jako ukończoną.