Toets Python – verbetersleutel met uitleg¶
Datatypes, opsommingen en operatoren, structuren (herhaling en keuze)
Leerkracht: I. De Schrijver · Vak: informatica-wetenschappen · 6 okt 2026
| Deel | 1 | 2 | 3 | Bonus | Totaal |
|---|---|---|---|---|---|
| Maximum | 12 | 15 | 13 | +3 | 40 |
Zo gebruik je dit notebook
- Per vraag vind je de originele code uit de toets: voer de cel uit (Shift + Enter) en vergelijk met je eigen antwoord.
- Daarna volgt het antwoord en een cel Stap voor stap: dezelfde code in kleinere stappen, met extra
print-opdrachten. Het commentaar achter#toont telkens wat er gebeurt. - Vraagt de code om invoer (
input), typ dan in het vakje wat er bij de vraag staat. - Sommige cellen geven bewust een foutmelding: daar gaat de vraag net over.
- Vooraan vind je ook de belangrijke mededeling en de afkortingen die in de feedback gebruikt worden.
- Experimenteer gerust: verander een waarde en voer de cel opnieuw uit!
📌 Belangrijke mededeling bij deze toets¶
- Bij het verbeteren van deze toets hield ik geen rekening met lay-outfouten (zoals een ontbrekende nieuwe lijn, een komma die er wel of niet staat, enz.).
- Bij de tweede-kanstoets ga ik hier wel iets strenger op controleren.
🏷️ Overzicht van de gebruikte afkortingen in de feedback¶
Naast een fout antwoord kan je een van onderstaande afkortingen terugvinden. Zo weet je precies wat er misliep.
Bij sommige afkortingen staat een voorbeeld dat je zelf kan uitvoeren.
PK – print-komma¶
Bij de uitvoer wordt er een komma geschreven die er in werkelijkheid niet komt te staan. De komma’s in het print-commando dienen enkel om de verschillende argumenten van elkaar te scheiden; in de uitvoer komt er een spatie tussen.
a = 3.5
b = 'woord'
print(a, b, 'Joepie!') # → 3.5 woord Joepie!
3.5 woord Joepie!
PDT – print-decimaal teken¶
In Python wordt een punt (.) gebruikt als decimaal teken en geen komma.
PH – print-haakjes¶
De haakjes die je in de code rondom de argumenten van het print-commando plaatst (zoals de haakjes rondom a, b, 'Joepie!'), worden vanzelfsprekend niet mee geprint.
PNL – print-nieuwe lijn¶
De argumenten binnen één enkel print-commando worden netjes op één lijn geprint. Plaats je meerdere print-commando’s onder elkaar in de code, dan start elk commando op een nieuwe lijn (tenzij je expliciet end='' toevoegt).
PNV – print-naam variabele¶
Je hebt de naam van de variabele zelf genoteerd als uitvoer in plaats van de inhoud (waarde) die in die variabele is opgeslagen. Dit werd wel foutief aangerekend.
PAT – print-aanhalingstekens¶
Je noteert aanhalingstekens in de uitvoer waar ze niet thuishoren, of omgekeerd. Ter verduidelijking:
a = "12" # in a wordt een string (tekst) opgeslagen
print(a) # → 12 (Er worden geen aanhalingstekens geprint!)
print(a*3) # → 121212
12 121212
print('a') # → a (zonder aanhalingstekens)
x = 'een'
y = 'twee'
lijst = [x, y]
print(lijst) # → ['een', 'twee']
a ['een', 'twee']
PF – print-format / f-strings¶
Je maakte een fout bij het letterlijk overnemen of invullen van de tekst bij een print-commando met formattering (f-strings). Alles wat niet tussen accolades { } staat, wordt letterlijk overgenomen in de uitvoer.
a = 'een'
b = 'twee'
c = 3.5
print(f'a,#{b}@[{c}]') # → a,#twee@[3.5]
a,#twee@[3.5]
Deel 1: Datatypes (12 pt)¶
Vraag 1 (2 pt)¶
Wat is de uitvoer?
x = 7
y = 2
print(x / y, x // y)
3.5 3
Uitvoer:
3.5 3
🔎 Stap voor stap¶
x = 7
y = 2
deling = x / y # gewone deling → 3.5 (altijd een float)
geheel = x // y # gehele deling → 3 (want 7 = 2 * 3 + 1)
print(deling) # → 3.5
print(geheel) # → 3
print(deling, geheel) # beide op één lijn, met een spatie → 3.5 3
3.5 3 3.5 3
Vraag 2 (3 pt)¶
Wat is de uitvoer?
a = "12"
b = 3
print(a * b)
print(int(a) * b)
print(f"{a}{b}")
121212 36 123
Uitvoer:
121212
36
123
🔎 Stap voor stap¶
a = "12" # a is een string (tekst), géén getal!
b = 3 # b is een int
r1 = a * b # tekst * getal = tekst herhalen
print(r1) # → 121212
getal = int(a) # tekst "12" omzetten naar het getal 12
r2 = getal * b # 12 * 3
print(r2) # → 36
r3 = f"{a}{b}" # "12" en 3 zonder spatie aan elkaar plakken
print(r3) # → 123
121212 36 123
Vraag 3 (1 pt)¶
Wat is de uitvoer?
print(int(float("7.9")) + int("08"))
15
Uitvoer:
15
🔎 Stap voor stap¶
t1 = float("7.9") # tekst → kommagetal 7.9
print(t1) # → 7.9
t2 = int(t1) # int() kapt af (géén afronding!) → 7
print(t2) # → 7
t3 = int("08") # tekst "08" → getal 8 (de voorloopnul valt weg)
print(t3) # → 8
print(t2 + t3) # 7 + 8 → 15
7.9 7 8 15
print(int("6.0") * 2)
--------------------------------------------------------------------------- ValueError Traceback (most recent call last) Cell In[12], line 1 ----> 1 print(int("6.0") * 2) ValueError: invalid literal for int() with base 10: '6.0'
Uitvoer:
fout
int() kan de tekst "6.0" niet omzetten, je kan enkel niet-decimale getallen omzetten naar een integer.
🔎 Stap voor stap¶
t = "6.0" # een string met een decimaal punt in
# g = int(t) # FOUT → ValueError: int() kan "6.0" niet omzetten (haal de # vooraan weg om de fout te zien)
# print(g * 2) # deze regel wordt nooit uitgevoerd
Wil je toch 12 uitkomen, dan zet je de tekst eerst om naar een float: int(float("6.0")) → int(6.0) → 6, en 6 * 2 → 12.
Zo werkt het wel:
t = "6.0"
k = float(t) # → 6.0
g = int(k) # → 6
print(g * 2) # → 12
12
Vraag 5 (2 pt)¶
Wat is de uitvoer? De gebruiker typt: "Lien", dan "15.8".
⌨️ Typ bij het uitvoeren: "Lien" en daarna "15.8"
naam = input("Naam? ")
leeftijd = int(float(input("Leeftijd? ")))
print(f"{naam} wordt volgend jaar {leeftijd + 1}.")
print(f"{naam * 2} is {type(leeftijd)}")
Naam? Lien Leeftijd? 15.8 Lien wordt volgend jaar 16. LienLien is <class 'int'>
Uitvoer:
Lien wordt volgend jaar 16.
LienLien is <class 'int'>
🔎 Stap voor stap¶
naam = input("Naam? ") # naam = "Lien"
tekst = input("Leeftijd? ") # tekst = "15.8" (input geeft altijd tekst!)
kommagetal = float(tekst) # → 15.8
leeftijd = int(kommagetal) # afkappen → 15
volgend = leeftijd + 1 # → 16
print(f"{naam} wordt volgend jaar {volgend}.")
# → Lien wordt volgend jaar 16.
dubbel = naam * 2 # tekst herhalen → LienLien
soort = type(leeftijd) # → <class 'int'>
print(f"{dubbel} is {soort}") # → LienLien is <class 'int'>
Naam? Lien Leeftijd? 15.8 Lien wordt volgend jaar 16. LienLien is <class 'int'>
Vraag 6 (1 pt)¶
Wat is de uitvoer?
a = True
b = "False"
print(a == b , a == True, b == False)
False True False
Uitvoer:
False True False
🔎 Stap voor stap¶
a = True # a is een boolean
b = "False" # b is een string (let op de aanhalingstekens!)
v1 = a == b # boolean ≠ string → False
v2 = a == True # True == True → True
v3 = b == False # string "False" ≠ boolean False → False
print(v1, v2, v3) # → False True False
False True False
Vraag 7 (2 pt)¶
Zoek de fout! Deze code bevat precies één fout. Verbeter ze. De gebruiker typt: "2.5".
Gewenste uitvoer: Totaal: 7.5 euro
⌨️ Typ bij het uitvoeren: "2.5"
prijs = input("Prijs per stuk? ")
aantal = 3
print(f"Totaal: {prijs * aantal} euro")
Prijs per stuk? 2.5 Totaal: 2.52.52.5 euro
Verbeterde regel(s):
prijs = float(input("Prijs per stuk? "))
input() geeft tekst; zonder float() wordt de tekst herhaald: Totaal: 2.52.52.5 euro
🔎 Stap voor stap¶
tekst = input("Prijs per stuk? ") # tekst = "2.5" (een string!)
print(tekst * 3) # tekst herhalen → 2.52.52.5 ✘
prijs = float(tekst) # nu een getal → 2.5
print(prijs * 3) # → 7.5 ✔
Prijs per stuk? 2.5 2.52.52.5 7.5
De verbeterde code:
prijs = float(input("Prijs per stuk? "))
aantal = 3
print(f"Totaal: {prijs * aantal} euro")
Prijs per stuk? 2.5 Totaal: 7.5 euro
Deel 2: Opsommingen en operatoren (15 pt)¶
Vraag 8 (2 pt)¶
Wat is de uitvoer?
klas = ["Aya", "Bram", "Cas", "Dina", "Eli", "Fien"]
print(klas[-4:-1])
print(f"{klas[1][0]}{klas[-1][-1]} en {len(klas[2:])}")
['Cas', 'Dina', 'Eli'] Bn en 4
Uitvoer:
['Cas', 'Dina', 'Eli']
Bn en 4
🔎 Stap voor stap¶
| element | "Aya" | "Bram" | "Cas" | "Dina" | "Eli" | "Fien" |
|---|---|---|---|---|---|---|
| index | 0 | 1 | 2 | 3 | 4 | 5 |
| negatieve index | -6 | -5 | -4 | -3 | -2 | -1 |
klas = ["Aya", "Bram", "Cas", "Dina", "Eli", "Fien"]
deel = klas[-4:-1] # van index -4 tot (niet t.e.m.!) -1
print(deel) # → ['Cas', 'Dina', 'Eli']
naam1 = klas[1] # → Bram
letter1 = naam1[0] # eerste letter van "Bram" → B
naam2 = klas[-1] # → Fien
letter2 = naam2[-1] # laatste letter van "Fien" → n
rest = klas[2:] # vanaf index 2 tot het einde
print(rest) # → ['Cas', 'Dina', 'Eli', 'Fien']
aantal = len(rest) # → 4
print(f"{letter1}{letter2} en {aantal}") # → Bn en 4
['Cas', 'Dina', 'Eli'] ['Cas', 'Dina', 'Eli', 'Fien'] Bn en 4
Vraag 9 (2 pt)¶
Wat is de uitvoer?
getallen = [4, 9, 2, 9, 7]
getallen.remove(9)
getallen.sort()
getallen.append(getallen.pop() * 10)
print(getallen)
[2, 4, 7, 90]
Uitvoer:
[2, 4, 7, 90]
🔎 Stap voor stap¶
getallen = [4, 9, 2, 9, 7]
getallen.remove(9) # verwijdert enkel de EERSTE 9
print(getallen) # → [4, 2, 9, 7]
getallen.sort() # sorteren van klein naar groot
print(getallen) # → [2, 4, 7, 9]
laatste = getallen.pop() # haalt het laatste element uit de lijst
print(laatste) # → 9
print(getallen) # → [2, 4, 7]
getallen.append(laatste * 10) # 9 * 10 = 90 achteraan toevoegen
print(getallen) # → [2, 4, 7, 90]
[4, 2, 9, 7] [2, 4, 7, 9] 9 [2, 4, 7] [2, 4, 7, 90]
Vraag 10 (2 pt)¶
Wat is de uitvoer?
print(17 // 3 * 3 + 17 % 3)
print(-7 // 2, -7 % 2)
17 -4 1
Uitvoer:
17
-4 1
🔎 Stap voor stap¶
q = 17 // 3 # gehele deling → 5
r = 17 % 3 # rest → 2 (want 17 = 3 * 5 + 2)
p = q * 3 # // en * hebben dezelfde voorrang: van links naar rechts → 15
print(p + r) # 15 + 2 → 17
q2 = -7 // 2 # -3.5 afronden naar BENEDEN → -4
r2 = -7 % 2 # want -7 = 2 * (-4) + 1 → 1
print(q2, r2) # → -4 1
17 -4 1
➕ Extra toelichting bij de restverschijnselen ( // en % )¶
De tweede regel van de code bij vraag 10 was uitbreiding en stond niet op punten.
Ter info: bij modulo-rekenen in Python heeft de rest steeds hetzelfde teken als de deler. (In andere programmeertalen is dit niet altijd het geval.)
| // (quotiënt) | % (rest) | Want … |
|---|---|---|
7 // 2 → 3 |
7 % 2 → 1 |
7 = 2 * 3 + 1de rest heeft hetzelfde teken als de deler |
-7 // 2 → -4 |
-7 % 2 → 1 |
-7 = 2 * (-4) + 1de rest moet positief zijn, gelijk aan het teken van de deler |
7 // -2 → -4 |
7 % -2 → -1 |
7 = -2 * (-4) + (-1) |
-7 // -2 → 3 |
-7 % -2 → -1 |
-7 = -2 * 3 + (-1) |
for a, b in [(7, 2), (-7, 2), (7, -2), (-7, -2)]:
q = a // b
r = a % b
print(f"{a} // {b} = {q} {a} % {b} = {r} controle: {b} * {q} + {r} = {b * q + r}")
7 // 2 = 3 7 % 2 = 1 controle: 2 * 3 + 1 = 7 -7 // 2 = -4 -7 % 2 = 1 controle: 2 * -4 + 1 = -7 7 // -2 = -4 7 % -2 = -1 controle: -2 * -4 + -1 = 7 -7 // -2 = 3 -7 % -2 = -1 controle: -2 * 3 + -1 = -7
Algemeen:
a == b * (a // b) + (a % b)geldt altijd.- De rest
a % bheeft in Python steeds hetzelfde teken als de delerb.a // bis gelijk aan het grootste geheel getal dat kleiner dan of gelijk aana / bis (bv.7 / 2 = 3.5→7 // 2 = 3,-7 / 2 = -3.5→-7 // 2 = -4, maar6 / 2 = 3.0→6 // 2 = 3).
Vraag 11 (3 pt)¶
Wat is de uitvoer?
a = 6
b = 3
print(a > 5 or (b > 5 and a == 3))
print((a > 5 or b > 5) and a == 3)
print(not a % b == 0)
True False False
Uitvoer:
True
False
False
🔎 Stap voor stap¶
a = 6
b = 3
d1 = a > 5 # → True
d2 = b > 5 # → False
d3 = a == 3 # → False
# regel 1: a > 5 or (b > 5 and a == 3)
h1 = d2 and d3 # eerst de haakjes: False and False → False
print(d1 or h1) # True or False → True
# regel 2: (a > 5 or b > 5) and a == 3
h2 = d1 or d2 # eerst de haakjes: True or False → True
print(h2 and d3) # True and False → False
# regel 3: not a % b == 0
rest = a % b # 6 % 3 → 0
gelijk = rest == 0 # → True (== wordt vóór not uitgevoerd)
print(not gelijk) # not True → False
True False False
Vraag 12 (2 pt)¶
Wat is de uitvoer?
zin = "leren is plezant"
woorden = zin.split()
print(woorden[-1].replace("e", "a"))
print(f"{len(woorden)} woorden, {len(zin)} tekens")
plazant 3 woorden, 16 tekens
Uitvoer:
plazant
3 woorden, 16 tekens
🔎 Stap voor stap¶
zin = "leren is plezant"
woorden = zin.split() # knipt op de spaties → een lijst
print(woorden) # → ['leren', 'is', 'plezant']
laatste = woorden[-1] # laatste woord → plezant
nieuw = laatste.replace("e", "a") # elke e wordt een a
print(nieuw) # → plazant
aantal_w = len(woorden) # aantal elementen in de lijst → 3
aantal_t = len(zin) # aantal tekens, spaties tellen mee! → 16
print(f"{aantal_w} woorden, {aantal_t} tekens") # → 3 woorden, 16 tekens
['leren', 'is', 'plezant'] plazant 3 woorden, 16 tekens
➕ Extra toelichting bij vraag 12¶
Een spatie is ook een teken.
a = 'Een, twee?'
print(len(a)) # → 10
10
Vraag 13 (2 pt)¶
Wat is de uitvoer? De gebruiker typt: "Kortrijk".
⌨️ Typ bij het uitvoeren: "Kortrijk"
stad = input("Stad? ")
print(f"{stad[:4].upper()}-{stad[-1]}{len(stad) % 3}")
Stad? Kortrijk KORT-k2
Uitvoer:
KORT-k2
🔎 Stap voor stap¶
stad = input("Stad? ") # stad = "Kortrijk"
begin = stad[:4] # index 0 t.e.m. 3 → Kort
groot = begin.upper() # → KORT
laatste = stad[-1] # laatste letter → k
lengte = len(stad) # → 8
rest = lengte % 3 # 8 = 3 * 2 + 2 → 2
print(f"{groot}-{laatste}{rest}") # → KORT-k2
Stad? Kortrijk KORT-k2
➕ Extra toelichting bij vraag 13¶
Bij slicing tekst[begin:einde] doet de eindindex niet mee. stad[:4] neemt dus de tekens met index 0, 1, 2 en 3.
| teken | K | o | r | t | r | i | j | k |
|---|---|---|---|---|---|---|---|---|
| index | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| negatieve index | -8 | -7 | -6 | -5 | -4 | -3 | -2 | -1 |
stad = 'Kortrijk'
print(stad[:4]) # → Kort (index 0 t.e.m. 3, index 4 doet niet mee)
print(stad[4:]) # → rijk (vanaf index 4 tot het einde)
print(stad[3], stad[4]) # → t r
print(stad[-1]) # → k (laatste teken)
Kort rijk t r k
Vraag 14 (2 pt)¶
Zoek de fout! Deze code bevat precies één fout. Verbeter ze.
Gewenste uitvoer: Oppervlakte: 12
⚠️ Deze code geeft bewust een fout (
NameError).
import math
straal = 2
print(f"Oppervlakte: {int(pi * straal ** 2)}")
--------------------------------------------------------------------------- NameError Traceback (most recent call last) Cell In[37], line 3 1 import math 2 straal = 2 ----> 3 print(f"Oppervlakte: {int(pi * straal ** 2)}") NameError: name 'pi' is not defined
Verbeterde regel(s):
print(f"Oppervlakte: {int(math.pi * straal ** 2)}")
pi → math.pi (of bovenaan: from math import pi)
🔎 Stap voor stap¶
import math # de module math wordt geladen
print(math.pi) # → 3.141592653589793
# print(pi) # FOUT → NameError: name 'pi' is not defined (haal de # vooraan weg om de fout te zien)
straal = 2
kwadraat = straal ** 2 # machtsverheffing gaat vóór * → 4
opp = math.pi * kwadraat # → 12.566370614359172
print(int(opp)) # afkappen → 12
3.141592653589793 12
De verbeterde code:
import math
straal = 2
print(f"Oppervlakte: {int(math.pi * straal ** 2)}")
Oppervlakte: 12
Deel 3: Structuren (13 pt)¶
Vraag 15 (1 pt)¶
Wat is de uitvoer?
for i in range(21, 5, -4):
print(f"[{i // 2}]", end="")
[10][8][6][4]
Uitvoer:
[10][8][6][4]
🔎 Stap voor stap¶
print(list(range(21, 5, -4))) # → [21, 17, 13, 9] (5 zelf doet niet mee)
[21, 17, 13, 9]
| i | i // 2 | print(...) | uitvoer tot nu toe |
|---|---|---|---|
| 21 | 10 | [10] | [10] |
| 17 | 8 | [8] | [10][8] |
| 13 | 6 | [6] | [10][8][6] |
| 9 | 4 | [4] | [10][8][6][4] |
Door end="" start een volgende print niet op een nieuwe lijn: alles komt achter elkaar.
Vraag 16 (2 pt)¶
Wat is de uitvoer?
totaal = 0
for g in [5, 12, 7, 20, 3]:
totaal += g
print(f"Eindtotaal: {totaal}")
Eindtotaal: 47
Uitvoer:
Eindtotaal: 47
🔎 Stap voor stap¶
totaal = 0
for g in [5, 12, 7, 20, 3]:
totaal += g # hetzelfde als: totaal = totaal + g
print(g, totaal) # extra print: toont elke tussenstap
print(f"Eindtotaal: {totaal}")
5 5 12 17 7 24 20 44 3 47 Eindtotaal: 47
| g | totaal vóór | totaal + g | totaal na |
|---|---|---|---|
| 5 | 0 | 0 + 5 | 5 |
| 12 | 5 | 5 + 12 | 17 |
| 7 | 17 | 17 + 7 | 24 |
| 20 | 24 | 24 + 20 | 44 |
| 3 | 44 | 44 + 3 | 47 |
Vraag 17 (4 pt)¶
Wat is de uitvoer?
n = 2
stappen = 0
while n != 1:
if n % 2 == 0:
n = n // 2
print(f'true {n}')
else:
n = 3 * n + 1
print(f'false {n}')
stappen += 1
print(stappen)
print(f"{stappen} stappen")
true 1 1 1 stappen
Uitvoer:
true 1
1
1 stappen
🔎 Stap voor stap¶
| ronde | n != 1 ? | n % 2 == 0 ? | n wordt | stappen | uitvoer |
|---|---|---|---|---|---|
| 1 | 2 != 1 → True | 2 % 2 == 0 → True | 2 // 2 = 1 | 1 | true 1 1 |
| 2 | 1 != 1 → False | — | — | — | lus stopt |
De else-tak wordt nooit uitgevoerd, dus false … verschijnt niet. Na de lus volgt nog print(f"{stappen} stappen") → 1 stappen.
Alternatief: dezelfde code, maar start met n = 3. Nu worden beide takken gebruikt: is n even, dan wordt n gehalveerd (true); is n oneven, dan wordt n = 3 · n + 1 (false).
n = 3 # probeer ook eens 6 of 7!
stappen = 0
while n != 1:
if n % 2 == 0:
n = n // 2
print(f'true {n}')
else:
n = 3 * n + 1
print(f'false {n}')
stappen += 1
print(stappen)
print(f"{stappen} stappen")
false 10 1 true 5 2 false 16 3 true 8 4 true 4 5 true 2 6 true 1 7 7 stappen
| ronde | n != 1 ? | n % 2 == 0 ? | n wordt | stappen | uitvoer |
|---|---|---|---|---|---|
| 1 | 3 != 1 → True | 3 % 2 == 0 → False | 3 * 3 + 1 = 10 | 1 | false 10 1 |
| 2 | 10 != 1 → True | 10 % 2 == 0 → True | 10 // 2 = 5 | 2 | true 5 2 |
| 3 | 5 != 1 → True | 5 % 2 == 0 → False | 3 * 5 + 1 = 16 | 3 | false 16 3 |
| 4 | 16 != 1 → True | 16 % 2 == 0 → True | 16 // 2 = 8 | 4 | true 8 4 |
| 5 | 8 != 1 → True | 8 % 2 == 0 → True | 8 // 2 = 4 | 5 | true 4 5 |
| 6 | 4 != 1 → True | 4 % 2 == 0 → True | 4 // 2 = 2 | 6 | true 2 6 |
| 7 | 2 != 1 → True | 2 % 2 == 0 → True | 2 // 2 = 1 | 7 | true 1 7 |
| 8 | 1 != 1 → False | — | — | — | lus stopt |
Na de lus: print(f"{stappen} stappen") → 7 stappen. De rij waarden van n is dus 3 → 10 → 5 → 16 → 8 → 4 → 2 → 1.
Vraag 18 (2 pt)¶
Wat is de uitvoer? Geef de uitvoer voor elk van deze invoeren: "15" en "9".
⌨️ Typ bij het uitvoeren: "15" (en daarna nog eens met "9")
punten = int(input("Punten op 20? "))
if punten >= 16:
oordeel = "zeer goed"
elif punten >= 10:
oordeel = "voldoende"
elif punten >= 14:
oordeel = "goed"
else:
oordeel = "onvoldoende"
print(f"{punten}/20: {oordeel} ({punten * 5}%)")
Punten op 20? 15 15/20: voldoende (75%)
Uitvoer:
Bij invoer "15": 15/20: voldoende (75%)
Bij invoer "9": 9/20: onvoldoende (45%)
🔎 Stap voor stap¶
| invoer | punten >= 16 | punten >= 10 | punten >= 14 | oordeel | punten * 5 |
|---|---|---|---|---|---|
| 15 | False | True ✔ | niet getest | voldoende | 75 |
| 9 | False | False | False | onvoldoende | 45 |
Bij if … elif … else wordt enkel de eerste ware voorwaarde uitgevoerd; daarna slaat Python de rest over. Omdat punten >= 10 vóór punten >= 14 staat, kan "goed" nooit voorkomen.
tekst = input("Punten op 20? ") # tekst = "15"
punten = int(tekst) # → 15
print(punten >= 16) # → False
print(punten >= 10) # → True → oordeel = "voldoende"
procent = punten * 5 # → 75
print(f"{punten}/20: voldoende ({procent}%)") # → 15/20: voldoende (75%)
Punten op 20? 15 False True 15/20: voldoende (75%)
Vraag 19 (2 pt)¶
Zoek de fout! Deze code bevat precies één fout. Verbeter ze. De gebruiker typt: "robot".
Gewenste uitvoer: Omgekeerd: tobor
⌨️ Typ bij het uitvoeren: "robot"
woord = input("Woord? ")
omgekeerd = ""
for letter in woord:
omgekeerd = omgekeerd + letter
print(f"Omgekeerd: {omgekeerd}")
Woord? robot Omgekeerd: robot
Verbeterde regel(s):
omgekeerd = letter + omgekeerd
De letter moet vóór de tekst komen, anders blijft het woord gewoon robot.
🔎 Stap voor stap¶
| letter | fout: omgekeerd + letter | juist: letter + omgekeerd |
|---|---|---|
| r | r | r |
| o | ro | or |
| b | rob | bor |
| o | robo | obor |
| t | robot | tobor |
Tip: zet in de lus een extra print(letter, omgekeerd) om elke tussenstap te zien.
De verbeterde code, met een extra print in de lus:
woord = input("Woord? ")
omgekeerd = ""
for letter in woord:
omgekeerd = letter + omgekeerd
print(letter, omgekeerd) # extra print: elke tussenstap
print(f"Omgekeerd: {omgekeerd}")
Woord? robot r r o or b bor o obor t tobor Omgekeerd: tobor
Vraag 20 (2 pt)¶
Zoek de fout! Deze code bevat precies één fout. Verbeter ze.
Gewenste uitvoer:
1. Ann
2. Bert
3. Cleo
⚠️ Deze code geeft bewust een fout (
IndexError).
namen = ["Ann", "Bert", "Cleo"]
for i in range(1, len(namen) + 1):
print(f"{i}. {namen[i]}")
1. Bert 2. Cleo
--------------------------------------------------------------------------- IndexError Traceback (most recent call last) Cell In[50], line 3 1 namen = ["Ann", "Bert", "Cleo"] 2 for i in range(1, len(namen) + 1): ----> 3 print(f"{i}. {namen[i]}") IndexError: list index out of range
Verbeterde regel(s):
print(f"{i}. {namen[i - 1]}")
Ook goed: for i in range(len(namen)): print(f"{i + 1}. {namen[i]}")
🔎 Stap voor stap¶
namen = ["Ann", "Bert", "Cleo"]
print(len(namen)) # → 3
print(list(range(1, 4))) # i neemt de waarden → [1, 2, 3]
# de indexen van namen zijn 0, 1 en 2 → namen[3] bestaat niet!
3 [1, 2, 3]
| i | fout: namen[i] | juist: namen[i - 1] | uitvoer (juist) |
|---|---|---|---|
| 1 | Bert | namen[0] → Ann | 1. Ann |
| 2 | Cleo | namen[1] → Bert | 2. Bert |
| 3 | IndexError ✘ | namen[2] → Cleo | 3. Cleo |
De verbeterde code:
namen = ["Ann", "Bert", "Cleo"]
for i in range(1, len(namen) + 1):
print(f"{i}. {namen[i - 1]}")
1. Ann 2. Bert 3. Cleo
Bonusvraag (geneste herhaling) (+3 pt bonus)¶
Vraag 21 (3 pt)¶
Wat is de uitvoer?
for i in range(1, 4):
rij = ""
for j in range(i, 4):
rij += str(i * j) + " "
print(f"{i}: {rij}")
1: 1 2 3 2: 4 6 3: 9
Uitvoer:
1: 1 2 3
2: 4 6
3: 9
🔎 Stap voor stap¶
for i in range(1, 4): # i = 1, 2, 3
rij = "" # bij elke nieuwe i: lege rij
for j in range(i, 4): # j start bij i, stopt vóór 4
rij += str(i * j) + " " # getal → tekst + spatie toevoegen
print(i, j, rij) # extra print: toont elke tussenstap
print(f"{i}: {rij}")
1 1 1 1 2 1 2 1 3 1 2 3 1: 1 2 3 2 2 4 2 3 4 6 2: 4 6 3 3 9 3: 9
| i | range(i, 4) | j | i * j | rij na deze stap | uitvoer |
|---|---|---|---|---|---|
| 1 | 1, 2, 3 | 1 | 1 | "1 " | |
| 2 | 2 | "1 2 " | |||
| 3 | 3 | "1 2 3 " | 1: 1 2 3 | ||
| 2 | 2, 3 | 2 | 4 | "4 " | |
| 3 | 6 | "4 6 " | 2: 4 6 | ||
| 3 | 3 | 3 | 9 | "9 " | 3: 9 |