Intermediate · Werkboek · 28. Functies, lijsten en data in Python StemExpert · Brecht Corbeel · schoolium.me
SE
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.
Een week meten levert honderden getallen op; een programma maakt er een besluit van.
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
28.1
Twee functies schrijven
Oefenen3Programmeren15 min
Voor het energiebudget reken je met € 0,30 per kWh (hoofdstuk 4).
a
Schrijf een functie kosten(wh, prijs=0.30) met docstring die de kosten in euro geeft van een energie in Wh.
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?
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.
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).
a
Maak een woordenboek pinnen met de vier analoge pinnen en toon welk onderdeel op A2 zit.
b
Voeg D9 en D2 toe en toon alle pinnen gesorteerd op hun naam.
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].
a
Vul de trace-tabel in.
w
w > beste?
beste daarna
b
Hoeveel vergelijkingen doet de functie voor een lijst met n waarden? En hoeveel keer verandert beste hier?
c
Een leerling begint met beste = 0 in plaats van de eerste waarde. Voor welke lijsten gaat dat mis?
Hoeveel kolommen en hoeveel gegevensrijen staan hier? Welke meting ontbreekt?
b
Schrijf het woordenboek dat csv.DictReader geeft voor de rij van 12 uur.
c
Welk type heeft rij["zon_Wh"]? Wat is rij["zon_Wh"] + rij["zon_Wh"] voor die rij?
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 weekimportcsvverbruik=[]temperaturen=[]withopen("klimaatmodule_week.csv",newline="",encoding="utf-8")asbestand:forrijincsv.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))
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?
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.
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.
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.)
a
Schrijf een functie dagtotalen(waarden, per_dag=8) die telkens acht opeenvolgende waarden optelt en een lijst met zeven dagtotalen teruggeeft. Gebruik slicing.
b
Schrijf een functie naar_kwh(lijst_wh) die een nieuwe lijst in kWh geeft (2 decimalen), met een lijstomschrijving.
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 %.
a
Teken de vochtigheid van woensdag op millimeterpapier, met de tijd (uur) horizontaal. Kies een schaal die het papier goed vult.
b
Welke regels van grafiek_week.py verander je om de vochtigheid van de hele week te tekenen? Schrijf ze.
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).
a
Maak de tabel per dag: gemiddelde en hoogste temperatuur, verbruik, zonnestroom en saldo.
dag
T gem
T max
verbruik (Wh)
zon (Wh)
saldo (Wh)
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?
c
Hoeveel uur was het warmer dan 26 °C, en wanneer? Stel twee maatregelen voor, telkens met hun gevolg voor het energiebudget.
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
Tabel
Alle zeven dagen, met eenheden; de ontbrekende meting correct behandeld (niet als 0).
Batterij
Tekort berekend en als deel van 2457,6 Wh uitgedrukt; herstel de dag erna nagegaan.
Warmte
Warme blokken correct geteld (per 3 uur); maatregelen concreet, met gevolg voor verbruik.
Besluit
Onderbouwd 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.
a
Schrijf een functie voortschrijdend(waarden, n=3) die een nieuwe lijst met de gemiddelden van telkens n opeenvolgende waarden teruggeeft. Gebruik slicing.
b
Pas ze toe op de acht temperaturen van maandag. Hoeveel waarden heeft de nieuwe lijst, en waarom?
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ëntr van Pearson meet hoe goed twee reeksen samen op en neer gaan: r=1 is een perfect stijgend verband, r=−1 een perfect dalend, r=0 geen lineair verband. Met de gemiddelden xˉ en yˉ: r=∑(x−xˉ)2⋅∑(y−yˉ)2∑(x−xˉ)(y−yˉ).
a
Schrijf een functie correlatie(x, y) volgens de formule, met zip en lijstomschrijvingen.
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.
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
Functie
Formule correct, met docstring; getest op een eenvoudig geval (bv. x = y geeft 1).
Berekening
Beide r-waarden correct, de selectie van de blokken gemotiveerd.
Interpretatie
Het 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.
a
Welke kolommen neem je op (minstens zes), met welke naam en eenheid? Welke kolom is de sleutel om te groeperen?
b
Kies het tijdformaat, het decimaalteken, het scheidingsteken en wat er in een cel staat als een sensor faalt. Motiveer.
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
Kolommen
Relevante grootheden (temperatuur lucht en reservoir, vocht, licht, pH, EC, CO₂, verbruik, zon, laadtoestand), eenheid in de naam, zonder spaties.
Formaat
ISO-tijd (jjjj-mm-dd uu:mm, met tijdzone of UTC), decimale punt en komma als scheiding, lege cel bij een fout; gemotiveerd.
Omvang
Juiste 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.
a
Geef twee sterke argumenten voor een rekenblad en twee voor Python, elk met een voorbeeld uit dit hoofdstuk.
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
Ik kan een functie schrijven met parameters, een standaardwaarde, een returnwaarde en een docstring, en ze aanroepen.
Ik kan het verschil tussen print en return uitleggen en een functie testen met gekozen invoer.
Ik kan lijsten maken, indexeren (ook met een negatieve index), in stukken knippen en aanvullen met append.
Ik kan met len, sum, min, max en sorted rekenen op een lijst, en een gemiddelde en een maximum ook zelf programmeren.
Ik kan over een lijst lopen om op te hopen, te tellen, te filteren en een nieuwe lijst te maken, ook met zip.
Ik kan een woordenboek gebruiken om waarden op te zoeken en om metingen per groep te verzamelen.
Ik kan een CSV-bestand inlezen met de csv-module, de teksten omzetten en ontbrekende waarden opvangen.
Ik kan een week meetdata per dag samenvatten en er een onderbouwd besluit uit trekken.
Ik kan met matplotlib een lijngrafiek en een staafdiagram maken met asopschriften, eenheden en een legende.