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 →
grootblijft0, terwijl-1het echte maximum is. - Lijst met enkel positieven →
kleinblijft0, terwijl3het 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 →