Terningkast

<div class="alert alert-block alert-danger">

Info til lærer

En del eksempler på kode der vi ser på ulike måter å kaste en/to/mange terning og visualiserer det på ulike måter. Dette er ikke et undervisningsopplegg (enda), men er ment til å skape ideer til opplegg eller programmer man kan vise/leke med i timen. Deler av dette kan passe for ungdomstrinnet og/eller S1-matematikk.

Kast en terning en gang

Her er en meget kort kode som bruker random-funksjonen i python til å tilfeldig generere et terningkast med en vanlig terning.

1 
2
3
from random import randint                      # Importerer kommandoen vi trenger å generere et tilfeldig tall

print("Terningkastet ga:", randint(1, 6))       # Programmet genererer og skriver ut resultatet på terningkastet

Kast en terning flere ganger

Her øker vi antallet terningkast vi kjører til et gitt antall (ant)

1 
2
3
4
5
6
from random import randint                      # Importerer kommandoen vi trenger å generere et tilfeldig tall

ant = 10                                        # Setter antall kast

for i in range(ant):                            # Løkke som løper gjennom "ant" kast
    print("Terningkastet ga:", randint(1, 6))   # Programmet genererer og skriver ut resultatet på terningkastet

Finne antall seksere

Utvider for-løkken over med en if-setning slik at vi kan telle antall ganger vi får 6 på terningen.

1 
2
3
4
5
6
7
8
9
10
11
from random import randint                      # Importerer kommandoen vi trenger å generere et tilfeldig tall

ant = 10                                        # Setter antall kast
gunstige = 0                                    # Variabel for antallet treff

for i in range(ant):                            # Løkke som løper gjennom "ant" kast
    kast = randint(1, 6)                        # Programmet genererer resultatet på terningkastet
    if kast == 6:                               # Hvis kastet gir resultatet 6 ...
        gunstige = gunstige + 1                 # ... øker vi antallet gunstige med en
    print(kast)                                 # Skriver ut resultatet av kastet (kan tas vekk etterhvert)
print("Antall seksere er", gunstige)            # Skriver ut antallet kast som ga resultatet 6

Regne ut relativ sannsynlighet for å få 6

1 
2
3
4
5
6
7
8
9
10
11
12
13
14
from random import randint                      # Importerer kommandoen vi trenger å generere et tilfeldig tall

ant = 10                                        # Setter antall kast
gunstige = 0                                    # Variabel for antallet treff

for i in range(ant):                            # Løkke som løper gjennom "ant" kast
    kast = randint(1, 6)                        # Programmet genererer resultatet på terningkastet
    if kast == 6:                               # Hvis kastet gir resultatet 6 ...
        gunstige = gunstige + 1                 # ... øker vi antallet gunstige med en
    print(kast)                                 # Skriver ut resultatet av kastet (kan tas vekk etterhvert)
print("Antall seksere er", gunstige)            # Skriver ut antallet kast som ga resultatet 6

relativ_sannsynlighet = round(gunstige/ant)     # Regner ut og runder ned relativ sannsynlighet
print("Relativ sannsynlighet for å få 6 på", ant, "kast er", relativ_sannsynlighet)    # Skriver ut resultatet

Øker til å kast to terninger

1 
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from random import randint                      # Importerer kommandoen vi trenger å generere et tilfeldig tall

ant = 10                                        # Setter antall kast
gunstige = 0                                    # Variabel for antallet treff

for i in range(ant):                            # Løkke som løper gjennom "ant" kast
    kast1 = randint(1, 6)                       # Programmet genererer resultatet første terningkast
    kast2 = randint(1, 6)                       # Programmet genererer resultatet andre terningkast
    if kast1 + kast 2 == 7:                     # Hvis summen av kastene gir resultatet 7 ...
        gunstige = gunstige + 1                 # ... øker vi antallet gunstige med en
    print(kast)                                 # Skriver ut resultatet av kastet (kan tas vekk etterhvert)
print("Antall sum lik 7 er", gunstige)            # Skriver ut antallet kast som ga resultatet 7

relativ_sannsynlighet = round(gunstige/ant)     # Regner ut og runder ned relativ sannsynlighet
print("Rel. sann. for å få 7 på", ant, "kast med to terninger er", relativ_sannsynlighet)  # Skriver ut resultatet

Kaster to terninger flere ganger

[7]: 
1 
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from random import randint

ant = 100000                             # Setter antallet ganger vi skal kaste
ant_tern = 5                             # Setter antallet terninger
gunstige = 0                             # Teller antallet gunstige
Sum = 15                                 # Setter summen vi er på jakt etter

for i in range(ant):                     # For hvert av kastene ...
    kast = 0                             # setter vi startsummen til 0
    for j in range(ant_tern):            # Så kaster vi terningene ...
        kast = kast + randint(1, 6)      # ... en etter en til vi har kastet alle terningene
    if kast == Sum:                      # Hvis summen av alle terningkasstene er lik summen vi er på jakt etter ...
        gunstige = gunstige + 1          # ... så øker vi antallet gunsitge med 1

