Quizen is in Vlaanderen een vrij populair tijdverdrijf.

Deelnemen aan een quiz is eenvoudig. Je geeft de naam van je team en je teamleden op bij de organisatie van de quiz. De IT-er van dienst houdt alle teams en deelnemers bij in een dictionary:

{
    'Sinbox': ['An', 'Tom', 'Griet'],
    'Levies': ['Fien'],
    'Quist Het': ['Jens', 'Lies', 'Jesse'],
    'verKWISting': ['Renzo', 'Jan', 'Annelies']
}

Opgave

In deze oefening programmeren we het in- en uitschrijven bij een quizploeg omdat een deelnemer toevallig niet kan deelnemen op de avond van de quiz maar toch zo vriendelijk is om een vervanger te voorzien.

Schrijf de functies verlaat_ploeg(deelnemer, ploeg, inschrijvingen) en vervoeg_ploeg(deelnemer, ploeg, inschrijvingen) hebben beide drie parameters:

Beide functies geven de vernieuwde dictionary van inschrijvingen terug.

Opmerkingen

Voorbeelden

Twee eenvoudige voorbeelden die de basisfunctionaliteit illustreren:
>>> inschrijvingen = 
{'Sinbox': ['An', 'Tom', 'Griet'], 'Levies': ['Fien'], 'Quist Het': ['Jens', 'Lies', 'Jesse'], 'verKWISting': ['Renzo', 'Jan', 'Annelies']
>>> verlaat_ploeg('Tom','Sinbox', inschrijvingen})
{'Sinbox': ['An', 'Griet'], 'Levies': ['Fien'], 'Quist Het': ['Jens', 'Lies', 'Jesse'], 'verKWISting': ['Renzo', 'Jan', 'Annelies']}
>>> inschrijvingen =
{'Sinbox': ['An', 'Griet'], 'Levies': ['Fien'], 'Quist Het': ['Jens', 'Lies', 'Jesse'], 'verKWISting': ['Renzo', 'Jan', 'Annelies']
>>> vervoegt_ploeg('Els','Sinbox', inschrijvingen)
{'Sinbox': ['An', 'Griet', 'Els'], 'Levies': ['Fien'], 'Quist Het': ['Jens', 'Lies', 'Jesse'], 'verKWISting': ['Renzo', 'Jan', 'Annelies']}

Tips

Ik vind het juiste type niet voor de parameters van deze functie. def verlaat_ploeg(naam: str, ploeg: str, inschrijvingen:dict) -> dict
def vervoegt_ploeg(naam: str, ploeg: str, inschrijvingen:dict) -> dict
Ik begrijp de structuur van de dictionary met de inschrijvingen niet. Wat is de key en wat is de value?
  • de key is het deeltje vóór : -> de naam van de ploeg
  • de value is het deeltje ná : -> een list met de namen van de deelnemers.
Hoe kan je zien dat de value zelf een list is (met de namen van de deelnemers)?
  • In het deeltje ná : staat de value -> een initialisatie van een list want [  ] is gebruikt.
  • Tussen [  ] vind je de namen van de deelnemers.
Hoe initialiseer ik de dictionary van inschrijvingen?
  • Je moet dit niet initialiseren!!
  • Jij moet er dus van uitgaan dat de derde parameter van de functie een dictionary bevat met de inschrijvingen die al gedaan zijn.
  • Enkel als je de functie wilt controleren door een aanroep wordt de dictionary meegegeven (zie Voorbeeld op Dodona).
Hoe verwijder ik een speler uit een bepaalde ploeg?
  • Met inschrijvingen[ploeg] heb je de value van de dictionary en dat is zelf een list
  • Verwijder de speler uit de list met .remove
De functie verlaat_ploeg is niet altijd juist op Dodona, enkel de eerste test slaagt.
  • Bekijk de fout op Dodona. Zie je dat een lege ploeg (=ploeg zonder deelnemers) niet meer mag voorkomen?
  • Controleer dus of de ploeg nog deelnemers heeft, na verwijderen van de speler.
  • Indien er geen spelers meer overblijven verwijder je ook de key.
Hoe verwijder je een key uit een dictionary?
  • Gebruik het del keyword.
Hoe voeg ik een speler toe aan een bepaalde ploeg?
  • Met inschrijvingen[ploeg] heb je de value van de dictionary en dat is zelf een list
  • Voeg de speler toe aan de list met .append
Wat moet ik doen als spelers van dezelfde ploeg ook dezelfde naam hebben?
  • Dan mag je deze naam maar één keer toevoegen aan die ploeg.
  • Controleer dus vooraf of de naam al voorkomt in de list die je opvraagt met inschrijvingen[ploeg]
Wat wordt bedoeld met "onbestaande ploeg"?
  • Dat is een ploeg die nog niet gebruikt is als key in de dictionary inschrijvingen.
Hoe voeg ik een niet-gekende speler toe aan een onbestaande ploeg? Ik krijg een foutmelding KeyError.
  • Controleer of de ploeg al voorkomt als key in de dictionary inschrijvingen.
  • Indien de ploeg nog niet voorkomt dan kan je deze ploeg gewoon als key gebruiken, en een lege list als value toekennen.