Rozdział 12 · Wiele fascynujących mini-projektów!
Budowanie projektu krok po kroku
Małymi, sprawdzalnymi krokami zamiast 80 linii naraz — i systemowy sposób znalezienia i naprawienia błędu, kiedy coś poszło nie tak.
Nie piszcie 80 linii, a potem wciśnijcie „Uruchom”
Profesjonalny nawyk, który powinien wypracować już od pierwszego dużego projektu: stopniowy rozwój małymi krokami, każdy z nich naraz jest sprawdzana.
Działająca mała wersja jest lepsza niż niedziałająca duża
Jeśli po każdym małym kroku program działa i robi to, czego się spodziewałeś, zawsze dokładnie wiesz, gdzie szukać przyczyny, jeśli coś się zepsuje w kolejnym kroku.
Wersje: najpierw działa, potem — lepiej
| Wersja | Co w nim jest |
|---|---|
| V1 | minimalna wersja działająca jest sednem pomysłu, bez dekoracji |
| V2 | Bardziej niezawodna walidacja danych wejściowych, obsługa przypadków brzegowych |
| V3 | dodatkowe funkcje, ulepszony output |
Taką pierwszą działającą wersję czasami nazywa się MVP (minimal working version) brzmi: „najpierw osiągniemy małą, ale działającą wersję”
Testowanie projektu na przykładach
Dla każdego nietrywialnego projektu warto wcześniej przemyśleć kilka scenariuszy — co podać na wejście i co powinno wyjść:
| Scenariusz | Loguj | Oczekiwany wynik |
|---|---|---|
| Secret 50, Mniej Prób | guess = 20 | „za mało” |
| Secret 50, spróbuj więcej | guess = 70 | „za dużo” |
| sekret 50, próba poprawna | guess = 50 | zwycięstwie cykl się kończy |
Przypadki brzegowe
Zwykłe przykłady nie wystarczą — warto to sprawdzić wprost: pusty wpis, zero, liczba ujemna tam, gdzie nie jest oczekiwana, powtarzanie danych, pusty lista, nieznane polecenie, wartość dokładnie na granicy zakresu. Będziemy wracać do tego pomysłu w każdym głównym rozdziale roboczym.
Workflow debugowania
Krok po kroku:
Sześć Kroków Debugowania – Pracuj przy dowolnym projekcie w tym rozdziale
1
Odtwarzaj błąd
powtarzać to regularnie
2
Inspekcja wartości
print() właściwe zmienne
3
Znajdź pierwszy zły stan
gdzie oczekiwania różniły się od faktu
4
Izolować warunek/pętlę
który łańcuch znaków jest winny
5
Napraw jeden powód
nie przepisywać wszystkiego
6
Uciekaj jeszcze raz
upewnij się, że to naprawione
Debugowanie print()-
print_otladka.py
for word in words:
print("DEBUG:", word, counts.get(word)) # Tymczasowa diagnoza
counts[word] = counts.get(word, 0) + 1
Usuń print() debugowania po znalezieniu przyczyny
Tymczasowe
print("DEBUG:", ...) w pętli — najpewniejszy sposób, aby zobaczyć, co się naprawdę dzieje. Usuń takie linie, gdy błąd zostanie znaleziony i poprawiony — w przeciwnym razie zaśmiecają prawdziwe wyjście programu.Debug Lab: znajdź błąd
W poniższym programie wynik powinien rosnąć przy każdej poprawnej odpowiedzi, ale z jakiegoś powodu zawsze
Pozostałości 1. Zanim czytasz dalej, spróbuj znaleźć powód
siebie.
debug_lab_schet.py
answers = ["python", "git", "sql"]
user_answers = ["python", "python", "sql"]
for correct, given in zip(answers, user_answers):
score = 0
if given == correct:
score += 1
print(„Wynik końcowy:”, score)
Przyczyna: Licznik resetuje się wewnątrz pętli
score = 0 jest WEWNĄTRZ ciała pętli, oznacza, że jest odtwarzana przy każdej iteracji, a poprzedni postęp zostaje utracony. Licznik musi zostać zainicjowany RAZ, zanim pętla będzie tym samym błędem co „dlaczego cart total resetuje się przy każdej iteracji”Lista kontrolna gotowości projektu
Zanim powiesz „projekt jest gotowy”
- Czy program spełnia wymagania (lista kontrolna przyjęć)?
- Czy normalne, „szczęśliwe”
- Sprawdzone przypadki graniczne (pusty, zero, powtórzenie, nieznana komenda)?
- Nazwy zmiennych są zrozumiałe bez dodatkowych wyjaśnień?
- Czy istnieje powtarzalny fragment kodu, który można by usunąć?
- Czy użyto odpowiedniej kolekcji (lista / zbiór / słownik)?
- Czy cykl naprawdę kończy się we właściwym momencie?
- Czy warunki sprawdzają dokładnie to, co trzeba?
- Wniosek jest jasny – czy użytkownik widzi, co się wydarzyło?
- Czy druga osoba będzie w stanie przeczytać i zrozumieć ten program?
Praktyka: Debug Lab - Znajdź i napraw błąd licznika
interaktywny laptop bezpośrednio w przeglądarce – Python 3.14 przez Pyodide, bez instalacji