Rozdział 9 · Słuchaj mojego rozkazu!

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łęduCo się dziejePrzykład
SyntaxErrorPython nawet nie potrafi zacząć wykonywać koduif age >= 18 (zapomniany dwukropek)
Runtime- błądprogram się zaczyna, ale mieści się w środkuage_text + 5 (str + int)
Błąd logicznyprogram wykonuje się poprawnie, ale wynik jest błędnyif age > 18 zamiast >=

Metoda debugowania warunków

Gdy wynik warunku wydaje się niewłaściwy, nie zgaduj — wyprowadź wartości pośrednie:

1. printznaczeniaage, has_ticket2. print warunekage >= 18 andhas_ticket3. Granice17, 18, 194. Uprośćto rozłożyć na czynniki pierwsze5. autor:Indywidualnekażdy podwarunek
Metoda debugowania warunków – od wyświetlania wartości po sprawdzanie każdej części osobno
otladka_uslovij.py
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_readyflag1
has_ticketthing
can_entervalue2
needs_updatex

Konsolki is_, has_, can_, needs_ - opcjonalne składnia, ale przydatna zasada: od razu widzisz, co zmienna przechowuje True/False.

Zapisz zespolony warunek do zmiennej

imenovannoe_uslovie.py
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.

TROCHĘ GŁĘBIEJ TO WYRAŻENIE WARUNKOWE
Gdy if/else jest już dobrze zrozumiały, warto znać zwartą formę dla PROSTEGO wyboru wartości: status = "adult" if age >= 18 else "minor". To nie jest zamiennik zwykłego if/else — jedynie wygoda dla jednej linii.
match/case na przyszłość
Istnieje także porównanie strukturalne w Python match/case w niektórych sytuacjach wielozmiennych. Przeanalizujemy to szczegółowo później — na razie wystarczy wiedzieć, że istnieje.
Praktyka: Debugowanie błędów logicznych
interaktywny laptop bezpośrednio w przeglądarce – Python 3.14 przez Pyodide, bez instalacji
Otwórz praktykę →