Debugowanie błędów logicznych
Program może działać bez żadnego błędu i nadal dawać błędny wynik. Nauka metodycznego znajdowania takich błędów.
Błąd logiczny — to nie jest błąd Python
Program if age > 18: jest wykonane perfekcyjnie i nie zdradza
Nie ma wątpliwości. Ale jeśli zgodnie z warunkami problemu „dostęp od 18. roku życia”
błąd logiczny: Python nie rozumiem, co miałeś na myśli.
| Typ błędu | Co się dzieje | Przykład |
|---|---|---|
| SyntaxError | Python nawet nie potrafi zacząć wykonywać kodu | if age >= 18 (zapomniany dwukropek) |
| Runtime- błąd | program się zaczyna, ale mieści się w środku | age_text + 5 (str + int) |
| Błąd logiczny | program wykonuje się poprawnie, ale wynik jest błędny | if age > 18 zamiast >= |
Metoda debugowania warunków
Gdy wynik warunku wydaje się niewłaściwy, nie zgaduj — wyprowadź wartości pośrednie:
age = 20
has_ticket = False
eligible = age >= 18 and has_ticket
print("age >= 18:", age >= 18)
print("has_ticket:", has_ticket)
print("eligible:", eligible)
# age >= 18: True
# has_ticket: False
# eligible: False
Rozkładając skomplikowany stan na części i dedukując każdą osobno, możesz od razu zobaczyć, CO dokładnie sprawiło, że wynik był fałszywy.
Znacząco nazywać zmienne booleowskie
| Dobre imię | Zła reputacja |
|---|---|
is_ready | flag1 |
has_ticket | thing |
can_enter | value2 |
needs_update | x |
Konsolki is_, has_,
can_, needs_ - opcjonalne
składnia, ale przydatna zasada: od razu widzisz, co zmienna przechowuje
True/False.
Zapisz zespolony warunek do zmiennej
can_enter = age >= 18 and has_ticket
if can_enter:
print(„Przechodzicie”)
can_enter czyta od razu – nie trzeba składać ponownie
ekspresja age >= 18 and has_ticket za każdym razem, gdy
Wróć do tego kodu.
status = "adult" if age >= 18 else "minor". To nie jest zamiennik zwykłego if/else — jedynie wygoda dla jednej linii.match/case w niektórych sytuacjach wielozmiennych. Przeanalizujemy to szczegółowo później — na razie wystarczy wiedzieć, że istnieje.