Tilfeldige tall og simulering

Med biblioteket random kan programmet trekke tilfeldige tall. Linjen random.randint(1, 6) gir et tilfeldig HELTALL fra 1 til 6, og her er BEGGE endepunktene med, i motsetning til range. Med random.choice(liste) trekker du et tilfeldig element fra en liste. Et program som bruker tilfeldige tall gir ikke nødvendigvis samme svar hver gang det kjøres.

Det kan brukes til SIMULERING: vi lar datamaskinen kaste en terning mange ganger og teller hvor ofte vi får en sekser.

import random

antall = 0
for i in range(600):
    kast = random.randint(1, 6)
    if kast == 6:
        antall = antall + 1
print(antall)

Programmet kaster terningen 600 ganger og teller seksere. Siden sannsynligheten for en sekser er 16\frac{1}{6}, forventer vi omtrent 600⋅16=100600 \cdot \frac{1}{6} = 100 seksere. Svaret blir som regel nær 100, men sjelden akkurat 100, og det varierer fra kjøring til kjøring.

Forventet antall

antall kast⋅sannsynlighet\text{antall kast} \cdot \text{sannsynlighet}

Forventet antall seksere
Antall kastForventet antall seksere
6010
600100
6 0001 000

Tips

  • random.randint(1, 6) kan gi både 1 og 6. Det er annerledes enn range(1, 6), som stopper før 6.
  • En simulering gir en TILNÆRMING til sannsynligheten. Jo flere kast du simulerer, jo nærmere kommer andelen seksere 16\frac{1}{6}. Etter 60 kast kan andelen ligge langt unna, etter 6 000 kast ligger den som regel tett på.
  • Forventet antall er ikke et garantert antall. Å kaste 600 ganger og få 96 eller 107 seksere er helt normalt.

Eksempel: Hvilke verdier kan komme?

To terningkast simuleres med random.randint(1, 6) + random.randint(1, 6). Hva er den minste og den største summen programmet kan gi?

Løsning:
  1. Hver terning kan gi fra 1 til 6, og begge endepunktene er med
  2. minste sum får vi når begge gir 1, og da er summen 1 + 1 = 2
  3. største sum får vi når begge gir 6, og da er summen 6 + 6 = 12. Summen er alltid et heltall fra 2 til 12.
Ytterpunktene
Terning 1Terning 2Sum
112, minst
6612, størst

Oppgaver

Prøv minst én oppgave på hvert nivå.

Lett(3)

L-21Hvilket bibliotek må du importere for å bruke random.randint?

Vis fasit
  1. Funksjonen heter random.randint, og navnet før punktum er biblioteket
  2. random

L-22Hvilke verdier kan random.randint(1, 6) gi?

Vis fasit
  1. randint(1, 6) tar med begge endepunktene
  2. 1 til og med 6

L-23Gir et program med random.randint(1, 6) alltid samme verdi hver gang det kjøres?

Vis fasit
  1. Tilfeldige tall er nettopp tilfeldige
  2. nei, verdien varierer fra kjøring til kjøring
Middels(3)

M-21Hvor mange ulike verdier kan random.randint(0, 3) gi?

Vis fasit
  1. Begge endepunktene er med
  2. verdiene er 0, 1, 2 og 3
  3. 4

M-22Programmet fra teksten kaster en terning 600 ganger og teller seksere. Omtrent hva forventer du at antall blir?

Vis fasit
  1. Sannsynligheten for en sekser er 16\frac{1}{6}
  2. 600⋅16600 \cdot \frac{1}{6}
  3. 100
Forventet antall
Antall kastSannsynlighetForventet
60016\frac{1}{6}100

M-23Hvilke verdier kan random.choice(['rød', 'blå', 'grønn']) gi?

Vis fasit
  1. choice trekker ÉN verdi fra listen
  2. «rød», «blå» eller «grønn»
Vanskelig(3)

V-21Et program kaster en mynt 10 ganger med random.randint(0, 1) og teller hvor mange ganger det blir 1. Hva er det minste og det største antallet programmet kan gi?

Vis fasit
  1. Ingen 1-ere gir 0
  2. bare 1-ere gir 10
  3. 0 og 10

V-22Hvorfor ligger andelen seksere som regel nærmere 16\frac{1}{6} etter 6 000 kast enn etter 60 kast?

Vis fasit
  1. Hvert kast er tilfeldig, men over mange kast jevner tilfeldighetene seg ut
  2. andelen nærmer seg sannsynligheten

V-23Hva er den minste og den største summen programmet random.randint(1, 6) + random.randint(1, 6) kan gi?

Vis fasit
  1. Minst 1 + 1 = 2
  2. størst 6 + 6 = 12
  3. 2 og 12