print("Sum øyne lik", Sum, "skjedde", gunstige, "ganger.")
relativ_sannsynlighet = round(gunstige/ant, 3)
print("Relativ sannsynlighet for å få", Sum, "på", ant, "kast med", ant_tern, "terninger er", relativ_sannsynlighet)
Sum øyne lik 15 skjedde 8374 ganger.
Relativ sannsynlighet for å få 15 på 100000 kast med 5 terninger er 0.084

Plotter resultatet for en terning i et barplot

Starter med en terning

[5]: 
1 
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from random import randint, choice
import matplotlib.pyplot as plt

ant = 100                      # Setter antallet ganger vi skal kaste
kast = []                      # Tom liste der vi putter inn kastene våre
fordeling = []                 # Tom liste der vi putter inn antall 1'ere, 2'ere, osv.
terning = [1, 2, 3, 4, 5, 6]     # Sidene på terningen

for i in range(ant):                  # Vi gjør ant kast ...
    kast.append(choice(terning))      # og hver gang velger vi en tilfeldig side fra terning

for j in terning:                       # For hver side av terningen ...
    fordeling.append(kast.count(j))   # teller vi opp hvor mange vi har

print(fordeling)
plt.bar(terning, fordeling)
[19, 20, 8, 22, 19, 12]
[5]: 
<BarContainer object of 6 artists>

Plotter resultatet for to terninger i et barplot

[3]: 
1 
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
from random import randint, choice
import matplotlib.pyplot as plt

ant = 100
kast = []                      # Tom liste der vi putter inn kastene våre
fordeling = []                 # Tom liste der vi putter inn antall 1'ere, 2'ere, osv.
terning = [1, 2, 3, 4, 5, 6]     # Sidene på terningen

for i in range(ant):                  # Vi gjør ant kast ...
    kast1 = choice(terning)           # og hver gang velger vi en tilfeldig side fra terning
    kast2 = choice(terning) 
    kast.append(kast1 + kast2)        # Legger sammen kastene i en liste

resultat = list(set(kast))            # Finner alle unike resultat

for j in resultat:                    # For hvert resultat ...
    fordeling.append(kast.count(j))   # teller vi opp hvor mange vi har

print(fordeling)
plt.bar(resultat, fordeling)
[3, 8, 7, 7, 18, 17, 9, 15, 6, 7, 3]
[3]: 
<BarContainer object of 11 artists>

Plotter resultatet for flere terninger i et barplot

[5]: 
1 
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
from random import randint, choice
import matplotlib.pyplot as plt

ant = 10000                    # Setter antallet ganger vi skal kaste
ant_tern = 10                   # Setter antallet terninger vi skal kaste hver gang
kast = []                      # Tom liste der vi putter inn kastene våre
fordeling = []                 # Tom liste der vi putter inn antall 1'ere, 2'ere, osv.
terning = [1, 2, 3, 4, 5, 6]     # Sidene på terningen

for i in range(ant):                  # Vi gjør ant kast ...
    kast1 = 0
    for i in range(ant_tern):
        kast1 = kast1 + choice(terning)           # og hver gang velger vi en tilfeldig side fra terning
    kast.append(kast1)        # Legger sammen kastene i en liste

resultat = list(set(kast))            # Finner alle unike resultat

for j in resultat:                    # For hvert resultat ...
    fordeling.append(kast.count(j))   # teller vi opp hvor mange vi har

# print(fordeling)
plt.bar(resultat, fordeling)
[5]: 
<BarContainer object of 40 artists>

Utvikling av relativ frekvens

Dette er en programkode som viser utviklingen av relativ frekvens ettersom vi øker antallet terningkast. Koden er inneholder nå en del komplisert kode, så dette egner seg best for visning. Elevene kan likevel leke med koden, det vil si endre på enkelte variabler.

[2]: 
1 
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
from random import randint, choice
import matplotlib.pyplot as plt
from IPython import display

ant = 200
kast = []                       # Tom liste der vi putter inn kastene våre
relativ_frekvens = []           # Tom liste der vi oppdaterer den relative frekvensen
terning = [1, 2, 3, 4, 5, 6]    # Sidene på terningen
x = []                          # Tom liste med antall kast vi har gjort

for i in range(ant):                    # Vi gjør ant kast ...
    kast.append(choice(terning))        # Legger sammen kastene i en liste
    relativ_frekvens.append(sum(kast)/(i+1))
    x.append(i+1)

    display.clear_output(wait=True) 
    plt.scatter(x, relativ_frekvens, color = 'r', s = 5)
    plt.axis([0, ant, 0, 7])
    plt.axhline(y=3.5, color='k', ls = ':')
    tid = "Kast = " + str(i+1)
    plt.title(tid)
    plt.pause(0.01)