Comment générer des nombres aléatoires en Python ?
Générer des nombres aléatoires est une opération courante en programmation, notamment pour les jeux, les simulations ou les tests automatisés.
Python propose un module de la librairie standard appelé random
qui facilite cette tâche.
Pour l'utiliser, pas besoin d'installation, il suffit de l’importer :
import random
Voici quelques utilisations classiques de ce module :
Générer un entier aléatoire entre a et b (inclus)
nombre = random.randint(a, b)
Générer un nombre décimal aléatoire entre 0 et 1
nombre = random.random()
Générer un nombre décimal entre a et b
nombre = random.uniform(a, b)
Sélectionner un élément aléatoire dans une liste
element = random.choice(ma_liste)
Mélanger une liste
random.shuffle(ma_liste)
Voici un petit script qui combine plusieurs de ces fonctions :
import random
noms = ["Alice", "Bob", "Charlie", "Diana"]
# Tirer un nom au hasard
nom_tire = random.choice(noms)
print(f"Nom tiré au hasard : {nom_tire}")
# Générer un score aléatoire entre 0 et 100
score = random.randint(0, 100)
print(f"Score aléatoire : {score}")
# Mélanger l’ordre des noms
random.shuffle(noms)
print(f"Noms mélangés : {noms}")
# Générer un coefficient aléatoire entre 0.5 et 1.5
coefficient = random.uniform(0.5, 1.5)
print(f"Coefficient aléatoire : {coefficient:.2f}")
Ce script peut servir de base à un jeu, un classement, ou une simulation simple.
Contrôler l’aléatoire avec random.seed
Par défaut, les résultats générés sont différents à chaque exécution.
Mais si tu veux rendre l’aléatoire reproductible (par exemple pour des tests ou des démonstrations), tu peux fixer une "graine" avec random.seed() :
random.seed(42)
Cela permet de produire la même suite de nombres aléatoires à chaque lancement du programme.
import random
random.seed(42) # Pour des résultats reproductibles
noms = ["Alice", "Bob", "Charlie", "Diana"]
# Tirer un nom au hasard
nom_tire = random.choice(noms)
print(f"Nom tiré au hasard : {nom_tire}")
# Générer un score aléatoire entre 0 et 100
score = random.randint(0, 100)
print(f"Score aléatoire : {score}")
# Générer un coefficient aléatoire entre 0.5 et 1.5
coefficient = random.uniform(0.5, 1.5)
print(f"Coefficient aléatoire : {coefficient:.2f}")
Pourquoi utiliser random.seed dans les tests ?
Lorsque tu écris des tests unitaires, tu veux que les résultats soient prévisibles et reproductibles à chaque exécution. Si ton code dépend d’une valeur aléatoire, le test pourrait réussir une fois, puis échouer la fois suivante… simplement parce que la valeur générée a changé 🤷♂️
En fixant le "seed" avec random.seed()
, tu t’assures que le comportement de ton code reste stable pendant les tests, ce qui permet de repérer plus facilement les erreurs réelles dans la logique du programme, plutôt que des résultats qui varient de façon imprévisible.
Exemple :
def tirer_un_score():
random.seed(123) # Graine fixe pour test
return random.randint(0, 100)
assert tirer_un_score() == 6 # Ce test passera toujours