Le module random
Présentation
Le module de base random permet la génération basique d'aléa en python.
Pour l’importer :
Les autres langages de programmation ont aussi leur propre bibliothèque de gestion de l’aléa.
Tirages simples
Tirer aléatoirement un réel
Pour obtenir un nombre entre 0 et 1, faire simplement :
Il suffit d’avoir un générateur aléatoire de nombres entre 0 et 1, pour pouvoir générer n’importe quelle catégorie de nombres...
Exemples de tirage aléatoire
- Pour tirer un nombre entre 0 et 10, on fait une homothétie :
- Pour tirer un nombre entre 1 et 2, on fait une translation : on tire un nombre entre 0 et 1, et on ajoute 1
- Ces deux procédés se combinent pour tirer aléatoirement un réel entre deux bornes quelconques. Par exemple,
renvoie un nombre aléatoire entre -2,5 et 2,5.
- Si l’on veut tirer un entier, il suffit de prendre la partie entière. Par exemple,
>>> int(10*random())
- >>> int(10*random()+5)
tirent respectivement un entier entre 0 et 9, et un autre entre 5 et 14.
Il reste à combiner l’ensemble des méthodes précédentes pour obtenir tous les tirages possibles.
Ainsi, si l’on veut tirer un nombre, à deux décimales, entre 0 et 1, on tirera un entier entre 0 et 100, que l’on divisera par 100 :
>>> int(100*random())/100.
Exemple à ne pas faire
Ce qui précède est la seule méthode raisonnable d’utilisation d’un générateur de nombre aléatoire.
On utilisera la même technique en Python, et C et en Java, etc.
Retenir que, pour obtenir un nombre entre 0 et 0,1, il ne faut JAMAIS procéder comme suit :
- Tirer un nombre entre 0 et 1.
- S’il n’est pas entre 0 et 0,1, alors recommencer.
En effet, si l’on souhaite obtenir, par cette manière, un nombre entre 0 et 0,0001, on a une probabilité de 1 millième de réussir à chaque lancer : il faudra attendre longtemps.
Travaux pratiques
- Faire une fonction qui tire aléatoirement un réel entre 17 et 92,5.
- Faire une fonction qui tire aléatoirement un entier entre a et b (fournis par l’utilisateur).
- Faire, de même, une fonction qui tire un nombre à deux décimales entre 0 et 100.
Utilisation de la bibliothèque random
Il est utile de savoir se débrouiller avec une simple fonction random(), et comprendre qu'une simple génération de nombres entre 0 et 1 suffit à tous les besoins d'aléa. Les bibliothèques modernes sont cependant souvent assez complètes, et contiennent un certain nombre de fonctionnalités pour nous simplifier la vie.
- choice(objet)
- extrait aléatoirement un élément de objet, qui est un conteneur : liste, tuple, string...
- randint(a,b)
- tire aléatoirement un entier entre a et b inclus.
- sample(objet, taille)
- extrait un échantillon de la taille fournie à partir de l'objet donné (un conteneur quelconque).
- shuffle(objet)
- mélange l'objet fourni. Cet objet doit être modifiable (e.g., une liste, mais ni un tuple, ni un string), et il sera modifié sur place.
- uniform(a,b)
- tire aléatoirement un réel entre a et b.
Travaux pratiques
- Tester les commandes précédentes.
- Refaire les exercices ci-dessus avec ces nouvelles fonctions, et les mémoriser.
- Consulter la documentation de la bibliothèque random.
N.B.: Il faudrait, à l’issue de ce TP :
- Parfaitement maîtriser les techniques fondamentales, précédemment évoquées, de génération d’un nombre aléatoire. Elles sont communes à tout langage de programmation.
- Savoir qu’il n’est pas toujours nécessaire de réinventer la roue : connaître les bibliothèques et leurs méthodes avancées de génération de nombres aléatoires.