← Back to CoursesStemExpert
StemExpert
Intermediate · Werkboek · 27. Python: de basis
StemExpert · Brecht Corbeel · schoolium.me
StemExpert
I27. Python: de basis — werkboek
IIntermediate · deel I7 · Programmeren

Werkboek · hoofdstuk 27Python: de basis

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.

6× oefenen7× toepassen4× uitdagen± 333 min0/17 gedaan
Dezelfde simulatie twee keer: links in blokken, rechts in Python.
Dezelfde simulatie twee keer: links in blokken, rechts in Python.
Hoe lees je een opdracht?
Drie tredenOefenen Toepassen Uitdagen

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!'.
wanneer opwordt gekliktmaaktijd10herhaal tottijd=0zegtijd1sec.verandertijdmet-1zegStart!
Een teller die aftelt tot 0.
  1. a
    Schrijf het script in Python. Gebruik print() voor 'zeg' en laat de wachttijd weg.
  2. b
    Het Scratch-blok zegt 'herhaal tot tijd = 0'. Welke voorwaarde schrijf je achter while? Leg uit waarom ze omgedraaid is.
  3. c
    Schrijf dezelfde aftelling met for en range().
  4. 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.
  1. a
    Vul de tabel in.
    uitdrukkingtypewaarde
    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
  2. 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.
  1. a
    De groeilampen branden 1000 minuten. Hoeveel uur en minuten is dat?
  2. b
    De pomp van de meetkas draait 225 s per dag. Hoeveel minuten en seconden?
  3. c
    48 plantplaatsen gaan in goten van 7 plaatsen. Hoeveel goten zijn helemaal vol, en hoeveel plaatsen blijven over?
  4. d
    De logger bewaart om de 5 minuten een meting, genummerd vanaf 0 om middernacht. Om hoe laat valt meting 170?
  5. 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.
a = 5
b = a * 2
a = a + 1
c = b / 4
b = b // 3
print(a, b, c)
print(a + b * 2)
print(f"{c:.1f}")
tekst = "3" * a
print(tekst)
  1. a
    Schrijf de vier regels uitvoer op.
  2. b
    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).
  1. a
    Schrijf twee print()-regels die precies dit tonen:
    verbruik: 3,27 kWh per dag
    zonnestroom: 1750 Wh (54 % van het verbruik)
  2. 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.
  1. a
    A
    print("verbruik per dag)
      File "budget.py", line 1
        print("verbruik per dag)
              ^
    SyntaxError: unterminated string literal (detected at line 1)
  2. b
    B
    zon = 1400 * 1.25
    print("zon:", round(zon, 1)
      File "budget.py", line 2
        print("zon:", round(zon, 1)
             ^
    SyntaxError: '(' was never closed
  3. 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'
  4. d
    D
    antwoord = "25"
    if antwoord > 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 mL
dagen = 0
while algen <= 500000:
    algen = algen * 2
    dagen = dagen + 1
print(dagen, algen)
  1. a
    Speel het programma na. Vul een rij in voor elke test van de voorwaarde.
    dagenalgenalgen <= 500000?
  2. b
    Wat toont het programma? Hoeveel keer wordt de voorwaarde getest, en hoeveel keer draait het blok?
  3. 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).
  1. a
    Teken het stroomdiagram met de symbolen uit F22. Een stroomdiagram kent geen for: gebruik een teller uur en een ruit.
  2. 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 = 31
if temp > 18:
    print("goed")
elif temp > 26:
    print("warm: ventileren")
elif temp > 30:
    print("te heet: dak open en lampen dimmen")
else:
    print("te koud")
  1. a
    Wat toont het programma voor temp = 31, 22, 27 en 15?
  2. b
    Waarom verschijnt 'warm' of 'te heet' nooit?
  3. 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.
  1. 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.
  2. 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.5
vocht = 82
deur_open = False
nacht = True
  1. a
    Geef de uitkomst (True of False) van elke uitdrukking.
    uitdrukkinguitkomst
    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
  2. 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.
  1. 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.
  2. b
    Hoeveel keer schakelt het raam? Hoeveel keer zou het schakelen met één drempel van 28 °C (open erboven, dicht eronder)?
  3. 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 klimaatmodule
vermogen = 12          # W
minuten = 10           # per uur
energie = vermogen * minuten / 60
if energie > 1
print("de pomp verbruikt meer dan 1 Wh per uur")
print("energie per uur: " + energie + " Wh")
per_dag = energie * 24
print(f"per dag: {per_dg:.0f} Wh")
  1. 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.
  2. b
    Waarom verschijnt de eerste regel uitvoer al bij de derde fout, maar niet bij de eerste twee?
  3. 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.
  1. 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.
  2. 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.
  3. c
    Vul de tabel in met je programma.
    maandpanelen nodigoppervlakte (m²)
    januari
    februari
    november
    december
  4. d
    Is dat een goed idee? Vergelijk met de vier panelen die er liggen (hoofdstuk 20) en noem een alternatief.
Zo wordt dit beoordeeld
Invoerinput() met omzetting en vervangen van de komma; de maand als tekst of als getal.
LusJuiste voorwaarde (stopt bij het eerste aantal dat volstaat), beginwaarde vóór de lus, geen oneindige lus.
ResultatenTabel volledig en getest tegen een schatting (verbruik / (350 × PVGIS), naar boven afgerond).
BesluitAfweging 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).
  1. a
    Schrijf een programma dat voor een startwaarde het aantal stappen tot 1 telt en de grootste waarde onderweg bijhoudt. Test het met 6.
  2. b
    Hoeveel stappen zijn er voor 27, en hoe hoog klimt de reeks?
  3. c
    Welke startwaarde onder 100 heeft de meeste stappen? Gebruik een lus rond je lus.
  4. 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.
  1. a
    Voorspel en controleer: wat toont het programma?
    som = 0
    for i in range(10):
        som = som + 0.1
    print(som, som == 1)
    print(round(som, 9) == 1, abs(som - 1) < 1e-9)
    print(0.1 + 0.2 == 0.3, 0.5 + 0.25 == 0.75)
    water = 30
    for beurt in range(14):
        water = water - 0.24
    print(water, round(water, 2))
  2. b
    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.)
  3. 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
VoorspellingEerst voorspeld, dan gecontroleerd; afwijkingen benoemd.
PatroonBreuken met een macht van 2 in de noemer (0,5; 0,25; 0,75) zijn exact, andere niet.
ToepassingVergelijken 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.
  1. a
    Geef twee sterke argumenten voor blokken en twee voor tekst, telkens met een concreet voorbeeld uit dit hoofdstuk.
  2. 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