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.
a
voor het geheime getal (inclusief)
b
voor het geheime getal (inclusief)
speel()
met één argument die een speler voorstelt (zie
verder). Deze methode onderneemt volgende stappen:
random.randint()
op te roepen (dit de enige plaats in de klasse HogerLager
waar
je een randomgetal mag genereren.
eerste_poging()
,
met als argumenten a
en b
nieuwe_poging()
. Als argument geef
je de waarde +1 mee (indien de vorige poging te hoog was) of de waarde -1 mee (indien de vorige poging te laag was)
HogerLager
:
eerste_poging()
levert een willekeurig getal in het interval $$[a, b]$$
nieuwe_poging()
idem
random.randint()
toegelaten.
eerste_poging()
levert een willekeurig getal in het interval $$[a, b]$$
nieuwe_poging()
levert een willekeurig getal op in een interval van mogelijke getallen.
Dit betekent dat elke feedback in rekening gehouden wordt. Stel dat de poging getal $$x$$ suggereerde. Indien de
feedback luidt dat deze poging te hoog is, dan zijn enkel pogingen $$\le x - 1$$ zinvol. Analoog, indien de feedback
luidt dat deze poging te laag is, dan zijn enkel pogingen $$\ge x + 1$$ nog zinvol. Op die manier verkleint
bij elke poging het interval van mogelijke getallen. De nieuwe poging is een willkeurig getal in het interval
van mogelijke getallen.
random.randint()
toegelaten.
gemiddeld_aantal_beurten()
met
als argumenten:
HogerLager
eerste_poging()
en nieuwe_poging()
)
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