Er gaat iets mis — top-3 fouten
Leerdoel: je herkent veelvoorkomende valkuilen bij het accumulator- patroon en begrijpt waarom ze optreden.
1. max_tot_nu_toe = 0 als startwaarde
Geen foutmelding — wél een fout antwoord op lijsten met enkel negatieve getallen.
Voorbeeld + uitleg
def vind_maximum_fout(lijst):
maximum = 0 # ← fout!
for waarde in lijst:
if waarde > maximum:
maximum = waarde
return maximum
print(vind_maximum_fout([-3, -1, -7])) # geeft 0 — fout!
Geen enkele waarde is groter dan 0, dus de if is nooit waar →
maximum blijft 0. Maar 0 zit niet in de lijst!
Fix: gebruik lijst[0] als startwaarde. Dan is je startwaarde
altijd een echte waarde uit de lijst.
maximum = lijst[0]
2. max als variabelenaam
max = 5 # technisch werkt het, maar nu kun je max() niet meer gebruiken!
Voorbeeld + uitleg
def slecht_idee(lijst):
max = lijst[0]
for waarde in lijst:
if waarde > max:
max = waarde
return max
# Werkt prima — TOT je later in dezelfde functie:
print(max([1, 2, 3])) # TypeError: 'int' object is not callable
max is een ingebouwde functie in Python. Door er een variabele van
te maken, schaduw je die functie — verderop in je code kun je hem niet
meer gebruiken.
Fix: gebruik een duidelijke andere naam. maximum, grootste,
max_waarde, max_tot_nu_toe.
3. IndexError op lege lijst
IndexError: list index out of range
Voorbeeld + uitleg
def vind_maximum(lijst):
maximum = lijst[0] # ← crasht hier op []
...
vind_maximum([]) # IndexError: list index out of range
Op een lege lijst bestaat lijst[0] niet. Het algoritme heeft geen
betekenis op een lege input — er is geen maximum.
Fix 1: vang de lege lijst af voor je begint.
def vind_maximum(lijst):
if len(lijst) == 0:
return None # of: raise ValueError("lijst is leeg")
maximum = lijst[0]
for waarde in lijst:
if waarde > maximum:
maximum = waarde
return maximum
Fix 2 (Pythonisch): probeer en vang de fout.
def vind_maximum(lijst):
if not lijst: # 'lege lijst' is falsy in Python
return None
...
Welke fix je kiest is een ontwerpkeuze: wil je dat je functie netjes
None returnt, of wil je dat de aanroeper duidelijk weet dat hij een lege
lijst gaf?
Door naar stap 10: cheatsheet →