Terningkast
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.
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
)
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.
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
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
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]:
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]:
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]:
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]:
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]:
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)