Herneem oefening
schoonspringen.
Vertrek eventueel van de oplossing van die oefening. Pas de opgave aan en splits de oefening op in twee functies:
Opgave
- De functie
lees_scores()
leest scores en stopt het inlezen als je "stop" ingeeft. Elke invoer die een
geheel getal voorstelt wordt in een list toegevoegd. Je mag veronderstellen dat er geen foute invoer
wordt gegeven.
De functie geeft de lijst met gehele getallen terug.
- De functie
bereken_score(scores)
berekent de eindscore voor schoonspringen op basis van de meegegeven
lijst scores
. Daarbij worden alle scores die niet in [0,100] liggen niet mee verwerkt. Bovendien worden
de hoogste en laagste score uitgesloten (zoals in de basisoefening). Je mag veronderstellen dat er minstens drie
correcte scores werden ingegeven.
De functie geeft de eindscore terug. De eindscore is het gemiddelde afgerond naar het dichtstbijzijnde
natuurlijke
getal.
Voorbeeld van lees_scores
Ingegeven scores: 20 40 80 50 "stop"
>>> lees_scores()
[20, 40, 80, 50]
Voorbeeld van bereken_score
>>> bereken_score([120,-8, 30,50,100,5])
40
Tips
Zoek in de
API de extra mogelijkheden die je
hebt voor een
list.
Ik vind het juiste type niet voor de parameters van deze functie.
def lees_scores() -> list
def bereken_score(scores: list) -> int
Getallen inlezen tot "stop" wordt ingelezen: pseudocode
lees een invoer als tekst in
herhaal zolang de invoer niet "stop" is
zet invoer om naar een geheel getal
doe de gevraagde verwerking
nieuwe invoer vragen
Hoe kan ik alle ingelezen waarden in een lijst stoppen?
- Start met een lege lijst.
- Elke ingelezen waarde, behalve "stop" voeg je toe aan die lijst
Moet ik in lees_score
enkel scores tussen 0 en 100 bijhouden?
Neen, alle ingelezen getallen worden in de lijst gestopt.
Hoe verwijder ik de scores die niet tussen 0 en 100 liggen?
Je maakt hiervoor best een nieuwe lijst aan, die enkel de correcte scores bevat.
Kan ik verkeerde scores verwijderen met .remove
?
Dat is lastiger dan je denkt!
Je gebruikt waarschijnlijk de for
-loop (for c in lijst:
) om de getallen te overlopen.
Als je
dan iets verwijdert met .remove
, wordt de lijst onmiddellijk aangepast en zal de loop een getal
overslaan.
Hoe verwijder ik best de grootste en kleinste score?
Twee mogelijkheden:
- Orden de lijst en neem een slice zonder het eerste en laatste getal.
- Bepaal het kleinste en grootste getal uit de lijst, en pas de som aan.