Le hasard en python

Le hasard en programmation.

En programmation, on a souvent besoin de simuler le hasard. Ce peut être pour de simples tests (générer une liste au hasard pour tester un algorithme de tri par exemple). Mais le hasard est aussi une technique devenue essentielle en algorithmique. Vous avez peut-être déjà rencontré une méthode de Monte-Carlo (illustration ci-dessous) qui permet d'avoir une bonne estimation d'une valeur que l'on ne sait pas calculer. Tirer au hasard peut également assurer un meilleur "rendement moyen" dans certains algorithmes.

Pour en savoir plus, nous vous conseillons la lecture de cet article de l'informaticien JP Delahaye.

La fonction randint

randint(a,b) où a et b sont deux entiers permet de tirer un entier N au hasard tel que a ≤ N ≤ b. La probabilité de chaque issue est 1/(b-a+1).


from random import randint
a=-5
b=7
print("Un entier au hasard entre {} et {} : {}.".format(a, b, randint(a,b)) )

On peut par exemple ainsi simuler 10 lancers d'un dé classique à six faces, équilibré :


import random as rd

for i in range(10) :
	print("Lancer numéro {} : {}.".format(i+1, rd.randint(1,6) ) )

choice

On peut choisir au hasard un élément dans une séquence avec choice.


import random as rd

couleurs=['rouge', 'vert', 'bleu', 'jaune', 'orange', 'marron']

print( "Un choix de couleur au hasard dans la liste précédente : {}.".format(rd.choice(couleurs)) )

random

random permet de simuler la loi uniforme sur [0; 1[.

On peut ainsi choisir un point au hasard dans le carré de sommets (0,0), (1,0), (1,1), (0,1) (côté haut et côté droit exclus) en choisissant l'abscisse puis l'ordonnée suivant la loi uniforme sur [0; 1[.


import random as rd

abscisse=rd.random()
ordonnee=rd.random()

print( 'Un point dans le carré : A({}, {}).'.format(abscisse, ordonnee) )

Une application classique (méthode de Monte-Carlo) : obtenir une approximation du nombre π.

Tirer n points au hasard dans le carré de sommets (0,0), (2,0), (2,2), (0,2).
Compter le nombre cpt de ces points se trouvant dans le disque de centre (1,1) et de rayon 1.
Afficher 4*cpt/n.

Le nombre affiché, pour n grand, est approximativement 4* aire du disque/aire du carré = π.


import random as rd

n=1000000 # nombre de points à tirer au hasard  
cpt=0 # compte les points dans le disque

for i in range(n) :
	x=2*rd.random()
	y=2*rd.random()
	if (x-1)**2+(y-1)**2<=1 : cpt+=1
		
print(4*cpt/n)