Oefeningen functies¶
Deze bundel bestaat uit drie soorten oefeningen:
- Deel A – Voorspel de uitvoer. Voorspel wat het programma toont vóór je de cel uitvoert. Schrijf je voorspelling op, voer daarna de cel uit en vergelijk. Geeft de code een foutmelding? Schrijf dan gewoon "fout" (welk soort fout hoef je niet te vermelden).
- Deel B – Zoek de fout! Er staat precies één fout in de code. Verbeter ze zodat de gewenste uitvoer verschijnt.
- Deel C – Vul de code aan. Vul aan op de plaatsen met
...of schrijf zelf de code. Vergeet de docstrings niet. Controleer met de gewenste uitvoer.
Staat er dat de gebruiker iets typt? Typ dan precies dat wanneer de cel om invoer vraagt.
De oefeningen 15, 25 en 33 zijn bonusvragen (uitbreiding): ze gaan over klassen en methodes.
Deel A: Voorspel de uitvoer¶
Oefening 1¶
Voorspel de uitvoer. Verwacht je een foutmelding? Schrijf dan gewoon "fout".
def verdrievoudigen(x):
"""Verdrievoudigen."""
return 3 * x
print(verdrievoudigen(4), verdrievoudigen("ab"), verdrievoudigen(1.5))
12 ababab 4.5
Voorspelling:
Oefening 2¶
Voorspel de uitvoer. Verwacht je een foutmelding? Schrijf dan gewoon "fout".
def kwadraat(x):
"""Kwadraat van x."""
print(x ** 2)
resultaat = kwadraat(5)
print(resultaat)
25 None
Voorspelling:
Oefening 3¶
Voorspel de uitvoer. Verwacht je een foutmelding? Schrijf dan gewoon "fout".
def verschil(a, b):
"""Verschil van a en b."""
return a - b
x = 10
y = 4
print(verschil(y, x), verschil(x, y))
-6 6
Voorspelling:
Oefening 4¶
Voorspel de uitvoer. Verwacht je een foutmelding? Schrijf dan gewoon "fout".
def volgende(x):
"""Het volgende getal."""
return x + 1
print("klaar")
def volgende_bis(x):
"""Het volgende getal."""
print("klaar")
return x + 1
print(volgende(volgende(2)))
print(volgende_bis(volgende_bis(2)))
4 klaar klaar 4
Voorspelling:
Oefening 5¶
Voorspel de uitvoer. Verwacht je een foutmelding? Schrijf dan gewoon "fout".
def verhoog(getal):
"""Getal verhogen met 10."""
getal = getal + 10
return getal
getal = 5
nieuw = verhoog(getal)
print(getal, nieuw)
5 15
Voorspelling:
Oefening 6¶
Voorspel de uitvoer. Verwacht je een foutmelding? Schrijf dan gewoon "fout".
def opp_vierkant(z):
"""Oppervlakte van een vierkant met zijde z."""
return z ** 2
def opp_kubus(z):
"""Totale oppervlakte van een kubus met ribbe z."""
return 6 * opp_vierkant(z)
print(opp_kubus(3), opp_vierkant(opp_vierkant(2)))
54 16
Voorspelling:
Oefening 7¶
Voorspel de uitvoer. Verwacht je een foutmelding? Schrijf dan gewoon "fout".
import math
def schuine_zijde(a, b):
"""Schuine zijde van een rechthoekige driehoek met rechthoekszijden a en b."""
return math.sqrt(a ** 2 + b ** 2)
print(schuine_zijde(3, 4), int(schuine_zijde(5, 5)))
5.0 7
Voorspelling:
Oefening 8¶
Voorspel de uitvoer. Verwacht je een foutmelding? Schrijf dan gewoon "fout".
De gebruiker typt: 100.
def prijs_met_btw(prijs):
"""Prijs inclusief 21 % btw."""
return prijs * 1.21
p = input("Prijs zonder btw? ")
print(p * 2, prijs_met_btw(float(p)))
Prijs zonder btw? 100 100100 121.0
Voorspelling:
Oefening 9¶
Voorspel de uitvoer. Verwacht je een foutmelding? Schrijf dan gewoon "fout".
def procent(x, p):
"""p procent van x."""
return x * p / 100
for g in [50, 80, 300]:
print(f"20 % van {g} is {procent(g, 20)}")
20 % van 50 is 10.0 20 % van 80 is 16.0 20 % van 300 is 60.0
Voorspelling:
Oefening 10¶
Voorspel de uitvoer. Verwacht je een foutmelding? Schrijf dan gewoon "fout".
def beoordeling(punt):
"""Geslaagd of niet."""
if punt >= 10:
return "geslaagd"
return "niet geslaagd"
print(beoordeling(12), "-", beoordeling(9.5))
geslaagd - niet geslaagd
Voorspelling:
Oefening 11¶
Voorspel de uitvoer. Verwacht je een foutmelding? Schrijf dan gewoon "fout".
def halveren(x):
"""Helft van x."""
helft = x / 2
print(halveren(10) + 1)
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) Cell In[12], line 5 1 def halveren(x): 2 """Helft van x.""" 3 helft = x / 2 4 ----> 5 print(halveren(10) + 1) TypeError: unsupported operand type(s) for +: 'NoneType' and 'int'
Voorspelling:
Oefening 12¶
Voorspel de uitvoer. Verwacht je een foutmelding? Schrijf dan gewoon "fout".
def opp_rechthoek(l, b):
"""Oppervlakte van een rechthoek met lengte l en breedte b."""
return l * b
print(opp_rechthoek(7))
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) Cell In[13], line 5 1 def opp_rechthoek(l, b): 2 """Oppervlakte van een rechthoek met lengte l en breedte b.""" 3 return l * b 4 ----> 5 print(opp_rechthoek(7)) TypeError: opp_rechthoek() missing 1 required positional argument: 'b'
Voorspelling:
Oefening 13¶
Voorspel de uitvoer. Verwacht je een foutmelding? Schrijf dan gewoon "fout".
def f(x):
"""f(x) = x² - 4x + 3"""
return x ** 2 - 4 * x + 3
for x in range(0, 5):
print(x, f(x))
0 3 1 0 2 -1 3 0 4 3
Voorspelling:
Oefening 14¶
Voorspel de uitvoer. Verwacht je een foutmelding? Schrijf dan gewoon "fout".
def bewerking1(a, b):
"""Kwadraat van de som van a en b."""
return (a + b) ** 2
def bewerking2(a, b):
"""Som van de kwadraten van a en b."""
return a ** 2 + b ** 2
print(bewerking1(3, 4), bewerking2(3, 4), bewerking1(3, 4) - bewerking2(3, 4))
49 25 24
Voorspelling:
Oefening 15 (bonusvraag – uitbreiding)¶
Voorspel de uitvoer. Verwacht je een foutmelding? Schrijf dan gewoon "fout".
#uitbreiding (bonusvraag)
class Rechthoek:
"""Klasse Rechthoek."""
def __init__(self, lengte, breedte):
"""Initialisatie: een rechthoek heeft een lengte en een breedte."""
self.l = lengte
self.b = breedte
def oppervlakte(self):
"""Oppervlakte van de rechthoek."""
return self.l * self.b
r1 = Rechthoek(4, 3)
r2 = Rechthoek(2, 5)
print(r1.oppervlakte() + r2.oppervlakte(), r1.l)
22 4
Voorspelling:
Deel B: Zoek de fout!¶
def omtrek_vierkant(z)
"""Omtrek van een vierkant met zijde z."""
return 4 * z
print(omtrek_vierkant(6))
Cell In[17], line 1 def omtrek_vierkant(z) ^ SyntaxError: expected ':'
Oefening 17¶
Zoek de fout! Deze code bevat precies één fout. Verbeter ze.
Gewenste uitvoer: Het dubbel van 7 is 14.
def verdubbelen(x):
"""Verdubbelen."""
dubbel = 2 * x
print(f"Het dubbel van 7 is {verdubbelen(7)}.")
Het dubbel van 7 is None.
Oefening 18¶
Zoek de fout! Deze code bevat precies één fout. Verbeter ze.
Gewenste uitvoer: De prijs na korting is 65.0 euro.
def prijs_na_korting(pr, per):
"""Prijs na een korting van per procent op een prijs pr."""
nieuwe_prijs = pr * (1 - pr / 100)
return nieuwe_prijs
print(f"De prijs na korting is {prijs_na_korting(100, 35)} euro.")
De prijs na korting is 0.0 euro.
print(opp_driehoek(6, 4))
def opp_driehoek(b, h):
"""Oppervlakte van een driehoek met basis b en hoogte h."""
return b * h / 2
--------------------------------------------------------------------------- NameError Traceback (most recent call last) Cell In[20], line 1 ----> 1 print(opp_driehoek(6, 4)) 2 3 def opp_driehoek(b, h): 4 """Oppervlakte van een driehoek met basis b en hoogte h.""" NameError: name 'opp_driehoek' is not defined
def opp_cirkel(r):
"""Oppervlakte van een cirkel met straal r."""
return math.pi * r ** 2
print(round(opp_cirkel(2), 2))
12.57
Oefening 21¶
Zoek de fout! Deze code bevat precies één fout. Verbeter ze.
Gewenste uitvoer: De inhoud is 27.
De gebruiker typt: 3.
def inhoud_kubus(z):
"""Inhoud van een kubus met ribbe z."""
return z ** 3
zijde = input("Ribbe van de kubus? ")
print(f"De inhoud is {inhoud_kubus(zijde)}.")
Ribbe van de kubus? 3
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) Cell In[22], line 6 2 """Inhoud van een kubus met ribbe z.""" 3 return z ** 3 4 5 zijde = input("Ribbe van de kubus? ") ----> 6 print(f"De inhoud is {inhoud_kubus(zijde)}.") Cell In[22], line 3, in inhoud_kubus(z) 1 def inhoud_kubus(z): 2 """Inhoud van een kubus met ribbe z.""" ----> 3 return z ** 3 TypeError: unsupported operand type(s) for ** or pow(): 'str' and 'int'
Oefening 22¶
Zoek de fout! Deze code bevat precies één fout. Verbeter ze.
Gewenste uitvoer: Inhoud: 108.0 m³
def inhoud_piramide(z, h):
"""Inhoud van een piramide met vierkant grondvlak met zijde z en hoogte h."""
return z ** 2 * h / 3
# piramide met een vierkant grondvlak met zijde 6 m en hoogte 9 m
print(f"Inhoud: {inhoud_piramide(9, 6)} m³")
Inhoud: 162.0 m³
def som_lijst(getallen):
"""Som van alle getallen in de lijst."""
totaal = 0
for g in getallen:
totaal += g
return totaal
print(som_lijst([4, 7, 9]))
4
def gemiddelde(a, b, c):
"""Gemiddelde van a, b en c."""
gem = (a + b + c) / 3
return gem
gemiddelde(12, 15, 18)
print(gem)
--------------------------------------------------------------------------- NameError Traceback (most recent call last) Cell In[25], line 7 3 gem = (a + b + c) / 3 4 return gem 5 6 gemiddelde(12, 15, 18) ----> 7 print(gem) NameError: name 'gem' is not defined
Oefening 25 (bonusvraag – uitbreiding)¶
Zoek de fout! Deze code bevat precies één fout. Verbeter ze.
Gewenste uitvoer: De gletsjer Aletschgletsjer ligt in Zwitserland!
#uitbreiding (bonusvraag)
class Gletsjer:
"""Klasse Gletsjer."""
def __init__(self, gletsjer_naam, gletsjer_land):
"""Initialisatie: naam en land van de gletsjer."""
self.naam = gletsjer_naam
self.land = gletsjer_land
def kenmerken(self):
"""Geeft attributen weer."""
print(f"De gletsjer {naam} ligt in {self.land}!")
gletsjer1 = Gletsjer("Aletschgletsjer", "Zwitserland")
gletsjer1.kenmerken()
--------------------------------------------------------------------------- NameError Traceback (most recent call last) Cell In[26], line 15 11 """Geeft attributen weer.""" 12 print(f"De gletsjer {naam} ligt in {self.land}!") 13 14 gletsjer1 = Gletsjer("Aletschgletsjer", "Zwitserland") ---> 15 gletsjer1.kenmerken() Cell In[26], line 12, in Gletsjer.kenmerken(self) 10 def kenmerken(self): 11 """Geeft attributen weer.""" ---> 12 print(f"De gletsjer {naam} ligt in {self.land}!") NameError: name 'naam' is not defined
Deel C: Vul de code aan¶
Oefening 26¶
Vul de code aan op de plaatsen met .... Bereken de omtrek van een cirkel met diameter 10 cm en rond af op 2 decimalen.
Gewenste uitvoer: De omtrek is 31.42 cm.
import math
def omtrek_cirkel(r):
"""Omtrek van een cirkel met straal r."""
...
return omtrek
# omtrek van een cirkel met diameter 10 cm
...
print(f"De omtrek is {...} cm.")
De omtrek is Ellipsis cm.
Oefening 27¶
Vul de code aan. Een temperatuur in graden Celsius zet je om naar graden Fahrenheit met de formule $F = 1{,}8 \cdot C + 32$. Rond af op 1 decimaal.
Gewenste uitvoer:
0 °C = 32.0 °F
20 °C = 68.0 °F
37 °C = 98.6 °F
100 °C = 212.0 °F
def naar_fahrenheit(...):
"""..."""
...
return ...
for c in [0, 20, 37, 100]:
print(f"{c} °C = {...} °F")
Cell In[28], line 1 def naar_fahrenheit(...): ^ SyntaxError: invalid syntax
Oefening 28¶
Schrijf een functie opp_trapezium() met drie parameters: grote basis B, kleine basis b en hoogte h. Vergeet de docstring niet. Bereken daarna de oppervlakte van een trapezium met grote basis 8 cm, kleine basis 4 cm en hoogte 5 cm.
Formule: $A = \dfrac{(B + b) \cdot h}{2}$
Gewenste uitvoer: De oppervlakte van het trapezium is 30.0 cm².
# functie
# toepassing
Oefening 29¶
Een cirkelring is het gebied tussen twee cirkels met hetzelfde middelpunt: een grote cirkel met straal R en een kleine cirkel met straal r. Vul de functie opp_ring() aan. Gebruik daarbij de functie opp_cirkel(). Rond af op 2 decimalen.
Gewenste uitvoer: 50.27
import math
def opp_cirkel(r):
"""Oppervlakte van een cirkel met straal r."""
return math.pi * r ** 2
def opp_ring(R, r):
"""Oppervlakte van een cirkelring met buitenstraal R en binnenstraal r."""
...
print(round(opp_ring(5, 3), 2))
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) Cell In[30], line 11 7 def opp_ring(R, r): 8 """Oppervlakte van een cirkelring met buitenstraal R en binnenstraal r.""" 9 ... 10 ---> 11 print(round(opp_ring(5, 3), 2)) TypeError: type NoneType doesn't define __round__ method
Oefening 30¶
Gegeven is de functie $f(x) = -x^2 + 6x - 5$.
- Definieer de functie
f()in Python. - Druk een tabel af met de functiewaarden voor $x$ = 0, 1, 2, ..., 6.
- Laat bij elk nulpunt ook de tekst
nulpuntverschijnen.
Gewenste uitvoer:
0 -5
1 0 nulpunt
2 3
3 4
4 3
5 0 nulpunt
6 -5
def f(x):
"""f(x) = -x² + 6x - 5"""
...
for x in ...:
...
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) Cell In[31], line 5 1 def f(x): 2 """f(x) = -x² + 6x - 5""" 3 ... 4 ----> 5 for x in ...: 6 ... TypeError: 'ellipsis' object is not iterable
Oefening 31¶
Schrijf een script dat:
- aan de gebruiker vraagt hoeveel punten hij behaalde en op hoeveel punten de toets stond;
- met een functie
percentage(behaald, maximum)het percentage berekent, afgerond op 1 decimaal; - een zin met het percentage afdrukt.
De gebruiker typt: 15, dan 20.
Gewenste uitvoer: Je behaalde 75.0 %.
Oefening 32¶
Schrijf een functie is_rechthoekig(a, b, c) die True teruggeeft als een driehoek met zijden a, b en c rechthoekig is (de stelling van Pythagoras, met c de langste zijde) en anders False. Test met de driehoeken 3-4-5, 5-6-7 en 5-12-13.
Gewenste uitvoer: True False True
def is_rechthoekig(a, b, c):
"""..."""
...
print(is_rechthoekig(3, 4, 5), is_rechthoekig(5, 6, 7), is_rechthoekig(5, 12, 13))
None None None
Oefening 33 (bonusvraag – uitbreiding)¶
Vul de klasse Cirkel aan. Een cirkel heeft één attribuut: de straal. Schrijf twee methodes: omtrek() en oppervlakte(). Maak daarna een cirkel met straal 2 aan en druk de omtrek en de oppervlakte af, afgerond op 2 decimalen.
Gewenste uitvoer: 12.57 12.57
import math
class Cirkel:
"""Klasse Cirkel."""
def __init__(self, ...):
"""Initialisatie: een cirkel heeft een straal."""
...
def omtrek(self):
"""Omtrek van de cirkel."""
...
def oppervlakte(self):
"""Oppervlakte van de cirkel."""
...
c1 = ...
print(round(c1.omtrek(), 2), round(c1.oppervlakte(), 2))
Cell In[33], line 6 def __init__(self, ...): ^ SyntaxError: invalid syntax