Ja sannsynlighet kan være gøy,litt kode for og simulere litt.
Så får vi se om jeg havner rundt 95%.
Python er språket viss noen lurer.
Kode
from collections import Counter
from random import randint
def web_game(win_number=7, number_of_click=300):
play = Counter(randint(1,100) for i in range(number_of_click))[win_number]
if play == 0:
return 'Lose'
return 'Win'
Teste koden.
Kode
#1 run
>>> web_game()
'Win'
#10 run
>>> print [web_game() for i in range(10)]
['Win', 'Win', 'Win', 'Lose', 'Win', 'Win', 'Win', 'Win', 'Win', 'Win']
Så dra jeg til og kjører 10 run og i hvert run kjører web_game 100 ganger.
Teller så resultatet,her bør jeg havne rundt 95:5 viss koden er riktig.
Kode
>>> for i in range(10):
... Counter([web_game() for i in range(100)])
Counter({'Win': 96, 'Lose': 4})
Counter({'Win': 94, 'Lose': 6})
Counter({'Win': 97, 'Lose': 3})
Counter({'Win': 92, 'Lose': 8})
Counter({'Win': 94, 'Lose': 6})
Counter({'Win': 95, 'Lose': 5})
Counter({'Win': 95, 'Lose': 5})
Counter({'Win': 96, 'Lose': 4})
Counter({'Win': 95, 'Lose': 5})
Counter({'Win': 96, 'Lose': 4})
Her et run hvor jeg hvor jeg kjører web_game 1000000 ganger,viss man skulle gjort dette hadde man uført 300000000 klikk.
Her bruker
PyPy som er veldig bra,uten og måle så øker det nok hastigheten enn 20 ganger.
Kode
#Counter(web_game() for i in range(1000000))
C:\pypy>pypy.exe web_game.py
Counter({'Win': 950888, 'Lose': 49112})
Selv med 99.9% sannsynlighet hver gang, er det mulig å feile 10 ganger på rad.
Ja sannsynlighet kan gi noen rare resultater,men her dro du til litt.
Når vi er inne på sannsynlighet er denne bra
Peter Donnelly: How stats fool juries
Kan teste litt med koden,for og se hvor ofte man taper 2-3 ganger på rad når sannsynlighet for og vinne er 95%.
Først kjører 10 ganger og i hvert run kjørers web_game 100 ganger
Bruker så
itertools itertools.groupby() for og gruppere like tall i en sekvens,deretter teller jeg resultatet.
Her skjer det mye på en linje kunne ha delt opp litt for at dette skulle bli lettere og forstå,dette viser jo også litt av stryken til Python at man kan få gjort mye med lite kode.
Kode
>>> import itertools
>>> for i in range(10):
... print Counter([len(list(y)) for (c,y) in itertools.groupby([web_game() for i in range(100)]) if c == 'Lose'])
...
Counter({1: 5})
Counter({1: 5})
Counter({1: 5})
Counter({1: 5})
Counter({1: 3})
Counter({1: 5})
Counter({1: 1, 2: 1})
Counter({1: 4})
Counter({1: 6, 2: 1})
Counter({1: 5}
Her taper man altså 2 ganger på rad 2 ganger i løpet av 1000 spill.
øker litt.
Kode
>>> for i in range(10):
... print Counter([len(list(y)) for (c,y) in itertools.groupby([web_game() for i in range(10000)]) if c == 'Lose'])
...
Counter({1: 442, 2: 20, 3: 2})
Counter({1: 445, 2: 22})
Counter({1: 459, 2: 15})
Counter({1: 476, 2: 21, 3: 4})
Counter({1: 431, 2: 23, 3: 1})
Counter({1: 467, 2: 16})
Counter({1: 439, 2: 20, 3: 1})
Counter({1: 449, 2: 24, 3: 2})
Counter({1: 440, 2: 12})
Counter({1: 432, 2: 23, 3: 1})
Her kjøres web_game 100000, dårligste run er 3 tap på rad,vi ser at 4 tap rad.
Da får det være bra,
Matplotlib er jo også artig og bruke når man tester sannsynlighet får og få noen fine grafer.
Sist endret av snippsat; 11. februar 2013 kl. 21:01.