Ga naar hoofdinhoud

Er gaat iets mis — top-3 fouten

Leerdoel: je herkent valkuilen bij het werken met twee accumulators tegelijk.

1. Twee aparte for-lussen

Geen foutmelding — wél het hele punt van dit algoritme gemist.

Voorbeeld + uitleg
def max_en_min_traag(lijst):
groot = lijst[0]
for waarde in lijst: # pass 1
if waarde > groot:
groot = waarde

klein = lijst[0]
for waarde in lijst: # pass 2
if waarde < klein:
klein = waarde

return klein, groot

Werkt prima — maar je hebt elk element twee keer gelezen. Bij grote data verdubbel je je werk zonder reden.

Fix: één for-lus, twee accumulators, twee vergelijkingen per element.

def max_en_min(lijst):
klein = groot = lijst[0]
for waarde in lijst:
if waarde < klein:
klein = waarde
elif waarde > groot:
groot = waarde
return klein, groot

2. Onveilige startwaardes

klein = 0
groot = 0
Voorbeeld + uitleg
def max_en_min_fout(lijst):
klein = 0 # ← fout
groot = 0 # ← fout
for waarde in lijst:
if waarde < klein:
klein = waarde
elif waarde > groot:
groot = waarde
return klein, groot

print(max_en_min_fout([-3, -1, -7])) # (-7, 0) — groot is fout
print(max_en_min_fout([3, 5, 7])) # (0, 7) — klein is fout

Twee bugs in één:

  • Lijst met enkel negatieven → groot blijft 0, terwijl -1 het echte maximum is.
  • Lijst met enkel positieven → klein blijft 0, terwijl 3 het echte minimum is.

Fix: start beide op lijst[0]. Gegarandeerd een echte waarde uit de lijst.

klein = groot = lijst[0]

3. if … if … in plaats van if … elif …

Geen foutmelding — wel één extra vergelijking per element. Geen catastrofe, maar verspilling.

Voorbeeld + uitleg
for waarde in lijst:
if waarde < klein:
klein = waarde
if waarde > groot: # ← apart 'if' i.p.v. 'elif'
groot = waarde

Werkt qua antwoord. Maar voor elk element worden beide checks gedaan, ook als de eerste al raak was. Met elif slaan we de tweede over als de eerste true was.

Fix: gebruik elif.

for waarde in lijst:
if waarde < klein:
klein = waarde
elif waarde > groot:
groot = waarde

Waarom is dat veilig? Een waarde kan niet tegelijk kleiner dan klein én groter dan groot zijn (want klein <= groot).

Door naar stap 10: cheatsheet →