In het vorige hoofdstuk heb je kennis gemaakt met functies. Een groot voordeel van met functies werken is dat je elk brok los van elkaar kunt bedenken, schrijven en testen. Zo is het makkelijker, als je een fout maakt, erachter te komen waar het zit en te bedenken hoe je het moet oplossen. We hebben in de vorige hoofdstuk gekeken naar functies met parameters (die specifieke informatie moeten krijgen om dingen te doen) en zonder parameters. We gaan nu uitgebreider in op retourwaarden van functies, bereik van variabelen en toevoegen van commentaar.
VIDEOUITLEG: over retourwaarden en bereik van variabelen
Een variabele die je binnen een functie aanmaakt bestaat alleen binnen die functie. Zo'n variabele heet een lokale variabele. Na het blok worden de lokale variabelen vernietigd. Het bereik van een variabele is het blok code waarin de variabele is gedeclareerd, en alle blokken code die daarbinnen vallen. Het volgende plaatje laat het bereik van variabelen zien:
![]() |
![]() |
return
return
opleveren aan het hoofdprogramma.</p>
We bekijken nu het voorbeeld hieronder. Voor regelnummers: Klik op de balk boven de code en dan op L.
Een lokale variabele verdubbelde_punten
wordt in de functie op regel 3 gedeclareerd, waar het de waarde 26 krijgt (punten * 2
). Na regel 4 houdt het inspringen op, dat is het einde van de functie. Als de functie ophoudt, bestaat verdubbelde_punten
niet meer. Om de verdubbelde waarde in het hoofdprogramma te kunnen printen (op regel 8) moet zowel:
return
(regel 4), ennieuwe_punten
(regel 7). Merk op dat je deze variabele een andere naam mag geven.### FUNCTIEDEFINITIE
def verdubbel( punten ):
verdubbelde_punten = punten * 2
return verdubbelde_punten
### HOOFDPROGRAMMA
nieuwe_punten = verdubbel( 13 )
print( nieuwe_punten )
Met parameters kun je vanuit het hoofdprogramma waarden (extra informatie) aan een functie geven. Bekijk het voorbeeld hierboven nogmaals:
verdubbel()
(regel 6).
punten
wordt gedeclareerd in de functiedefinitie waar het de waarde 13 krijgt (regel 2).
punten
wordt gebruikt voor het berekenen van verdubbelde_punten
(regel 3).
verdubbel()
bestaat punten
niet meer (regel 4).Zie het volgende filmpje voor extra uitleg over functies en parameters:
### FUNCTIEDEFINITIE
def bepaalKleur():
kleur = "blauw"
print("1e keer:", kleur)
### HOOFDPROGRAMMA
print("2e keer:", kleur)
Een functie kan informatie opleveren, dat informatie heet de retourwaarde. Dat resultaat moet je in je hoofdprogramma in een variabele opslaan. In je programma kun je later met dat variabele verder werken.
In de code hieronder wordt de functie kiesWillekeurigeCompliment()
aangeroepen in de hoofdprogramma. De retourwaarde van kiesWillekeurigeCompliment()
is een gekozen_compliment
. De retourwaarde wordt teruggeven aan het hoofdprogramma en moet opgeslagen worden in de variabele compliment_van_de_dag
. De bijbehorende stroomdiagram zie je onder de code.
import random
### FUNCTIEDEFINITIE
#kiest een willekeurige compliment
def kiesWillekeurigeCompliment():
willekeurig = random.randint(1,3) #kies een willekeurig getal: 1,2 of 3
if willekeurig == 1:
gekozen_compliment = "lief"
elif willekeurig == 2:
gekozen_compliment = "leuk"
else:
gekozen_compliment = "slim"
return gekozen_compliment
### HOOFDPROGRAMMA
compliment_van_de_dag = kiesWillekeurigeCompliment()
print("Jij bent "+ compliment_van_de_dag + "!" )
![]() |
![]() |
gooiDobbelsteen()
dat een willekeurig een getal tussen de 1 en 6 bepaalt en deze retourneert. Het linker stroomdiagram hieronder toont de werking van de functie gooiDobbelsteen()
.
gooiDobbelsteen
aanroept en het resultaat in de variabele eersteDobbelworp
opslaat.
gooiDobbelsteen
een tweede keer aanroept en het resultaat in de variabele tweedeDobbelworp
opslaat.
![]() |
![]() |
Het linker stroomdiagram beschrijft de functie gooiDobbelsteen()
, het rechter beschrijft het hoofdprogramma.
Voor de meeste berekeningen heb je informatie (parameters) nodig en lever je ook een retourwaarde (resultaat) op.
Bekijk de code hieronder. De functie plakWoordenAanElkaar()
krijgt twee woorden als parameters binnen, plakt deze aan elkaar en slaat het samengestelde woord op in de variabele resultaat
.
### FUNCTIEDEFINITIE
def plakWoordenAanElkaar( woord1, woord2 ):
resultaat = woord1 + woord2
return(resultaat)
### HOOFDPROGRAMMA MET AANROEP VAN FUNCTIE
samenstelling = plakWoordenAanElkaar( "fiets", "bel" )
print(samenstelling)
We bekijken hoe de code wordt uitgevoerd:</p>
plakWoordenAanElkaar()
aangeroepen met twee strings.
woord1
wordt opgeslagen, en de tweede string "bel" in variabele woord2
.
resultaat
return
de waarde van resultaat
opgeleverd.
woord1
, woord2
en resultaat
werden in de functie gemaakt en bestaan alleen in de functie. Na regel 4 bestaan ze niet meer.
resultaat
, namelijk "fietsbel" teruggegeven aan het hoofdprogramma. Om "fietsbel" in het hoofdprogramma te onthouden wordt het resultaat opgeslagen in de variabele samenstelling
.
samenstelling
afgedrukt.
Merk op dat:
woord1
, woord2
en resultaat
worden in de functie gemaakt en bestaan alleen in de functie. Dit heten een lokale variabelen.
return
wordt opgeleverd moet in het hoofdprogramma in een variabele worden opgeslagen. In dit voorbeeld in de variabele samenstelling
op regel 7.
Lees de code hieronder.
berekenIets()
. Pas het ook aan in de code. Run je code op te controleren dat het nog goed werkt.
korting
? Dat wil zeggen, op welke regelnummer wordt het aangemaakt? En na welk regelnummer houdt het op met bestaan?
### FUNCTIEDEFINITIE
def berekenIets(a, perc_korting):
korting = a * perc_korting/100
b = a - korting
return b
### HOOFDPROGRAMMA
prijs_met_korting = berekenIets(20.00, 30)
print("Met korting kost het product nu " + str(prijs_met_korting) + " euro" )
De functie telAantalWielen()
telt, aan de hand van het aantal fietsen, hoeveel wielen er zijn en print deze. Het aantal_wielen
is een lokale variabele en bestaat dus alleen binnen de functie.
Maar, op regel 8 willen we het aantal kunnen printen in een volzin. De uitvoer van je programma moet zijn: "Met 10 fietsen heb je 20 wielen."
aantal_wielen
op regel 8 te kunnen gebruiken moeten er 2 dingen gebeuren:
telAantalWielen()
, moet de variabele aantal_wielen
worden opgelevert (het wordt nu alleen op regel 4 geprint, maar niet opgeleverd), en
aantal_wielen = ...
)
### FUNCTIEDEFINITIE
def telAantalWielen( aantal_fietsen ):
aantal_wielen = aantal_fietsen * 2
print( aantal_wielen )
### HOOFDPROGRAMMA
telAantalWielen( 10 ) # roep functie aan
#print("Met zoveel fietsen heb je", berekend_aantal_wielen, "wielen." )
Je cijfer op een wiskundetoets bestaande uit 60 punten wordt zo berekend:
cijfer = ( aantal_punten*9 ) / 60 + 1
Heb je 40 punten gehaald, dan is je cijfer een 7.
DEEL A: Schrijf een functie berekenCijfer( aantal_punten )
dat, gegeven het aantal behaalde punten, je cijfer uitrekent.
:
aan het einde van de regel
DEEL B: Roep de functie aan en print je eindcijfer.
berekenCijfer( 40 )
en sla het resultaat op in een variabele
### FUNCTIEDEFINITIE
#def ....
#cijfer = (aantal_punten*9) / 60 + 1
#return(...)
### HOOFDPROGRAMMA MET AANROEP VAN FUNCTIE
#roep hier je functie aan en sla het resultaat op in een variabele
#print(...)
Schrijf een functie die het volume van een balk berekent en oplevert:
Globale variabelen zijn waarden die je voor meerdere functies van je programma nodig hebt. Globale variabelen definieer je bovenaan je programma. Het verschil met lokale variabelen is dat lokale variabelen alleen zichtbaar zijn binnen de functie of blok code waarin ze gedeclareerd worden.
Het is een goede gewoonte om zo min mogelijk globale variabelen te gebruiken. Als je een variabele in een aantal functies gebruikt en de waarde aanpast, wordt het onoverzichtelijk wat er allemaal met die waarde gebeurt. Zo wordt het lastig om te redeneren over wat je code doet, en maakt het opsporen van fouten nog lastiger.
Als je een bepaalde waarde binnen meerdere functies wilt gebruiken kun je dat het beste doen door ze door te geven als parameters en retourwaardes. In het voorbeeld hieronder zie je hoe de prijs (zonder BTW) als parameter aan de functie wordt gegeven, en de prijs inclusief BTW wordt geretourneerd.
Constanten zijn waarden die gedurende het programma niet veranderen, maar die je in je programma wel op meerdere plekken gebruikt. De naam van een constante geef je met hoofdletters aan en zet je bovenaan je programma. Om het voorbeeld hieronder zie je dat er voor PERC_BTW
een constante wordt gebruikt.
Terwijl het programma draait zul je het percentage van de BTW niet veranderen. In tegenstelling, een score zal gedurende een spelletje wel veranderen. Maar, als de overheid kiest om de BTW aan te passen, dan kan dat heel makkelijk bovenaan de code teruggevonden worden en hoeft het maar op 1 plek aangepast worden.
#GLOBALE VARIABELEN
PERC_BTW = 21
### FUNCTIEDEFINITIE
#Doel: bereken prijs van een artikel met BTW, zoals in advertentie mag staan
def berekenPrijsMetBTW( prijs_zonder_BTW ):
prijs_met_BTW = prijs_zonder_BTW * ( (1+PERC_BTW)/100 )
return prijs_met_BTW
### HOOFDPROGRAMMA
advertentieprijs = berekenPrijsMetBTW( 20.00 )
print("Prijs (incl BTW):", advertentieprijs, " euro" )
Speel met een vriend of vriendin een paar keer steen-papier-schaar. Houd op een blaadje bij hoe vaak ieder gewonnen heeft en hoe vaak er gelijk is gespeeld.
Bekijk je scoreblad en bepaal wat de constanten en wat de variabelen zijn.
Voer de onderstaande code uit. Wat is er fout aan de volgende code? Waar komt "None" vandaan achter "De berekende oppervlakte"? Los het probleem in de functie op!
### FUNCTIEDEFINITIE
def oppervlakte_van_driehoek( basis, hoogte ):
opp = 0.5 * basis * hoogte
print( "Een driehoek met basis", basis, "en hoogte",
hoogte, "heeft een oppervlakte van", opp )
### HOOFDPROGRAMMA MET AANROEP VAN FUNCTIE
berekende_oppervlakte = oppervlakte_van_driehoek( 5, 4 )
print( "De berekende oppervlakte is:", berekende_oppervlakte )
Schrijf een programma dat een munt opgooit. Het linker stroomdiagram hieronder geeft aan hoe het hoofdprogramma eruitziet. Het rechter stroomdiagram toont de functie gooiMunt()
.
![]() |
![]() |
Schrijf hiervoor een functie gooiMunt()
die willekeurig een tekst "KOP" of
"MUNT" teruggeeft, zoals in het stroomdiagram hieronder wordt weergegeven. Maak gebruik van een willekeurig gekozen getal dat 0 of 1 wordt. Als deze 0 is, dan wordt het "KOP", anders "MUNT".
In je hoofdprogramma roep je de functie gooiMunt()
aan en druk je het resultaat
af.
Schrijf een programma dat de gebruiker om een email adres vraagt en controleert of deze geldig is. Het volgende stroomdiagram geeft het algoritme van het hoofdprogramma weer:
Om je code overzichtelijk te houden maak je natuurlijk gebruik van functies:
vraagInvoer()
dat de gebruiker om een invoer vraagt, de gebruiker netjes print wat hij heeft ingevoerd, en deze retourneert. Test je functie.
controleEmailadres()
dat een emailadres als parameter krijgt en op de eisen controleert. In het geval dat het emailadres niet voldoet geef de feedback over er precies mis mee is en return False
. Als het emailadres goed is meldt dat aan de gebruiker en return True
.
vraagInvoer()
en controleEmailadres()
. Als het emailadres geldig is, print Toegang verleend en anders Jammer.
isDeelbaarDoor7()
dat een getal als parameter krijgt, het resultaat True
retourneert als een gegeven getal deelbaar is door 7, en anders False
.
isDeelbaarDoor7()
aan vanuit je hoofdprogramma.
Tips:
Met modulo ( %
) kun je bepalen of iets even is of niet. Bijvoorbeeld:
getal%7
gelijk is aan 0, dan is getal deelbaar door 7.
getal%7
ongelijk is aan 0, dan is getal niet deelbaar door 7.
De Body Mass Index (BMI) geeft een schatting van het gezondheidsrisico van je lichaamsgewicht in verhouding tot je lichaamslengte. Schrijf een programma dat een gebruiker om zijn gegevens vraagt (deel A), de BMI berekend (deel B) en vervolgens een advies geeft (deel C). Het linker stroomdiagram geeft het algoritme voor het hoofdprogramma weer. Het rechter stroomdiagram laat zien hoe het advies gegeven wordt (deel C).
![]() |
![]() |
Deel A. Invoer vragen
DEEL B. BMI berekenen
De BMI bereken je door het gewicht in kilo’s te delen door de lengte in meters in het kwadraat. Als je bijvoorbeeld 1,62 meter lang bent en 56 kilo weegt, heb je een BMI van 21,4:
berekening: (56 /(1.62 * 1.62))
Deel C. Advies geven
Een BMI-score van 18,5 wordt als te licht gezien, tussen de 18,5 en de 25 heb je een gezond gewicht en daarboven heb je overgewicht.