test_galton.py

Created by elodie-gamot

Created on March 18, 2022

1.44 KB

La première fonction permet de connaître le nombre de billes parmi b tombées dans le compartiment n°k d’une planche de Galton à n rangées. La seconde permet une visualisation graphique de la répartition de b billes tombées dans une planche de Galton à n rangées. Une bille=un pixel en hauteur.


from math import *
from random import *
from kandinsky import *
from matplotlib.pyplot import *

def galton(b,n,k):
  compteur=0
  for bille in range(b):
    s=0
    for chemin in range(n):
      a=randint(0,1)
      #A chaque rangée, la bille va aléatoire à droite (1) ou à gauche (0).
      s+=a
      #s stocke le nombre de chemins "droite" empruntés
    if s==k:
      compteur+=1
      #si s est égal au numéro du compartiment souhaité, on comptabilise une bille
  return(compteur)
  
def visual_galton(b,n):
#Utilisation de Kandinsky
  liste=(n+1)*[0]
  #On crée une liste qui va stocker le nombre de billes dans chaque compartiment
  for bille in range(b):
    s=0
    for chemin in range(n):
      a=randint(0,1)
      s+=a
    liste[s]+=1
  surprise=color(randint(0,255),randint(0,255),randint(0,255))
  #Juste pour le plaisir d'obtenir une couleur aléatoire pour notre histogramme
  for i in range(len(liste)):
    largeur=320//len(liste)
    #Optimisation de la largeur des rectangles en fonction du nombre de compartiments
    fill_rect(5+largeur*i,220-liste[i],largeur,liste[i],surprise)
    #Les deux premiers arguments donnent les coordonnées en haut à gauche du rectangle, les deux suivantes donnent sa largeur puis sa hauteur.

def other_visual(b,n):
#Utilisation de MatPlotLib
  liste=(n+1)*[0]
  for bille in range(b):
    s=0
    for chemin in range(n):
      a=randint(0,1)
      s+=a
    liste[s]+=1
  plot(liste)
  show()