Voor deze oefening vertrekken we van exports uit Dodona. Bedoeling is om na te gaan welke studenten de oefeningen correct en tijdig hebben ingediend en hoeveel bonuspunten zij verdiend hebben.
De export uit Dodona gebeurt per oefeningenreeks en is telkens een csv-bestand dat zoals op onderstaande schermafdruk (we hebben de namen van de studenten vervangen door een studentnummer).
De eerste regel mag genegeerd worden, de volgende regel bevat de kolomhoofdingen. Vervolgens komt per student in de eerste kolom het studentnummer en dan voor elke oefening het getal 0 (oefening niet tijdig correct ingediend) of 1 (oefening tijdig en correct ingediend). Het aantal oefeningen is variabel voor elke oefeningenreeks maar wel voor alle studenten hetzelfde binnen één oefeningenreeks (per exportbestand dus).
De naam van het exportbestand wordt automatisch gegenereerd op basis van de naam van de oefeningenreeks.
bestandsnaam
Schrijf een functie bestandsnaam waaraan als argument de naam van de oefeningenreeks gegeven wordt (een string).
De functie retourneert een string die de bestandsnaam van de export van deze reeks is.
De bestandsnaam wordt als volgt opgebouwd:
resultaten
Schrijf een functie resultaten met twee argumenten: i) een studentnummer (int) en ii) de naam van een exportbestand (string).
De functie leest het exportbestand van deze oefeningenreeks in en retourneert de scores (0 of 1) van alle oefeningen van deze student als een lijst van ints.
Als de student met dit nummer niet voorkomt in de export, dan wordt een lege lijst geretourneerd.
evaluatie
Schrijf een functie evaluatie met één argument: een lijst met resultaten als integer (0 of 1), in dezelfde vorm als de return value van de functie resultaten.
De functie retourneert een string:
bonuspunten
Schrijf een functie bonuspunten met twee argumenten: i) een studentnummer (een int) en ii) een lijst met oefeningenreeksen (namen van de reeksen als strings).
De functie maakt gebruik van voorgaande functies om uit de exportbestanden van de oefeningenreeksen de nodige informatie te halen om het aantal bonuspunten te berekenen. Dit gebeurt als volgt:
Als een student alle oefeningenreeksen in de opgegeven lijst volledig en tijdig heeft afgewerkt, krijgt zij/hij twee bonuspunten. Als een student voor alle oefeningenreeksen in de lijst minstens de helft van de oefeningen correct en tijdig heeft ingediend, krijgt hij/zij één bonuspunt. In alle andere gevallen krijgt zij/hij 0 bonuspunten.
De functie retourneert een geheel getal: 0, 1 of 2.
De exportbestanden zijn beschikbaar in het working directory van Dodona.
Als je de oefening lokaal wilt maken (in PyCharm of in een Jupyter Notebook), dan kan je deze bestanden downloaden en bewaren in dezelfde map als je .py of .ipynb bestand.
Je kan de bestanden hier downloaden:
Reeks 1: Variabelen en bewerkingen1
Reeks 2: Beslissingen2
Reeks 3: Herhaling3
Reeks 4: Strings4
Reeks 5: Functies5
Reeks 6: Recursie6
Reeks 7: Lists en Tuples7
>>> bestandsnaam('Reeks 5: Functies') 'scoresheet-reeks-5-functies.csv' >>> resultaten(4, 'scoresheet-reeks-5-functies.csv') [1, 1, 0, 0, 0] >>> resultaten(500, 'scoresheet-reeks-5-functies.csv') [] >>> evaluatie([1, 1, 0, 0, 0]) 'onvoldoende' >>> evaluatie([1, 1, 1, 0, 0]) 'voldoende' >>> evaluatie([1, 1, 0, 0]) 'voldoende' >>> bonuspunten(4, ["Reeks 1: Variabelen en bewerkingen", "Reeks 2: Beslissingen", "Reeks 5: Functies"]) 0 >>> bonuspunten(4, ["Reeks 1: Variabelen en bewerkingen", "Reeks 2: Beslissingen", "Reeks 3: Herhaling"]) 2