← Back to CoursesStemExpert
StemExpert
Intermediate · Werkboek · 28. Functies, lijsten en data in Python
StemExpert · Brecht Corbeel · schoolium.me
StemExpert
I28. Functies, lijsten en data in Python — werkboek
IIntermediate · deel I7 · Programmeren

Werkboek · hoofdstuk 28Functies, lijsten en data in Python

Eigen functies, lijsten en woordenboeken, en een week meetdata van de klimaatmodule tot een besluit

Je begint met functies en lijsten op papier en in kleine programma's, gaat dan met het CSV-bestand van de klimaatmodule werken en fouten jagen, en eindigt met een volledige analyse en een eigen ontwerp. Download klimaatmodule_week.csv bij het codeblad in het handboek. Opdracht 28.12 is een bouwsteen voor de klimaatmodule.

5× oefenen6× toepassen5× uitdagen± 346 min0/16 gedaan
Een week meten levert honderden getallen op; een programma maakt er een besluit van.
Een week meten levert honderden getallen op; een programma maakt er een besluit van.
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
28.1

Twee functies schrijven

Oefenen3Programmeren15 min
Voor het energiebudget reken je met € 0,30 per kWh (hoofdstuk 4).
  1. a
    Schrijf een functie kosten(wh, prijs=0.30) met docstring die de kosten in euro geeft van een energie in Wh.
  2. b
    Wat kost het verbruik van de klimaatmodule (3269,5 Wh per dag) per dag en per jaar, als alles van het net zou komen? Wat per dag bij € 0,25 per kWh?
  3. c
    Schrijf een functie kelvin(celsius) en test ze met 28,6 °C en met het absolute nulpunt.
28.2

print of return?

Oefenen4Analyseren12 min
Een leerling schrijft een functie voor het gemiddelde en gebruikt ze.
def gemiddelde(lijst):
    print(sum(lijst) / len(lijst))


g = gemiddelde([20, 22, 24])
print(round(g, 1))
  1. a
    Voorspel wat er op het scherm komt. Waarom loopt het programma vast?
  2. b
    Verbeter de functie met één woord.
28.3

Indexeren en snijden

Oefenen3Rekenen15 min
De rekenhulp gaf per maand de lichturen die de zonnestroom kan betalen:
lichturen = [9, 14, 16, 16, 16, 16, 16, 16, 16, 16, 11, 8]
  1. a
    Wat geeft Python voor elke uitdrukking?
    uitdrukkinguitkomst
    lichturen[0]
    lichturen[11]
    lichturen[-2]
    lichturen[10:]
    lichturen[:3]
    len(lichturen)
    sum(lichturen)
    lichturen.index(8)
    lichturen.count(16)
    sorted(lichturen)[:4]
    lichturen[::3]
    min(lichturen[3:9])
  2. b
    Met welke slice krijg je de lichturen van de drie zomermaanden juni, juli en augustus?
28.4

Voorspel: lijsten die veranderen

Oefenen4Analyseren12 min
Voorspel wat dit programma toont. Teken eerst de naamkaartjes en de lijsten.
a = [1, 2, 3]
b = a
c = a.copy()
b.append(4)
c[0] = 99
a[1] = a[1] * 10
print(a)
print(b)
print(c)
print(len(a) + len(c))
  1. a
    Schrijf de vier regels uitvoer op.
  2. b
    Waarom verandert c niet mee met a, en b wel?
28.5

Een woordenboek: de pintabel

Oefenen4Programmeren15 min
De Arduino Mega van de klimaatmodule heeft een vaste pintabel: A0 NTC reservoir, A1 LDR, A2 pH-module, A3 batterijdeler; D2 vlotterschakelaar, D9 pomp (MOSFET).
  1. a
    Maak een woordenboek pinnen met de vier analoge pinnen en toon welk onderdeel op A2 zit.
  2. b
    Voeg D9 en D2 toe en toon alle pinnen gesorteerd op hun naam.
  3. c
    Wat gebeurt er bij pinnen["A7"]? Hoe vraag je A7 op zonder foutmelding, met 'vrij' als antwoord?
Toepassen

Toepassen

meerdere stappen, in een context
28.6

Trace: het maximum zoeken

Toepassen4Rekenen12 min
Speel de functie grootste() uit het handboek na voor de zonnestroom per dag: [7465, 5105, 1547, 3077, 6949, 7717, 4676].
  1. a
    Vul de trace-tabel in.
    ww > beste?beste daarna
  2. b
    Hoeveel vergelijkingen doet de functie voor een lijst met n waarden? En hoeveel keer verandert beste hier?
  3. c
    Een leerling begint met beste = 0 in plaats van de eerste waarde. Voor welke lijsten gaat dat mis?
28.7

Een CSV-bestand lezen zoals Python het doet

