Eén worp
Hoe groot is de kans dat je met twee dobbelstenen samen 7 gooit? Dat kun je uitrekenen, maar je kunt het ook proberen: gooi tienduizend keer en tel hoe vaak het gebeurt. Met een echte dobbelsteen duurt dat een middag, de computer doet het in een tel. Zo'n nagespeeld experiment heet een simulatie. Het idee komt overal in machine learning terug: veel proberen, en tellen wat er gebeurt. Je begint met één worp.
Je gebruikt in dit project random.randint uit
De computer kiest,
range uit De for-loop,
// uit Delen met rest,
en tellen met een dictionary uit
een spamfilter dat leert.
In de laatste stap heb je ook een loop in een loop nodig, uit
Om de beurt,
en True en False uit
Booleans en vergelijken.
Voorspel
import random
worp = random.randint(1, 6)
print(worp)
Wat print dit programma? Kan het een 0 printen? En een 6?
Antwoord
Een getal van 1 tot en met 6, en elke keer dat je het draait een ander. Een 0
komt er nooit uit, een 6 wel: randint telt allebei de grenzen mee.
Zo werkt het
import random haalt de module random binnen. random.randint(1, 6) geeft
een willekeurig getal van 1 tot en met 6, net als een dobbelsteen. Het kleinste
getal staat eerst, het grootste daarna.
Onderzoek
- Draai de code vijf keer. Krijg je elke keer iets anders?
- Maak er een dobbelsteen met twintig vlakken van.
- Zet de regel met
worp =en de print nog een keer onder de code. Zijn de twee worpen gelijk?
Antwoorden
- Meestal wel, maar niet altijd: de kans dat je twee keer achter elkaar hetzelfde gooit, is 1 op de 6.
random.randint(1, 20).- Soms wel, meestal niet. De tweede worp weet niets van de eerste, net als bij een echte dobbelsteen.
Opdracht: tien worpen
Gooi tien keer, en print elke worp. Gooi je een zes, print dan ook zes.
Bijvoorbeeld:
4
6
zes
1
Begin klein, en breid de code stap voor stap uit:
- Draai de code: hij gooit één keer.
- Zet de worp en de print in een loop:
for i in range(10):. Je ziet nu tien getallen. - Zet in de loop een
ifdiezesprint als de worp 6 is.
Tip
Alles wat tien keer moet gebeuren, springt in onder de for. Staat de if
onder de loop, dan kijkt hij alleen naar de laatste worp.
Antwoord
import random
for i in range(10):
worp = random.randint(1, 6)
print(worp)
if worp == 6:
print("zes")
Gemiddeld zie je één of twee keer zes. Soms geen enkele keer: tien worpen is
weinig.
Er gaat iets mis
TypeError: Random.randint() missing 1 required positional argument: 'b'
Oorzaak: randint wil twee getallen: het kleinste en het grootste. Met
één getal weet hij niet waar hij moet beginnen.
Oplossing: geef allebei de grenzen mee.
# FOUT
import random
ogen = random.randint(6)
# GOED
import random
ogen = random.randint(1, 6)
Meer uitleg: De computer kiest.
Door naar tellen.