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.
Een variabele die je binnen een functie aanmaakt, bestaat daarbuiten niet.
In US1 tot US3 heb je geleerd functies te schrijven die één taak doen. Nu komt de vraag die daarbij hoort: waar leven de variabelen die je in zo'n functie gebruikt?
Elke functie heeft zijn eigen werkruimte, de lokale scope. Variabelen die je daarin aanmaakt bestaan alleen zolang de functie draait. Daarna zijn ze weg:
def calculate_average(readings):
total = 0
for value in readings:
total = total + value
average = total / len(readings)
readings = [45, 80, 12]
calculate_average(readings)
print(average)
Dit ziet er logisch uit, maar het crasht:
NameError: name 'average' is not defined
average — Python houdt hem niet vast.print(), terwijl de oorzaak in de functie zit.returnMet return stuur je de waarde naar buiten. Buiten de functie
vang je hem op in een nieuwe variabele:
def calculate_average(readings):
total = 0
for value in readings:
total = total + value
average = total / len(readings)
readings = [45, 80, 12]
calculate_average(readings)
print(average)
# NameError: name 'average'
# is not defined
def calculate_average(readings):
total = 0
for value in readings:
total = total + value
return total / len(readings)
readings = [45, 80, 12]
result = calculate_average(readings)
print(f"Gemiddelde: {result}")
# Gemiddelde: 45.666...
De variabele average bestaat nog steeds alleen binnen de functie. Wat naar
buiten gaat is de waarde — en die sla je op onder een naam die je zelf kiest.
Loop de drie momenten door en kijk welke variabelen op dat moment bestaan. Zet
return aan of uit om het verschil te zien:
return. Zie je een NameError? Kijk of de variabele
binnen een functie is aangemaakt.
De code hieronder telt sensorwaarden op, maar crasht op de laatste regel. Draai hem,
lees de foutmelding en los hem op met return. Deze tester draait geen echte
Python, maar rekent na wat jouw versie zou printen.
Probeer daarna: print total in plaats van je eigen variabele,
haal de return weer weg, of verander de waarden in readings.
Scenario: voordat de drone opstijgt wil je weten of het vluchtplan haalbaar is. Je hebt drie gegevens nodig: de totale afstand, de langste losse stap, en of het plan binnen het bereik van de accu valt. Drie berekeningen, dus drie functies — en elke functie moet zijn resultaat naar buiten kunnen geven.
Gegeven:
flight_plan = [
{"direction": "forward", "distance": 100},
{"direction": "left", "distance": 60},
{"direction": "up", "distance": 40},
{"direction": "forward", "distance": 80},
]
MAX_FLIGHT_DISTANCE = 250 # cm die de accu aankan
Je taak: schrijf de drie functies en gebruik ze in één overzicht. Bepaal zelf de parameters en wat elke functie teruggeeft.
Acceptatiecriteria:
MAX_FLIGHT_DISTANCE pastTotaal: 280 cm (max: 250 cm)