Toepassen4Analyseren15 min
Een stuk uit klimaatmodule_week.csv:
tijdstip,temperatuur_C,vocht_pct,verbruik_Wh,zon_Wh
2026-04-22 06:00,19.2,83,595,25
2026-04-22 09:00,19.7,78,525,314
2026-04-22 12:00,,78,454,611
2026-04-22 15:00,21.1,76,483,484
  1. a
    Hoeveel kolommen en hoeveel gegevensrijen staan hier? Welke meting ontbreekt?
  2. b
    Schrijf het woordenboek dat csv.DictReader geeft voor de rij van 12 uur.
  3. c
    Welk type heeft rij["zon_Wh"]? Wat is rij["zon_Wh"] + rij["zon_Wh"] voor die rij?
  4. d
    Een Belgisch rekenblad bewaart CSV vaak met een puntkomma als scheidingsteken en een decimale komma. Hoe zien de kop en de eerste gegevensregel er dan uit? Wat verander je aan je programma?
28.8

Foutenjacht in een CSV-programma

Toepassen5Analyseren20 min
Dit programma moet het totale verbruik en de gemiddelde temperatuur van de meetweek tonen. Er zitten vier fouten in; drie geven een foutmelding.
# weektotaal.py - totaal verbruik en gemiddelde temperatuur van de week
import csv

verbruik = []
temperaturen = []
with open("klimaatmodule_week.csv", newline="", encoding="utf-8") as bestand:
    for rij in csv.DictReader(bestand):
        verbruik.append(rij["verbruik_Wh"])
        temperaturen.append(float(rij["temperatuur"]))

print("totaal verbruik:", sum(verbruik), "Wh")
print("gemiddelde temperatuur:", sum(temperaturen) / len(verbruik))
  1. a
    Python toont de drie meldingen na elkaar: telkens als je er één verbetert, verschijnt de volgende. Welke fouten zijn het, in volgorde, en hoe verbeter je ze?
  2. b
    Na die drie verbeteringen toont het programma een gemiddelde van 21,07 °C. Waarom is dat fout, en wat is het juiste gemiddelde?
Hint
Kijk naar de kolomnamen in de kop van het bestand, naar de lege cel van woensdag, en naar het type van wat DictReader geeft.
28.9

Gemiddelde temperatuur per dagdeel

Toepassen5Programmeren20 min
De beheerder wil weten hoe warm het gemiddeld is in de nacht (0-6 uur), de ochtend (6-12), de middag (12-18) en de avond (18-24), over de hele week.
  1. a
    Schrijf een programma met een woordenboek dat voor elk dagdeel een lijst temperaturen verzamelt uit klimaatmodule_week.csv, en daarna per dagdeel het gemiddelde en het aantal metingen toont.
  2. b
    Waarom heeft de middag één meting minder dan de andere dagdelen?
28.10

Van blokken naar dagen

Toepassen5Programmeren20 min
Het verbruik staat per blok van drie uur in een lijst van 56 waarden, acht per dag. (De lijst kopieer je uit het bestand, of je leest ze in zoals in inlezen.py.)
  1. a
    Schrijf een functie dagtotalen(waarden, per_dag=8) die telkens acht opeenvolgende waarden optelt en een lijst met zeven dagtotalen teruggeeft. Gebruik slicing.
  2. b
    Schrijf een functie naar_kwh(lijst_wh) die een nieuwe lijst in kWh geeft (2 decimalen), met een lijstomschrijving.
  3. c
    Controleer je dagtotalen met de tabel van per_dag.py in het handboek.
Hint
range(0, 56, 8) geeft 0, 8, 16, ...: de startindex van elke dag.
28.11

De vochtigheid in een grafiek

Toepassen4Tekenen25 min
De kolom vocht_pct bevat de relatieve luchtvochtigheid. Op woensdag 22 april (de regendag) meet de module: 00 uur: 83 %, 03 uur: 82 %, 06 uur: 83 %, 09 uur: 78 %, 12 uur: 78 %, 15 uur: 76 %, 18 uur: 80 %, 21 uur: 83 %.
  1. a
    Teken de vochtigheid van woensdag op millimeterpapier, met de tijd (uur) horizontaal. Kies een schaal die het papier goed vult.
  2. b
    Welke regels van grafiek_week.py verander je om de vochtigheid van de hele week te tekenen? Schrijf ze.
  3. c
    Vergelijk met de temperatuurgrafiek: wat doet de vochtigheid als het warm wordt? Verklaar met wat je weet over waterdamp in lucht (F6).
Uitdagen

Uitdagen

transfer, open problemen, leerlijnen combineren
28.12

Habitat: een week in de klimaatmodule

