Ga naar hoofdinhoud

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.

info

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​

  1. Draai de code vijf keer. Krijg je elke keer iets anders?
  2. Maak er een dobbelsteen met twintig vlakken van.
  3. Zet de regel met worp = en de print nog een keer onder de code. Zijn de twee worpen gelijk?
Python
Code-omgeving wordt voorbereid…
Antwoorden
  1. Meestal wel, maar niet altijd: de kans dat je twee keer achter elkaar hetzelfde gooit, is 1 op de 6.
  2. random.randint(1, 20).
  3. 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:

  1. Draai de code: hij gooit één keer.
  2. Zet de worp en de print in een loop: for i in range(10):. Je ziet nu tien getallen.
  3. Zet in de loop een if die zes print als de worp 6 is.
Python
Code-omgeving wordt voorbereid…
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.