Oceanen spelen een cruciale rol bij het menselijk welzijn. Van het verstrekken van voedsel, levensonderhoud en recreatieve activiteiten tot de regulering van het klimaat. Een duurzaam beheer van de oceanen vraagt daarom een integrale en kwantitatieve methode voor het meten en bewaken van hun kwaliteit. De ocean health index1 (OHI) wordt berekend op basis van tien verschillende doelstellingen voor een gezonde koppeling tussen mens en oceaan. Hiermee kan een globale score voor elke kuststaat bepaald worden. Wereldwijd scoren de oceanen volgens deze index 59 op 100 (bereik 41 tot 87). Daarbij presteren de geïÂndustrialiseerde landen over het algemeen beter dan de ontwikkelingslanden, maar met enkele opvallende uitzonderingen. Slechts 5% van de landen scoort hoger dan 70, terwijl 32% van de landen een score heeft die lager is dan 50. De OHI is een krachtig instrument ter verbetering van publiek bewustzijn, oceaanbeheer en beleidsmatige beslissingen, en om prioriteiten te leggen binnen het wetenschappelijk onderzoek.
Het bestand ohi.txt2 bevat voor alle kuststaten hun individuele scores voor de doelstellingen die bij de berekening van de OHI gebruikt worden. Elke regel start met een natuurlijk getal dat als code voor de kuststaat gebruikt wordt, gevolgd door de naam van de kuststaat en daarna dertien natuurlijke getallen tussen 0 en 100 die de score aangeven voor dertien verschillende (sub)doelstellingen. De verschillende velden op een regel worden telkens van elkaar gescheiden door één enkele tab. Onderstaande tabel bevat de scores voor enkele kuststaten uit het bestand.
Gevraagd wordt:
Schrijf een functie gemiddelde waaraan een lijst als argument moet doorgegeven worden. De elementen van de gegeven lijst mogen enkel integers zijn of de waarde None hebben. De functie moet als resultaat het gemiddelde (een floating point getal) teruggeven van alle integers uit de gegeven lijst. Dat betekent dat als bijvoorbeeld een lijst van twintig elementen wordt doorgegeven, waarvan er vijf de waarde None hebben, het gemiddelde slechts over de vijftien integers moet berekend worden. Indien alle elementen van de gegeven lijst de waarde None hebben, dan moet de functie de waarde None teruggeven.
Schrijf een functie gegevensbank waaraan de locatie van een tekstbestand moet doorgegeven worden. De functie moet de informatie uit het gegeven tekstbestand inlezen en omzetten naar een dictionary die door de functie moet teruggegeven worden. Het tekstbestand moet opgemaakt zijn volgens het formaat van het voorbeeldbestand ohi.txt3, dus met vijftien velden die van elkaar gescheiden worden door een tab. De dictionary die door de functie wordt teruggegeven moet als sleutels de namen van de kuststaten uit het bestand (tweede veld) gebruiken, en als corresponderende waarde een lijst van dertien integers met de individuele scores op de doelstellingen voor die kuststaat. Doelstellingen waarvoor geen waarde werd gegeven in het bestand (lege cellen) moeten in de lijst weergegeven worden met de waarde None.
Schrijf een functie oceanHealthIndex waarmee de OHI voor een gegeven kuststaat kan berekend worden. Aan deze functie moeten twee argumenten doorgegeven worden: een string met de naam van een kuststaat en een dictionary zoals die door de functie gegevensbank wordt teruggegeven. De OHI moet berekend worden als het gemiddelde van de kwaliteitsscores op tien doelstellingen voor die kuststaat. De score voor de doelstellingen LE, SP en BD moet telkens berekend worden als het gemiddelde van de twee scores van hun subdoelen (die in de lijst van individuele scores opgenomen zijn). Op basis van de dertien scores in het bestand ohi.txt4, kan de gemiddelde score voor België dus berekend worden als \[ \frac{11 + 95 + 75 + 100 + 100 + \frac{61 + 56}{2} + 4 + \frac{58 + 5}{2} + 71 + \frac{99 + 82}{2}}{10} = 63,65 \] Dit gemiddelde moet door de functie als een integer teruggegeven worden, door af te ronden naar het dichtstbijzijnde natuurlijk getal. Telkens wanneer we hierboven spreken van het gemiddelde van een lijst van scores (integer/None waarden) gebeurt de berekening conform de functie gemiddelde, dus door de None waarden te negeren. Indien de berekening van het gemiddelde voor de OHI zelf de waarde None oplevert, dan moet de functie oceanHealthIndex de waarde None als resultaat teruggeven.
>>> gemiddelde([3, 7, 6, 11])
6.75
>>> gemiddelde([3, None, None, 7, None, 6, 11])
6.75
>>> gemiddelde([None, None, None, None, None])
>>> data = gegevensbank('ohi.txt')
>>> data['Belgium']
[11, 95, 75, 100, 100, 61, 56, 4, 58, 5, 71, 99, 82]
>>> data['Netherlands']
[35, 96, 71, 100, 100, 79, 53, 4, 65, 85, 67, 89, 81]
>>> data['France']
[72, 96, 75, 79, 49, 94, 67, 27, 63, 29, 60, 72, 77]
>>> data['Monaco']
[1, 95, None, None, None, 95, 71, 99, 43, 0, 69, None, 85]
>>> data['Jarvis Island']
[None, None, None, None, 98, None, None, None, 65, 100, 78, 95, 76]
>>> data['Antarctica']
[None, None, None, None, None, None, None, None, None, None, None, None, None]
>>> oceanHealthIndex('Belgium', data)
64
>>> oceanHealthIndex('Netherlands', data)
70
>>> oceanHealthIndex('France', data)
66
>>> oceanHealthIndex('Monaco', data)
65
>>> oceanHealthIndex('Jarvis Island', data)
86
>>> oceanHealthIndex('Antarctica', data)