Als developer van het vliegscript, wil ik weten waar een variabele bestaat en wat een functie wel en niet kan veranderen, zodat mijn vluchtberekeningen nooit stilletjes met een oude of verkeerde waarde doorrekenen.
Waarom een functie een lijst wél kan wijzigen en een getal niet.
In taak 1 zag je dat variabelen binnen een functie lokaal zijn. Nu wordt het lastiger: wat gebeurt er met een waarde die je meegeeft als parameter? Het antwoord hangt af van het soort waarde — en dat verrast bijna iedereen de eerste keer.
def pay(balance, amount):
balance = balance - amount
print(f"Binnen de functie: € {balance}")
balance = 80
pay(balance, 25)
print(f"Buiten de functie: € {balance}")
# Binnen de functie: € 55
# Buiten de functie: € 80 ← onveranderd!
def add_entry(entries, text):
entries.append(text)
system_log = []
add_entry(system_log, "opgestart")
print(system_log)
# ['opgestart'] ← de lijst buiten de functie is echt veranderd
Een naam in Python wijst naar een object. Sommige objecten kun je aanpassen (mutable), andere niet (immutable):
int, float, str,
bool, tuple — je kunt het getal 80 niet veranderen in 55.list, dict, set —
je kunt er iets in stoppen of uithalen zonder een nieuw object te maken.Met = laat je een naam naar iets anders wijzen. Met .append()
of entries[0] = ... pas je het object zelf aan. Het eerste blijft binnen de
functie, het tweede is buiten zichtbaar.
def pay(balance, amount):
balance = balance - amount
# nieuwe waarde, nieuwe plek
# de naam buiten wijst nog
# steeds naar 80
balance = 80
pay(balance, 25)
print(balance) # 80
def pay(balance, amount):
return balance - amount
balance = 80
balance = pay(balance, 25)
print(f"Saldo: € {balance}")
# Saldo: € 55
Kies een type en kijk wat de functie met de waarde buiten doet:
return en vang de waarde op — dan werkt het voor élk type hetzelfde.
Twee functies: één werkt met een getal, één met een lijst. Draai de code en kijk welke van de twee waarden buiten de functie is veranderd. Deze tester draait geen echte Python, maar rekent na wat jouw versie zou printen.
Probeer daarna: voeg return toe aan pay()
en vang de waarde op, of roep pay() twee keer aan.
Scenario: tijdens het uitvoeren van een vluchtplan wil je twee dingen bijhouden: hoeveel accu er nog over is, en wat de drone allemaal gedaan heeft. Het accupercentage is een getal, het vluchtlogboek is een lijst — en die twee gedragen zich dus verschillend.
Gegeven:
flight_plan = [
{"direction": "forward", "distance": 100},
{"direction": "up", "distance": 50},
{"direction": "left", "distance": 80},
]
battery = 100 # procent
POWER_PER_100_CM = 8 # procent accu per 100 cm
MIN_BATTERY = 20 # onder deze grens niet meer vliegen
Je taak: schrijf een functie die het accuverbruik van één stap verwerkt en een functie die een regel aan het logboek toevoegt. Voer daarna het plan stap voor stap uit en houd beide bij.
Acceptatiecriteria:
return, niet door de parameter aan te passenMIN_BATTERY, dan stopt de vlucht en wordt dat gemeld; elke regel toont waarde én grens, zoals Accu: 76% (min: 20%)get_battery()) naast elkaar