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).

schermafdruk csv
schermafdruk van de export
Hier zie je de resultaten van de eerste 14 studenten.

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.

Opgave

  1. 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:

    • begin met "scoresheet-"
    • de naam van oefeningenreeks wordt in kleine letters gezet en alle karakters die geen letter of cijfer zijn, worden vervangen door een koppelteken
    • er mogen geen twee koppeltekens na elkaar staan
    • achteraan wordt ".csv" toegevoegd

     

  2. 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.

  3. 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:

    • 'onvoldoende': indien de student minder dan de helft van de oefeningen tijdig heeft ingediend
    • 'voldoende': indien de student minstens de helft van de oefeningen tijdig en correct heeft ingediend
    • 'alles juist': indien de student alle oefeningen van deze reeks tijdig en correct heeft ingediend
    • 'niet deelgenomen': indien de lijst met resultaten leeg is

     

  4. 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.

Databestanden

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

Voorbeelden

>>> 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