Het Eurovisiesongfestival is een jaarlijkse competitie die gehouden wordt onder de landen die lid zijn van de Europese Radio-unie (EBU, European Broadcasting Union).

Eurovisiesongfestival logo

Elk deelnemend land zendt een lied in dat live wordt gezongen tijdens een televisieprogramma dat door de EBU gelijktijdig wordt uitgezonden in alle landen in het Eurovisienetwerk. Nadat alle liedjes uitgevoerd werden, volgt een (tele)voting waarna de winnaar wordt uitgeroepen. De winnaar van het festival wordt bepaald door het geven van punten door ieder deelnemend land aan hun tien favoriete liedjes. Sinds 1975 is dit 1 t/m 8, dan 10 en uiteindelijk 12 punten voor het populairste lied. Deelnemende landen mogen niet op zichzelf stemmen.

De finale van het Eurovisiesongfestival 2012 ging door op 26 mei 2012 in Baku, de hoofdstad van Azerbeidzjan. Het festival werd gewonnen door de Zweedse zangeres Loreen met het liedje Euphoria. Dit lied verzamelde in totaal 372 punten. Tweede en derde werden Rusland en Servië.

Opgave

  1. Schrijf een functie scoresToevoegen, waarmee een land punten kan toekennen aan zijn favoriete liedjes. Aan deze functie moeten twee dictionaries als argument doorgegeven worden. De eerste dictionary koppelt landen aan het aantal punten dat ze tot dusver behaald hebben. De tweede dictionary koppelt landen aan het aantal punten dat hen door een ander land werd toegekend. De functie moet de gegeven dictionary die elk land koppelt aan het aantal punten dat het land heeft behaald bijwerken met de nieuwe scores uit de tweede dictionary die aan functie moet doorgegeven. De functie moet met andere woorden geen waarde teruggeven (of dus impliciet de waarde None teruggeven), maar de dictionary die als eerste argument wordt doorgegeven wijzigen (dictionaries zijn immers mutable in Python). De dictionary die als tweede argument wordt doorgegeven mag door de functie niet gewijzigd worden.

  2. Schrijf een functie scoresTonen waaraan een dictionary als argument moet doorgegeven worden. Deze dictionary koppelt landen aan het aantal punten ze tot dusver behaald hebben. De functie moet als resultaat een lijst van tuples teruggeven, waarbij elk tuple bestaat uit twee elementen: de naam van een land, en het aantal punten dat het land tot dusver behaald heeft. Deze tuples moeten gerangschikt zijn in dalende puntenaantal. Landen die evenveel punten behaald hebben moeten alfabetisch gerangschikt staan. Aan de functie kan optioneel nog een tweede integer-argument $$n$$ doorgegeven worden. Indien dat het geval is, dan moeten enkel de eerste $$n$$ landen teruggegeven worden. De dictionary die als argument aan de functie wordt doorgegeven, mag door de functie niet gewijzigd worden.

Voorbeeld

>>> scorebord = {}

>>> scores_UK = {'Lithuania': 7, 'Russia': 3, 'Estonia': 4, 'Azerbaijan': 2, 'Sweden': 12, 'Turkey': 1, 'Spain': 8, 'Germany': 6, 'Malta': 5, 'Ireland': 10}
>>> scoresToevoegen(scorebord, scores_UK)
>>> scoresTonen(scorebord)
[('Sweden', 12), ('Ireland', 10), ('Spain', 8), ('Lithuania', 7), ('Germany', 6), ('Malta', 5), ('Estonia', 4), ('Russia', 3), ('Azerbaijan', 2), ('Turkey', 1)]

>>> scores_HU = {'Albania': 8, 'Russia': 7, 'Iceland': 6, 'Italy': 5, 'Sweden': 12, 'Turkey': 3, 'Spain': 1, 'Germany': 10, 'Serbia': 4, 'Moldova': 2}
>>> scoresToevoegen(scorebord, scores_HU)
>>> scoresTonen(scorebord, 3)
[('Sweden', 24), ('Germany', 16), ('Ireland', 10)]