meteo.py

Created by schraf

Created on October 24, 2022

878 Bytes

Vidéo d’explication

Prévisions météo

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é

Simuler des lois discrètes

Pile ou face équilibré

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.

Pièce truquée

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

Dé truqué

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)

During your visit to our site, NumWorks needs to install "cookies" or use other technologies to collect data about you in order to:

With the exception of Cookies essential to the operation of the site, NumWorks leaves you the choice: you can accept Cookies for audience measurement by clicking on the "Accept and continue" button, or refuse these Cookies by clicking on the "Continue without accepting" button or by continuing your browsing. You can update your choice at any time by clicking on the link "Manage my cookies" at the bottom of the page. For more information, please consult our <a href="https://www.numworks.com/legal/cookies-policy/">cookies policy</a>.