Mad Libs is een taalspelletje waarbij vertrokken wordt van een quote of een kort verhaaltje waarin bepaalde sleutelwoorden weggelaten zijn. Onder elk weggelaten woord wordt een lexicale of andere categorie aangegeven, zoals "zelfstandig naamwoord", "werkwoord", "plaats" of "lichaamsdeel". Een speler vraagt de andere spelers beurtelings om een bepaald woord te suggereren binnen de categorie die onder het volgende weggelaten woord staat, zonder daarbij de context te onthullen waarin het woord moet gebruikt worden. Op het einde wordt de ingevulde quote of het vervolledigde verhaal luidop voorgelezen. Het resultaat is vaak komisch, surrealistisch en ietwat onzinnig.

Stel dat we bijvoorbeeld vertrekken van de volgende gedeeltelijke quote.

______ created ______ so that __________ would learn ____________.
 Naam           ding           INWONERS               discipline

De ontbrekende woorden zouden dan op de volgende manier kunnen ingevuld worden

God created war so that AMERICANS would learn geography.

of evengoed op de volgende manier

Mercator created maps so that BELGIANS would learn navigation.

Dit spelletje werd in 1953 uitgevonden door Leonard Stern en Roger Price. Sinds de reeks voor het eerst werd uitgegeven in 1958 werden alleen al binnen de Verenigde Staten meer dan 110 miljoen exemplaren verkocht van de Mad Libs boeken.

mad libs book#1 mad libs book#2 mad libs book#3 mad libs book#4 mad libs book#5 mad libs book#6

Opgave

Schrijf een klasse MadLibs waarvan de objecten kunnen gebruikt worden om een gegeven quote of verhaal waarin sleutelwoorden weggelaten werden, aan te vullen op basis van woorden die willekeurig gekozen werden uit bepaalde categorieën. Elk object van deze klasse moet beschikken over een eigenschap woordenschat die verwijst naar een dictionary (dict). Deze dictionary stelt de woordenschat voor die het object aangeleerd gekregen heeft. Initieel is deze dictionary nog leeg, maar tijdens de levensduur van het object kan er nieuwe informatie aan toegevoegd worden, of kan de informatie in de dictionary geraadpleegd worden bij het aanroepen van de volgende methoden die minimaal door de klasse MadLibs moeten ondersteund worden:

Voorbeeld

>>> madlib = MadLibs()
>>> madlib.woordenschat
{}

>>> madlib.leren('naam', 'God')
>>> madlib.leren('ding', 'war')
>>> madlib.leren('inwoners', 'Americans')
>>> madlib.leren('discipline', 'geography')
>>> madlib.woordenschat
{'ding': {'war'}, 'naam': {'god'}, 'discipline': {'geography'}, 'inwoners': {'americans'}}
>>> madlib.suggereren('naam')
'god'
>>> madlib.suggereren('NAAM')
'GOD'
>>> madlib.suggereren('Naam')
'God'
>>> madlib.invullen('_Naam_ created _ding_ so that _INWONERS_ would learn _discipline_.')
'God created war so that AMERICANS would learn geography.'

>>> madlib.leren('naam', ('Mercator', 'Caesar'))
>>> madlib.leren('ding', ['maps', 'coordinates'])
>>> madlib.leren('inwoners', {'Belgians', 'Martians', 'Germans'})
>>> madlib.leren('discipline', 'navigation')
>>> madlib.leren('discipline', 'colonisation')
>>> madlib.woordenschat
{'ding': {'maps', 'war', 'coordinates'}, 'naam': {'god', 'caesar', 'mercator'}, 'discipline': {'colonisation', 'navigation', 'geography'}, 'inwoners': {'belgians', 'americans', 'germans', 'martians'}}
>>> madlib.invullen('_Naam_ created _ding_ so that _INWONERS_ would learn _discipline_.')
'Mercator created maps so that BELGIANS would learn geography.'
>>> madlib.invullen('_Naam_ created _ding_ so that _INWONERS_ would learn _discipline_.')
'Mercator created war so that BELGIANS would learn navigation.'

>>> madlib.suggereren('land')
Traceback (most recent call last):
AssertionError: onbekende categorie

>>> madlib.suggereren('_INWONERS_ live in _Land_.')
Traceback (most recent call last):
AssertionError: onbekende categorie