Expériences aléatoires avec Python

Programmes en Python pour tirages aléatoires

Cette page est une initiation aux tirages aléatoires en langage Python. Elle s’inscrit dans les programmes de maths de seconde et de premières technologiques.

En effet, les programmes du secondaire prévoient l’application d’algorithmes écrits en langage Python, notamment dans le domaine des probabilités. Il ne s’agit pas de rédiger des programmes entiers mais de les comprendre, voire de les compléter.

En principe, les lycéens doivent juste définir des fonctions. Ici, nous n’oublions ni les importations ni les print sans lesquels on ne peut vérifier si le programme fonctionne. Il ne s’agit pas d’exercices mais d’exemples dont vous pouvez vous inspirer. Bien sûr, les algorithmes peuvent toujours être écrits de différentes façons. Ceux qui suivent ne sont que des suggestions.

 

Random

En anglais, random signifie aléatoire. C’est le nom d’une bibliothèque de Python (library) mais aussi d’une fonction de ce module.

Par conséquent, il faut avoir chargé la bibliothèque pour que les programmes suivants fonctionnent (d’où les premières lignes de code dans les programmes ci-dessous).

La fonction random permet de sélectionner un élément au hasard. Pour définir une variable n qui prend une valeur aléatoire entre 0 et 1, l’instruction est n = random().

 

Programmes simples

Ce premier programme est de niveau seconde. Il s’agit d’un tirage aléatoire pour lequel la probabilité de succès est de 0,5. Il utilise une condition et la fonction random qui restitue aléatoirement un nombre compris entre 0 et 1.

from random import *

def programme():
    n = random()
    if  n < 0.5:
        variable = 'pile'
    else :
        variable = 'face'
    return variable

print(programme())

Le programme suivant est plus simple puisqu’il consiste à tirer aléatoirement un entier compris entre 1 et 10. Il utilise la fonction randint pour laquelle on précise l’intervalle dans lequel le nombre est tiré. Notez qu’avec randint, ce nombre est un entier. Si l'on souhaitait obtenir un nombre non entier (float), il faudrait utiliser uniform.

from random import *

def programme():
    n = randint(1,10)
    return n

print(programme())

Voir un autre exemple avec randint en page de loi des grands nombres.

Le mini programme ci-dessous a été écrit sans utiliser de fonction. Il vous permet d’afficher dix nombres aléatoires compris entre 1 et 10.

for i in range(0,10):
    n = randint(1,10)
    print(n)

 

Avec des listes

Les programmes qui suivent peuvent s’inscrire dans un exercice de niveau première technologique puisqu’ils font intervenir la notion de liste.

Soit une liste de quatre rapaces. On souhaite qu’un programme tire au hasard l’un d’eux.

from random import *
liste = ['aigle','buse','faucon','milan']
rapace = choice(liste)
print (rapace)

Comme vous le constatez, ce programme ne comporte aucune difficulté. Il faut juste connaître la méthode choice.

Le programme suivant est identique au précédent. La commande d'importation est plus rapide mais il faut préciser ensuite que choice se trouve dans la bibliothèque random.

import random
liste = ['aigle','buse','faucon','milan']
rapace = random.choice(liste)
print (rapace)

milan

À présent, lançons virtuellement une pièce dix fois et notons si le résultat obtenu est pile ou face.

import random
liste = ['pile','face']
for i in range(0,10):
    cote = random.choice(liste)
    print (cote)

Notez que l'instruction d'affichage est indentée puisque nous voulons connaître le résultat de chaque itération.

Pour terminer, lançons la pièce cent fois. Comme c'est un lancer virtuel, nous ne perdons pas plus de temps qu'avec dix lancers (il ne s'agit pas d'imiter le mathématicien John Kerrich qui lança une pièce 10 000 fois pendant qu'il croupissait en prison).

Au lieu d’écrire cent lignes, le programme devra compter combien de fois le côté pile est apparu.

import random
liste = ['pile','face']
compteur = 0
for i in range(0,100):
    cote = random.choice(liste)
    if cote == 'pile':
        compteur = compteur + 1
print (compteur)

Notez l'absence de else malgré la structure conditionnelle.

Le résultat doit être proche de 50 qui est le nombre théorique de piles obtenus selon la loi des grands nombres. Lancez ce programme plusieurs fois et observez les sorties.

Il est possible de tirer aléatoirement plusieurs éléments d'une liste. On utilise alors choices (au pluriel) pour un tirage avec remise ou sample pour un tirage sans remise.

Voir une autre application de random en page de simulations d'échantillonnage (niveau seconde).