Ga naar hoofdinhoud

Er gaat iets mis — top-3 fouten

Leerdoel: je herkent veelvoorkomende valkuilen bij het accumulator- patroon en begrijpt waarom ze optreden.

maximum = 0 als startwaarde

Geen foutmelding, maar wel een fout antwoord op lijsten met alleen negatieve getallen.

Oorzaak: geen enkele waarde is groter dan 0, dus de if is nooit waar → maximum blijft 0. Maar 0 zit niet in de lijst.

Oplossing: gebruik lijst[0] als startwaarde. Dan is je startwaarde altijd een echte waarde uit de lijst.

# FOUT
def vind_maximum_fout(lijst):
maximum = 0 # onveilig!
for waarde in lijst:
if waarde > maximum:
maximum = waarde
return maximum

print(vind_maximum_fout([-3, -1, -7])) # 0 (fout: 0 zit niet in de lijst)

# GOED
def vind_maximum(lijst):
maximum = lijst[0]
for waarde in lijst:
if waarde > maximum:
maximum = waarde
return maximum

Meer uitleg: Bouwsteen 3 — startwaarde.

max als variabelenaam

TypeError: 'int' object is not callable

Oorzaak: 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 aanroepen.

Oplossing: gebruik een duidelijke andere naam. maximum, grootste, max_waarde, max_tot_nu_toe.

# FOUT
lijst = [4, 1, 3]
max = lijst[0]
for waarde in lijst:
if waarde > max:
max = waarde

print(max([1, 2, 3])) # hier is max een getal, geen functie meer

# GOED
def vind_maximum(lijst):
maximum = lijst[0]
for waarde in lijst:
if waarde > maximum:
maximum = waarde
return maximum

IndexError op lege lijst

IndexError: list index out of range

Oorzaak: op een lege lijst bestaat lijst[0] niet. Het algoritme heeft geen betekenis op een lege input — er is geen maximum.

Oplossing: vang de lege lijst af voor je begint, of return een speciale waarde.

# FOUT
def vind_maximum(lijst):
maximum = lijst[0] # crasht hier op []
...

vind_maximum([]) # IndexError

# GOED
def vind_maximum(lijst):
if not lijst: # 'lege lijst' is falsy in Python
return None
maximum = lijst[0]
for waarde in lijst:
if waarde > maximum:
maximum = waarde
return maximum

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 (via raise ValueError("lijst is leeg"))?

Door naar cheatsheet.