Nous allons générer des journées ensoleillées, nuageuses ou pluvieuses sur 50 ans (365*50 jours) avec la règle suivante que nous tiendrons secrète (et que notre calculatrice devra découvrir toute seule) :
Lorsqu’il y a du soleil (S) un jour, le lendemain il y a également du soleil dans 70% des cas. Dans 20% des autres cas le ciel sera nuageux (N) et dans 10% il sera pluvieux (P)
Lorsqu’il y a des nuages un jour, le lendemain il y a également des nuages dans 30% des cas. Dans 30% des autres cas le ciel sera ensoleillé et dans 40% il sera pluvieux (P)
Lorsqu’il y a de la pluie un jour, le lendemain il y a également de la pluie dans 50% des cas. Dans 20% des autres cas le ciel sera nuageux et dans 30% il sera ensoleillé
Il y a plusieurs façons de simuler un lancer de pièce équilibré, par exemple :
>> from random import * >> choice([0,1]) 1
donnera 0 ou 1 dans environ 50% des cas.
>> random()<0.5 True
donnera True
ou False
également dans environ 50% des cas.
Comment simuler une pièce qui donne par exemple 60% de Pile et 40% de Face ? Une version très simple est :
>> random()<0.6 False
donnera True dans 60% des cas et False dans 40%. Pouvait-on utiliser choice
? Oui, par exemple en tapant :
>> >> choice([1]*60+[0]*40) 0
C’est-à-dire en créant une liste de 100 termes (60 fois “1” et 40 fois “0”, la probabilité d’obtenir un “1” est donc bien de 60%). Avouons que ce n’est pas une technique très efficace ! On peut aussi voir que 60% = 3 / 5 et que 40% = 2 / 5, donc au lieu de 100 termes 5 suffisent :
>> >> choice([1,1,1,0,0]) 1
Comment simuler le lancer d’un dé (4 faces pour simplifier) en ayant non pas 25% de chance par face mais par exemple 30% d’avoir le “
from random import * from kandinsky import * TPS = "SNP" METEO = [[0.7,0.2,0.1], [0.3,0.3,0.4], [0.3,0.2,0.5]] COUL = [65504, 42292, 0] DUREE = 365*50 def tirage(a): i = 0 choix = random() p = METEO[TPS.index(a)] s = p[0] while choix > s : i += 1 s += p[i] return TPS[i] def annees(): histo="S" for j in range(DUREE): histo=tirage(histo) set_pixel(j%320,j//320,COUL[TPS.index(histo)]) def go(): annees() for e in range(3): res=[[0,0,0],[0,0,0],[0,0,0]] prec = 0 for j in range(1,DUREE): c = get_pixel(j%320,j//320) n = COUL.index(c) res[prec][n]+=1 prec = n for s in range(3): draw_string(TPS[e] + " vers " + TPS[s] + " : %.2f" % (res[e][s]/sum(res[e])), 10,62+54*e+16*s) draw_string(TPS[e] + " : %.2f" % ((res[0][e]+res[1][e]+res[2][e])/DUREE), 200,62+16*e)