Van blokken naar tekst: variabelen, rekenen, keuzes, lussen en foutmeldingen die je leert lezen
Je begint met lezen, voorspellen en kleine stukjes code, gaat dan echte keuzes en lussen schrijven en fouten jagen, en eindigt met problemen waarin je zelf een algoritme bedenkt. Werk bij elke opdracht op papier tot de vraag vraagt om het programma te draaien: eerst voorspellen, dan pas controleren. Opdracht 27.14 is een bouwsteen voor de klimaatmodule.
Dezelfde simulatie twee keer: links in blokken, rechts in Python.
Hoe lees je een opdracht?
Drie tredenOefenenToepassenUitdagen
Elk hoofdstuk bouwt op: eerst oefenen (één stap, direct toepassen), dan toepassen (meerdere stappen, in een context), dan uitdagen (transfer, open problemen, andere leerlijnen erbij).
De StemExpert-schaal5
Eén moeilijkheidsschaal van 1 tot 9 over de drie niveaus heen: Fundamental loopt van 1 tot 4, Intermediate van 3 tot 7, Expert van 6 tot 9. Zo zie je dat de uitdaging van het ene niveau de oefening van het volgende is.
Oefenen
Oefenen
één stap, direct toepassen
27.1
Van blokken naar Python
Oefenen3Programmeren15 min
Dit aftelscript komt uit F23. De sprite zegt 10, 9, ..., 1 en daarna 'Start!'.
Een teller die aftelt tot 0.
a
Schrijf het script in Python. Gebruik print() voor 'zeg' en laat de wachttijd weg.
b
Het Scratch-blok zegt 'herhaal tot tijd = 0'. Welke voorwaarde schrijf je achter while? Leg uit waarom ze omgedraaid is.
c
Schrijf dezelfde aftelling met for en range().
d
Wat verander je aan je while-versie zodat ook 0 getoond wordt?
Hint
Met een negatieve stap telt range() af: range(10, 0, -1).
27.2
Welk type, welke waarde?
Oefenen3Begrijpen12 min
Schrijf voor elke uitdrukking op wat Python als uitkomst geeft en van welk type ze is. Controleer daarna in de shell.
a
Vul de tabel in.
uitdrukking
type
waarde
7 / 2
7 // 2
7 % 2
2 ** 3
3.0 * 2
"7" + "2"
"7" * 3
7 > 2
int("7") + 2
float(7)
round(2.567, 1)
10 / 5
b
Bij welke twee uitdrukkingen is het type anders dan je op het eerste gezicht zou denken? Leg uit.
27.3
Rekenen met // en %
Oefenen3Rekenen12 min
Schrijf telkens de Python-uitdrukking(en) en de uitkomst.
a
De groeilampen branden 1000 minuten. Hoeveel uur en minuten is dat?
b
De pomp van de meetkas draait 225 s per dag. Hoeveel minuten en seconden?
c
48 plantplaatsen gaan in goten van 7 plaatsen. Hoeveel goten zijn helemaal vol, en hoeveel plaatsen blijven over?
d
De logger bewaart om de 5 minuten een meting, genummerd vanaf 0 om middernacht. Om hoe laat valt meting 170?
e
Schrijf een voorwaarde die True is als het getal n even is.
27.4
Voorspel de uitvoer
Oefenen4Analyseren12 min
Voorspel wat dit programma toont, zonder het te draaien. Houd de waarde van elke variabele bij in de kantlijn.
Welke waarde heeft b op het einde, en waarom is dat geen 3.33?
27.5
Netjes tonen met f-strings
Oefenen4Programmeren15 min
Gegeven: verbruik = 3269.5 (Wh per dag) en zon = 1750.0 (Wh per dag in december).
a
Schrijf twee print()-regels die precies dit tonen:
verbruik: 3,27 kWh per dag
zonnestroom: 1750 Wh (54 % van het verbruik)
b
Waarom mag je met de variabele die '3,27' bevat niet meer verder rekenen?
Hint
Het verbruik staat in kWh met twee decimalen en een komma; het percentage is zon / verbruik maal 100, zonder decimalen.
27.6
Lees de foutmelding
Oefenen4Begrijpen15 min
Vier leerlingen krijgen een foutmelding (Python 3.13). Zeg telkens welk soort fout het is, op welke regel, wat er fout is, en hoe je het verbetert.
a
A
print("verbruik per dag)
File "budget.py", line 1
print("verbruik per dag)
^
SyntaxError: unterminated string literal (detected at line 1)
b
B
zon=1400*1.25print("zon:",round(zon,1)
File "budget.py", line 2
print("zon:", round(zon, 1)
^
SyntaxError: '(' was never closed
c
C
maand=int("maart")
Traceback (most recent call last):
File "budget.py", line 1, in <module>
maand = int("maart")
ValueError: invalid literal for int() with base 10: 'maart'
d
D
antwoord="25"ifantwoord>20:print("warm")
Traceback (most recent call last):
File "budget.py", line 2, in <module>
if antwoord > 20:
^^^^^^^^^^^^^
TypeError: '>' not supported between instances of 'str' and 'int'
Toepassen
Toepassen
meerdere stappen, in een context
27.7
Trace-tabel: algen in het reservoir
Toepassen4Rekenen15 min
In een doorzichtig reservoir verdubbelen de algen elke dag (hoofdstuk 5). Het alarm gaat af boven 500 000 cellen per mL. Het programma zoekt na hoeveel dagen dat gebeurt.
algen=2000# cellen per mLdagen=0whilealgen<=500000:algen=algen*2dagen=dagen+1print(dagen,algen)
a
Speel het programma na. Vul een rij in voor elke test van de voorwaarde.
dagen
algen
algen <= 500000?
b
Wat toont het programma? Hoeveel keer wordt de voorwaarde getest, en hoeveel keer draait het blok?
c
Hoofdstuk 5 rekende met logaritmen 7,97 dagen uit. Waarom geeft de lus 8?
27.8
Van code naar stroomdiagram
Toepassen4Tekenen20 min
Neem het programma kas_simulatie.py uit het handboek (de simulatie van de meetkas).
a
Teken het stroomdiagram met de symbolen uit F22. Een stroomdiagram kent geen for: gebruik een teller uur en een ruit.
b
Waar in je stroomdiagram zit het inspringen van de code?
27.9
De volgorde van elif
Toepassen5Analyseren15 min
Een leerling schrijft een klimaatwaarschuwing voor de klimaatmodule.
temp=31iftemp>18:print("goed")eliftemp>26:print("warm: ventileren")eliftemp>30:print("te heet: dak open en lampen dimmen")else:print("te koud")
a
Wat toont het programma voor temp = 31, 22, 27 en 15?
b
Waarom verschijnt 'warm' of 'te heet' nooit?
c
Herschrijf de keuze zodat elke tak werkt.
27.10
Een EC-meter met advies
Toepassen5Programmeren20 min
De EC van de voedingsoplossing moet tussen 1,2 en 1,8 mS/cm liggen; de streefwaarde is 1,4 (hoofdstuk 13). Een gebruiker typt de gemeten EC, soms met een komma.
a
Schrijf een programma dat de invoer omzet (ook met een komma), advies geeft (te laag, te hoog of in orde) en de afwijking van 1,4 in procent toont, met een teken. Zet de invoer voorlopig in een variabele.
b
Test met 1,15; 1,2; 1,4 en 1,9. Welke test is een grensgeval, en wat moet daar uitkomen?
27.11
Waar of niet waar?
Toepassen5Begrijpen12 min
In de klimaatmodule gelden op dit moment deze waarden:
temp=27.5vocht=82deur_open=Falsenacht=True
a
Geef de uitkomst (True of False) van elke uitdrukking.
uitdrukking
uitkomst
temp > 26 and vocht > 80
temp > 30 or vocht > 80
not deur_open and temp > 26
nacht and not vocht < 85
20 <= temp <= 26
temp > 30 or nacht and vocht > 90
b
Schrijf één voorwaarde voor: de ventilator gaat aan als het warmer is dan 26 °C of vochtiger dan 85 %, maar nooit als de deur openstaat.
Hint
not gaat vóór and, and gaat vóór or. Werk van binnen naar buiten.
27.12
Het dakraam met hysterese
Toepassen6Programmeren25 min
Het dakraam van de meetkas gaat open boven 28 °C en pas weer dicht onder 25 °C (F25). Die twee drempels (hysterese) voorkomen dat het raam bij elke kleine schommeling op en neer gaat. De sensor meet achtereenvolgens: 27; 28,5; 27,9; 28,2; 26; 24,5; 25,5 en 24 °C.
a
Schrijf een programma met een variabele raam_open (True of False) dat de metingen overloopt, het raam opent of sluit, elke schakeling toont en ze telt. Een for-lus kan over een reeks waarden tussen haakjes lopen.
b
Hoeveel keer schakelt het raam? Hoeveel keer zou het schakelen met één drempel van 28 °C (open erboven, dicht eronder)?
c
Waarom staat er and not raam_open in de voorwaarde om te openen?
27.13
Foutenjacht: vier fouten in één programma
Toepassen6Analyseren20 min
Dit programma moet het verbruik van de pomp van de klimaatmodule tonen (12 W, 10 minuten per uur). Er zitten vier fouten in.
# pomp.py - energie van de pomp van de klimaatmodulevermogen=12# Wminuten=10# per uurenergie=vermogen*minuten/60ifenergie>1print("de pomp verbruikt meer dan 1 Wh per uur")print("energie per uur: "+energie+" Wh")per_dag=energie*24print(f"per dag: {per_dg:.0f} Wh")
a
Python toont je de fouten niet alle vier tegelijk. Geef ze in de volgorde waarin je ze krijgt, met het soort fout en de regel.
b
Waarom verschijnt de eerste regel uitvoer al bij de derde fout, maar niet bij de eerste twee?
c
Schrijf het verbeterde programma. Wat toont het?
Uitdagen
Uitdagen
transfer, open problemen, leerlijnen combineren
27.14
Habitat: de rekenhulp uitbreiden
Uitdagen6Habitat45 min
Vertrek van energiebudget.py uit het handboek. De klimaatmodule wil weten wat er in de wintermaanden nodig is om toch 16 lichturen op zonnestroom te halen. PVGIS (Wh per Wp per dag): januari 1,41; februari 2,11; november 1,66; december 1,25. Een paneel van 350 Wp meet 1,65 × 1,00 m.
a
Schrijf de twee regels die de maand en de PVGIS-waarde echt met input() vragen, zodat een gebruiker ook '1,25' met een komma kan typen.
b
Voeg een while-lus toe die zoekt hoeveel panelen van 350 Wp nodig zijn om het volledige verbruik (3269,5 Wh per dag) op zonnestroom te halen.
c
Vul de tabel in met je programma.
maand
panelen nodig
oppervlakte (m²)
januari
februari
november
december
d
Is dat een goed idee? Vergelijk met de vier panelen die er liggen (hoofdstuk 20) en noem een alternatief.
Zo wordt dit beoordeeld
Invoer
input() met omzetting en vervangen van de komma; de maand als tekst of als getal.
Lus
Juiste voorwaarde (stopt bij het eerste aantal dat volstaat), beginwaarde vóór de lus, geen oneindige lus.
Resultaten
Tabel volledig en getest tegen een schatting (verbruik / (350 × PVGIS), naar boven afgerond).
Besluit
Afweging met ruimte op het dak, kosten en de zomer (dan grote overschotten); een alternatief benoemd.
27.15
Het vermoeden van Collatz
Uitdagen7Programmeren30 min
Neem een positief geheel getal n. Is het even, deel het door 2; is het oneven, neem 3n + 1. Herhaal. Het vermoeden van Collatz (1937) zegt dat je altijd bij 1 uitkomt. Niemand heeft het ooit bewezen, en niemand heeft een tegenvoorbeeld gevonden. Voorbeeld: 6, 3, 10, 5, 16, 8, 4, 2, 1 (8 stappen).
a
Schrijf een programma dat voor een startwaarde het aantal stappen tot 1 telt en de grootste waarde onderweg bijhoudt. Test het met 6.
b
Hoeveel stappen zijn er voor 27, en hoe hoog klimt de reeks?
c
Welke startwaarde onder 100 heeft de meeste stappen? Gebruik een lus rond je lus.
d
Waarom gebruik je hier while en niet for?
Hint
n % 2 == 0 test of n even is. Gebruik // om te delen, anders wordt n een float.
27.16
Onderzoek: kan Python tot 1 tellen?
Uitdagen7Onderzoeken30 min
Tien keer 0,1 optellen is 1. Of niet? Onderzoek hoe Python met kommagetallen omgaat en wat dat betekent voor programma's die metingen vergelijken.
Zoek twee sommen met kommagetallen die wél exact kloppen en twee die niet kloppen. Welk patroon zie je? (Denk aan het tweetallig stelsel, hoofdstuk 25.)
c
Een programma test if ph == 5.8: om te weten of de pH precies op de streefwaarde zit. Waarom is dat een slecht idee, en hoe doe je het beter?
Zo wordt dit beoordeeld
Voorspelling
Eerst voorspeld, dan gecontroleerd; afwijkingen benoemd.
Patroon
Breuken met een macht van 2 in de noemer (0,5; 0,25; 0,75) zijn exact, andere niet.
Toepassing
Vergelijken met een marge of afronden, gemotiveerd.
27.17
Debat: blokken of tekst?
Uitdagen5Argumenteren20 min
Een leraar stelt voor om de klimaatmodule in blokken te blijven programmeren (mBlock voor de Arduino), 'want dan maakt niemand typfouten'. Een leerling vindt dat Python en C++ beter zijn.
a
Geef twee sterke argumenten voor blokken en twee voor tekst, telkens met een concreet voorbeeld uit dit hoofdstuk.
b
Voor welk soort programma of welke gebruiker zou jij blokken kiezen, en voor welk tekst? Motiveer.
ZelfevaluatieKleur per doel: lukt al / bijna / nog niet
Ik kan een blokprogramma omzetten in een Python-programma en uitleggen wat de dubbelepunt en het inspringen doen.
Ik kan variabelen met een zinvolle naam maken en de types int, float, str en bool herkennen en in elkaar omzetten.
Ik kan rekenen met +, −, *, /, //, % en ** en de volgorde van de bewerkingen toepassen.
Ik kan resultaten netjes tonen met print() en f-strings, afgerond en met een decimale komma.
Ik kan uitleggen hoe input() werkt en invoer (ook met een komma) omzetten in een getal.
Ik kan keuzes programmeren met if, elif en else, met vergelijkingen en met and, or en not.
Ik kan herhalen met for en range() en met while, en een lus naspelen met een trace-tabel.
Ik kan een foutmelding lezen, de oorzaak vinden en de fout verbeteren, ook een fout zonder melding.
Ik kan een Python-rekenhulp schrijven en gebruiken voor het energiebudget van de klimaatmodule.