Wszystkie wpisy

, 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.

Zobacz to w działaniu

Na platformie każdy temat ma wizualizację i ćwiczenie, w którym sam zmieniasz dane. To płatny dostęp: 80 zł miesięcznie za moduł, z anulowaniem w każdej chwili.

Lekcja do tego wpisu

Pętle for i while

Kiedy znasz liczbę powtórzeń, a kiedy kręcisz się do spełnienia warunku.

Programowanie, Podstawy języka

Otwiera się na platformie po wykupieniu dostępu.

Czytaj dalej