Uitdagen6Habitat50 min
Je analyseert de meetweek als beheerder van de klimaatmodule. Gebruik je eigen programma's (of die van het handboek) op klimaatmodule_week.csv. De module heeft twee LiFePO4-batterijen met samen 2457,6 Wh bruikbare energie (hoofdstuk 20).
  1. a
    Maak de tabel per dag: gemiddelde en hoogste temperatuur, verbruik, zonnestroom en saldo.
    dagT gemT maxverbruik (Wh)zon (Wh)saldo (Wh)
  2. b
    Op welke dag moet de batterij bijspringen? Welk deel van de bruikbare batterij-energie kost die dag? Wordt het de dag erna weer goedgemaakt?
  3. c
    Hoeveel uur was het warmer dan 26 °C, en wanneer? Stel twee maatregelen voor, telkens met hun gevolg voor het energiebudget.
  4. d
    Schrijf voor je portfolio een besluit van vijf zinnen: werkt het energiebeheer in deze week, en wat zou je volgende week meten?
Zo wordt dit beoordeeld
TabelAlle zeven dagen, met eenheden; de ontbrekende meting correct behandeld (niet als 0).
BatterijTekort berekend en als deel van 2457,6 Wh uitgedrukt; herstel de dag erna nagegaan.
WarmteWarme blokken correct geteld (per 3 uur); maatregelen concreet, met gevolg voor verbruik.
BesluitOnderbouwd met getallen uit de analyse; een zinvolle volgende meting (bv. per 5 minuten, of de temperatuur van het reservoir).
28.13

Een voortschrijdend gemiddelde

Uitdagen6Programmeren25 min
Metingen schommelen. Een voortschrijdend gemiddelde vervangt elke waarde door het gemiddelde van haar en de volgende n − 1 waarden, zodat de lijn gladder wordt. In E21 wordt dat een digitaal filter.
  1. a
    Schrijf een functie voortschrijdend(waarden, n=3) die een nieuwe lijst met de gemiddelden van telkens n opeenvolgende waarden teruggeeft. Gebruik slicing.
  2. b
    Pas ze toe op de acht temperaturen van maandag. Hoeveel waarden heeft de nieuwe lijst, en waarom?
  3. c
    Wat gebeurt er met de hoogste waarde? Is dat erg voor de vraag 'hoe lang was het warmer dan 26 °C'?
28.14

Onderzoek: hangt het verbruik af van de zon?

Uitdagen7Onderzoeken40 min
De correlatiecoëfficiënt van Pearson meet hoe goed twee reeksen samen op en neer gaan: is een perfect stijgend verband, een perfect dalend, geen lineair verband. Met de gemiddelden en : .
  1. a
    Schrijf een functie correlatie(x, y) volgens de formule, met zip en lijstomschrijvingen.
  2. b
    Bereken r tussen zonnestroom en verbruik (a) over alle 56 blokken en (b) alleen over de 35 blokken van 6 tot en met 18 uur.
  3. c
    Verklaar het verschil tussen (a) en (b). Wat leert dit over het vergelijken van groepen die op een andere manier verschillen?
Zo wordt dit beoordeeld
FunctieFormule correct, met docstring; getest op een eenvoudig geval (bv. x = y geeft 1).
BerekeningBeide r-waarden correct, de selectie van de blokken gemotiveerd.
InterpretatieHet verschil verklaard met een derde factor (dag en nacht); correlatie niet als bewijs gebracht.
28.15

Ontwerp: het logbestand van de klimaatmodule

Uitdagen6Ontwerpen30 min
In hoofdstuk 30 bouw je een datalogger die de metingen van de klimaatmodule op een SD-kaart schrijft. Ontwerp nu al het CSV-formaat, zodat je analyseprogramma's er meteen mee werken.
  1. a
    Welke kolommen neem je op (minstens zes), met welke naam en eenheid? Welke kolom is de sleutel om te groeperen?
  2. b
    Kies het tijdformaat, het decimaalteken, het scheidingsteken en wat er in een cel staat als een sensor faalt. Motiveer.
  3. c
    De logger schrijft elke minuut een regel van ongeveer 60 tekens. Hoe groot wordt het bestand na een jaar? Kies: één bestand per dag, per week of per jaar?
Zo wordt dit beoordeeld
KolommenRelevante grootheden (temperatuur lucht en reservoir, vocht, licht, pH, EC, CO₂, verbruik, zon, laadtoestand), eenheid in de naam, zonder spaties.
FormaatISO-tijd (jjjj-mm-dd uu:mm, met tijdzone of UTC), decimale punt en komma als scheiding, lege cel bij een fout; gemotiveerd.
OmvangJuiste orde van grootte en een onderbouwde keuze van de bestandsgrootte.
28.16

Debat: rekenblad of Python?

Uitdagen5Argumenteren20 min
Een klasgenoot vindt Python overdreven voor de meetweek: 'In een rekenblad heb ik dat gemiddelde in tien seconden, en ik zie meteen alle getallen.' Denk aan het verhaal van de vijf ontbrekende landen.
  1. a
    Geef twee sterke argumenten voor een rekenblad en twee voor Python, elk met een voorbeeld uit dit hoofdstuk.
  2. b
    Voor welke taak kies jij wat? Welke controle doe je in beide gevallen om een fout als die van de vijf landen te vermijden?
ZelfevaluatieKleur per doel: lukt al / bijna / nog niet