Ga naar hoofdinhoud

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 →