Ga naar hoofdinhoud

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

Python
Code-omgeving wordt voorbereid…

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.

Python
Code-omgeving wordt voorbereid…

Klaar? Tijd om alle bouwstenen samen te zien.

Door naar stap 7: het complete algoritme →