, 3 min czytaniaprogramowaniepętle
Błąd o jeden: skąd się bierze i jak go nie popełnić
Pętla wykonuje się raz za dużo albo raz za mało. Prawie zawsze winne są te same trzy miejsca.
Błąd o jeden (ang. off-by-one) nie wywala programu. Program działa, tylko wynik jest odrobinę inny. I właśnie dlatego na egzaminie jest tak kosztowny: nic nie miga na czerwono.
Miejsce pierwsze: prawy koniec range
1for i in range(1, 5):2 print(i) # 1, 2, 3, 4 (piątki nie będzie)
range(a, b) kończy się na b − 1. Jeśli chcesz dojść do n włącznie, piszesz range(1, n + 1). To ta sama różnica, o którą potykają się osoby przepisujące pseudokod z arkusza.
Miejsce drugie: ostatni indeks listy
len(lista) to liczba elementów, a nie największy indeks. Ostatni element ma indeks len(lista) − 1, więc odwołanie do lista[len(lista)] zawsze kończy się błędem IndexError.
Miejsce trzecie: granica przedziału w warunku
Różnica między > a >= to dokładnie jeden przypadek: ten na progu. Przy ocenach, progach punktowych i przedziałach wiekowych to właśnie tam siedzi punkt do stracenia. Zawsze sprawdź swój warunek na samej granicy, a nie w środku przedziału.