15 minutes de Python
Simulation : coder un événement avec rd.random() et rd.randint()
Rappels fondamentaux
Dans le module numpy.random (souvent importé sous le nom rd), on dispose de fonctions
permettant de générer des nombres aléatoires. Ces fonctions sont à la base de la simulation d’expériences
aléatoires en Python.
- La commande
U = rd.random()renvoie un nombre réelUchoisi uniformément dans l’intervalle \( [0,1[ \). Autrement dit, tout sous-intervalle de \( [0,1[ \) de même longueur a la même probabilité d’être atteint. -
La commande
rd.randint(a,b)renvoie un entier choisi uniformément dans l’ensemble \( \{a,a+1,\dots,b-1\} \). Attention : dansnumpy.random, la borne supérieurebest exclue.
Simuler une expérience aléatoire consiste à remplacer un phénomène aléatoire réel (par exemple un tirage de boule, un lancer de dé, un choix au hasard) par une règle simple appliquée à un nombre aléatoire généré par l’ordinateur.
Par exemple, comme la probabilité que la valeur renvoyée par un appel de rd.random() appartienne à l’intervalle
\( [0,\tfrac13[ \) est égale à \( \tfrac13 \), on peut simuler le tirage d’une boule dans une urne
contenant un tiers de boules rouges et deux tiers de boules vertes de la manière suivante :
import numpy.random as rd
U = rd.random()
if U < 1/3:
couleur = "rouge"
else:
couleur = "verte"
Dans ce code :
- un nombre est choisi au hasard dans \( [0,1[ \),
- un nombre strictement inférieur à \( \tfrac13 \) correspond à une boule rouge,
- un nombre supérieur ou égal à \( \tfrac13 \) correspond à une boule verte.
On peut de la même manière utiliser rd.randint pour simuler des tirages discrets.
Par exemple, pour simuler le lancer d’un dé équilibré à six faces :
import numpy.random as rd
X = rd.randint(1,7)
Ici, la variable X prend l’une des valeurs \( 1,2,3,4,5,6 \) avec la même probabilité,
ce qui correspond exactement au modèle mathématique d’un dé équilibré.
La loi des grands nombres affirme que, lorsque l’on répète un grand nombre de fois la même expérience aléatoire indépendante, la fréquence de réalisation d’un événement se rapproche de sa probabilité théorique.
En pratique, pour déterminer une valeur approchée de la probabilité \( \mathbb{P}(A) \) d'un événement \( A \) avec Python, on procède donc ainsi :
- on répète l’expérience un grand nombre de fois (par exemple \( N = 10\,000 \)),
- on compte le nombre de fois où l'événement \( A \) s'est réalisé à l'aide d'un compteur
compteur / N, - on renvoie la fréquence
compteur / N.
import numpy.random as rd
N = 10000
compteur = 0
for i in range(N):
if rd.randint(6) == rd.randint(6):
compteur = compteur + 1
estimation = compteur / N
print(estimation)
Plus la valeur de N est grande, plus l’estimation obtenue est proche de la probabilité
théorique recherchée.
Exemple
import random as rd
N = int(input("N = "))
compteur = 0
for k in range(N):
U = rd.random()
if U < 1/2:
compteur += 1
print(compteur)
Explication
Le programme commence par demander à l'utilisateur d'entrer un entier naturel, stocké dans la variable N puis initialise la variable compteur à 0.
Ensuite, pour k variant de 0 à N-1 :
-
on choisit un nombre réel au hasard dans \( [0,1 [ \), qui est affecté à
U, -
on compare
Uet \( \frac{1}{2} \) et on augmente la variablecompteurde \( 1 \) à chaque fois queUest inférieur à \( \frac{1}{2} \), ce qui correspond à un événement de probabilité \( \frac{1}{2} \) (par exemple obtenir pile quand on lande une pièce équilibrée).
À la fin, on a donc simulé une suite de \( N \) expériences indépendantes de Bernoulli (en appelant succès \og obtenir un nombre inférieur à \( \frac{1}{2} \) (ou obtenir pile quand on lance une pièce équilibrée) \fg{} et compté le nombre de succès obtenus.
Trois commandes utiles aujourd’hui
Clique sur une carte pour voir l’instruction utile.
rd.random() < p
Simule un événement de probabilité \( p \).
np.mean(A)
A.
np.sum(A)
Renvoie la somme des coefficients du tableau numpy A.
Un exercice pour vérifier ta maîtrise
Compléter le script suivant pour qu’il renvoie une estimation de la probabilité d’obtenir une somme égale à 7 en lançant deux dés équilibrés.
import numpy.random as rd
N = int(input("N = "))
compteur = 0
for k in range(N):
d1 = rd.randint(1, 7)
d2 = rd.randint(1, 7)
s = d1 + d2
if s == 7:
compteur += 1
print(compteur / N)
Et pour quelques minutes de plus…
Prendre en main la programmation, pas à pas.
Ces exercices sont conçus pour t’aider à maîtriser progressivement la programmation en Python, en partant de la lecture et de la compréhension du code, jusqu’à l’écriture autonome de scripts complets.
L’objectif n’est pas d’aller vite, mais de construire des automatismes solides, en comprenant ce que fait chaque instruction, puis en apprenant à les utiliser par toi-même.
L’ordre des exercices est volontaire : on lit, on comprend, on complète, puis on écrit seul. Prends le temps de chaque étape : c’est la clé pour progresser durablement.
Niveau 1 Analyser un code
Comprendre avant d’écrire.
Dans cette première série, tu observes et analyses des scripts Python déjà écrits.
L’objectif est de comprendre la logique du programme, le rôle des variables, des boucles
et des conditions, et d’être capable de prévoir ce que le code affiche ou calcule.
Niveau 2 Compléter un code
Écrire, mais avec un cadre.
Ici, tu passes à l’écriture sans partir de zéro.
Le squelette du programme est fourni : il te reste à compléter certaines instructions
pour que le code fonctionne correctement.
Ce format permet de se concentrer sur l’essentiel, sans se perdre dans la structure générale.
Niveau 3 Écrire un code complet
Passer à l’autonomie.
Dans cette dernière série, tu écris un programme complet à partir d’une consigne.
Tu dois organiser ton code, choisir les bonnes instructions et construire la logique globale du script.
C’est ici que tu mets en pratique tout ce que tu as appris dans les niveaux précédents.
Contenu réservé aux membres
Il faut être membre et connecté pour accéder aux exercices et aux corrigés.