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.