Het spel "Hoger-Lager" bestaat erin om een getal te raden in een vooropgegeven interval, waarbij je telkens een hint krijgt of je poging te hoog of te laag is. Bedoeling is om het geheime getal in zo weinig mogelijk beurten te raden. In deze opgave bouwen we een aantal klassen, om mogelijke raadstrategieën te evalueren.

Klasse HogerLager

Deze klasse raliseert de basislogica van het spel. Voorzie in deze klasse: De methode levert het aantal pogingen dat de speler nodig had om het geheime getal te raden.

Klasse SpelerDom

Deze klasse stelt een niet zo verstandige speler voor, die geen rekening houdt met de feedback (te hoog of te laag) van de klasse HogerLager: Per poging is 1 oproep naar de methode random.randint() toegelaten.

Klasse SpelerRandom

Deze klasse istelt een iets verstandiger speler voor: Per poging is 1 oproep naar de methode random.randint() toegelaten.

Klasse SpelerSlim

De speler gebruikt nu de strategie om telkens het midden van het interval van mogelijk getallen te kiezen. Hierbij wordt naar beneden afgerond. Hier heb je dus geen generatie van willekeurige getallen nodig.

Evaluatie

Om deze strategieën te evalueren, moeten we een groot aantal keer het spel spelen, en het gemiddelde aantal vereiste beurten uitrekenen. Schrijf hiertoe een functie gemiddeld_aantal_beurten() met als argumenten: Het resultaat van de methode is het gemiddeld aantal beurten (over alle spelletjes heen), dat die speler nodig heeft om het geheime getal te vinden (indien het maximaal aantal beurten verstreken is, reken je dit maximaal aantal beurten mee in de berekening van het gemiddelde).

Voorbeeld

spel = HogerLager(0, 100, 1000)
speler1 = SpelerDom()
speler2 = SpelerRandom()
speler3 = SpelerSlim()
random.seed(50)     
print(gemiddeld_aantal_beurten(spel, speler1, 1000)) #101.088
random.seed(50)     
print(gemiddeld_aantal_beurten(spel, speler2, 1000)) #7.5
random.seed(50)     
print(gemiddeld_aantal_beurten(spel, speler3, 1000)) #5.868