1.6 Bouwsteen 4 — het "niet gevonden"-geval
Leerdoel: je voegt het laatste stukje toe: -1 teruggeven als het
doel niet in de lijst zit.
Wat we willen
Het probleem uit de vorige stap: bij een doel dat niet bestaat krijgen we
None. We willen liever -1 — een duidelijk signaal "niet gevonden".
Waar moet return -1 staan?
Dit is een valstrik waar veel mensen instinken. Probeer dit eerst:
def zoek(lijst, doel):
for i, waarde in enumerate(lijst):
if waarde == doel:
return i
return -1 # klopt deze plek?
Voorspel
Wat denk je dat dit print?
def zoek(lijst, doel):
for i, waarde in enumerate(lijst):
if waarde == doel:
return i
return -1
print(zoek([3, 1, 4, 1, 5], 4)) # zou 2 moeten zijn
print(zoek([3, 1, 4, 1, 5], 9)) # zou -1 moeten zijn
Antwoord
-1
-1
Allebei -1. Dat klopt niet — bij 4 verwachten we 2.
Waarom? return -1 zit binnen de for-lus. Bij de eerste iteratie
controleert hij 3 == 4 → niet waar → return -1 → de functie stopt
direct, na maar één iteratie. De rest van de lijst zie je nooit.
Run de buggy versie zelf
De fix
return -1 moet buiten de for-lus staan — op functie-niveau.
Daardoor wordt het pas bereikt als de hele lus is afgelopen zonder
match.
Tip
In Python bepaalt de inspringing de structuur:
- Dezelfde inspringing als
for→ op functie-niveau (na de lus). - Dezelfde inspringing als
if→ in de lus.
Visueel:
def zoek(lijst, doel):
for i, waarde in enumerate(lijst): # 4 spaties
if waarde == doel: # 8 spaties
return i # 12 spaties (in de if)
return -1 # 4 spaties (na de for-lus)
Antwoord
def zoek(lijst, doel):
for i, waarde in enumerate(lijst):
if waarde == doel:
return i
return -1 # buiten de for, dezelfde inspringing als 'for'
Probeer het zelf
Pas de code aan zodat allebei de testen kloppen.
Bouwsteen model
Niet gevonden
Plaats de fallback pas na de lus.
Geen enkel element was gelijk aan 9. Het resultaat is -1.
Als de actieve index voorbij het laatste element is, mag pas -1 terugkomen.
Input zoek([3, 1, 4, 1, 5], 4)
Verwacht 2
Input zoek([3, 1, 4, 1, 5], 9)
Verwacht -1
Input zoek([], 9)
Verwacht -1
Klaar? Tijd om alle bouwstenen samen te zien.
Door naar stap 7: het complete algoritme.