Veel problemen in kansrekening maken gebruik van het begrip "urne". Dit is een ongeordende verzameling van objecten, waaruit typisch 1 of meerdere objecten gekozen worden, al dan niet met terugleggen. In deze opdracht bouwen we een klasse "Urne" om dergelijke problemen makkelijk te kunnen programmeren. De objecten die in de urne steken, hebben allen een kenmerk (b.v. gekleurde balletjes, genummerde briefjes, ...). Deze kenmerken (de kleuren van de balletjes, of de nummers van de briefjes) worden bij constructie aan een object van de klasse Urne meegegeven, zodat de Urne enkel objecten met dit kenmerk kan hebben. Om de klasse Urne makkelijk te realiseren, houd je de inhoud van de Urne via een woordenboek bij: de sleutels zijn hierbij de kenmerken van de objecten in de Urne, en de waarden het aantal objecten met dit bepaald kenmerk aanwezig zijn.

Voorbeeld

Een Urne kan enkel balletjes met de kleuren rood, groen en blauw bezitten. Bij constructie geven we de lijst ['rood', 'groen', 'blauw'] door (volgorde is willekeurig). Het woordenboek dat vlak na constructie de inhoud van de Urne bijhoudt, luidt dan {'groen':0, 'rood':0, 'blauw':0}.

De klasse Urne

Voorzie in deze klasse het onderstaande:
LET OP: verander de seed niet, en gebruik ook de randomgenerator enkel zoals hierboven aangegeven (anders is het resultaat niet controleerbaar via Dodona).

Voorbeeld

random.seed(100)

u0 = Urne(['rood', 'groen', 'blauw'])
u0 += ('groen', 3)
u0 += ('blauw', 2)
print(u0)	#{'blauw': 2, 'groen': 3, 'rood': 0}
u0 += ('geel', 4)
u0 += ('groen', 1)
u0 += ('rood', 5)
print(u0)	#{'blauw': 2, 'groen': 4, 'rood': 5}

u1 = Urne(['geel', 'rood'])
u1 += ('geel', 5)
u1 += ('rood', 3)
print(u1)	#{'geel': 5, 'rood': 3}

som = u0 + u1
print(som)	#{'blauw': 2, 'geel': 5, 'groen': 4, 'rood': 8}
print(u0)	#{'blauw': 0, 'groen': 0, 'rood': 0}
print(u1)	#{'geel': 0, 'rood': 0}

u2 = Urne(['rood', 'geel', 'groen'])
u2 += ('rood', 5)
u2 += ('geel', 2)
u2 += ('groen', 3)
print(u2.lijst()) 
#['geel', 'geel', 'groen', 'groen', 'groen', 'rood', 'rood', 'rood', 'rood', 'rood']
print(u2.kies_met_terugleggen())	#('groen', 2)
print(u2)	#{'geel': 2, 'rood': 5, 'groen': 3}
print(u2.kies_met_terugleggen())	#('rood', 7)
print(u2)	#{'geel': 2, 'rood': 5, 'groen': 3}
print(u2.kies_zonder_terugleggen())	#('rood', 7)
print(u2)	#{'geel': 2, 'rood': 5, 'groen': 2}
print(u2.kies_zonder_terugleggen())	#('groen', 2)
print(u2)	#{'geel': 2, 'groen': 2, 'rood': 4}