12. Randomiser - random
¶
Dans ce chapitre, nous verrons comment un programme peut introduire un élément aléatoire dans un calcul ou dans un raisonnement. Ceci est très important pour programmer certains jeux. Nous allons voir que :
la fonction
random()
renvoie une valeur aléatoire dans l’intervalle [0, 1],la fonction
randint(a, b)
renvoie un entier aléatoire dans l’intervalle [a, b],la fonction
shuffle(liste)
fait une permutation aléatoire des éléments d’une liste.
12.1. Le contenu du module¶
Le module random
permet de créer des nombres pseudoaléatoires. Pour afficher le contenu d’un module, nous pouvons utiliser la fonction dir()
qui affiche les objets du module.
Le module met à disposition 13 fonctions.
12.2. Entier aléatoire¶
La fonction randint(a, b)
retourne un nombre aléatoire dans l’intervalle [a, b].
Avec y = randint(-200, 200)
nous choisissons une valeur y
aléatoire.
Pour éviter de dessiner une ligne depuis l’origine au premier point, nous levons le stylo au début, et nous le posons dès le premier point atteint avec goto(x, y)
12.3. Position aléatoire¶
Nous pouvons également choisir les deux coordonnées x
et y
de façon aléatoire.
12.4. Angle aléatoire¶
La fonction a = randint(-90, 90)
retourne un angle aléatoire dans l’intervalle [-90, 90].
Le programme produit un parcours aléatoire (random walk)
12.5. Taille aléatoire¶
La fonction d = randint(1, 3)
retourne un diamètre aléatoire dans l’intervalle [1, 3]. Chaque taille a la même probabilité.
Sous la belle étoile¶
Les étoiles dans le ciel apparaissent à des positions plus ou moins aléatoires.
Nous calculons x
et y
comme des entiers aléatoires, choisis dans l’intervalle de la largeur et de la hauteur de la fenêtre.
Nous choisissons la taille d
avec une distribution normale (de Gauss).
L’expression d = gauss(3, 2)
renvoie un diamètre avec une moyenne de 3 et un sigma de 2.
Comme cette valeur pourrait être négative, dans certains cas, nous en prenons la valeur absolue avec la fonction abs())
.
Pour faire un dessin, il est utile de pouvoir spécifier la région des étoiles.
Nous choisissons ici des régions rectangulaires définies par une position p
et une taille size
.
Les étoiles seront placées dans cette région.
La voie lactée¶
Pour arranger les étoiles plus dans une bande horizontale, comme dans la Voie lactée, nous utilisons pour la variable y
une distribution normale (de Gauss) avec une moyenne de 0 et un sigma de 50.
12.6. Couleur aléatoire¶
La fonction choice()
retourne un élément aléatoire dans une séquence.
Cube de Rubik¶
Depuis une liste avec les 6 couleurs du cube de Rubik, nous en choisissons une aléatoirement, pour dessiner un cube dans son état défait.
12.7. Text aléatoire¶
La fonction ‘choice()’ permet aussi de choisir parmi un tuple de mots. Ici nous affichons les noms des chapitres à des positions aléatoires. Parfois les positions sont superposées. Nous allons voir plus tard, comment nous pouvons résoudre ce problème.
12.8. Emoji aléatoire¶
12.9. Fleurs dans un champ¶
Dans l’exemple suivant, nous plaçons des fleurs à des positions aléatoires dans un champ.
12.10. Distribution gaussienne¶
La distribution normale, ou distribution gaussienne, est la distribution qui apparait souvent dans la nature. La taille d’une population, le poids d’une population, suit souvent une distribution gaussienne.
La distribution normale gauss(mu, sigma)
est décrite par deux paramètres :
son espérance
mu
son écart-type
sigma
La fonction `gauss(0, 5)’ avec un sigma de 5 va distribuer ses valeurs autour de 0, de sorte placer 67% des points dans l’intervalle [-5, 5]. Le programme suivant montre un histogramme visuel de classification de 400 points.
La distribution des tailles des animaux, ou des humains, est également gaussienne. Ci-dessous nous montrons une distribution avec un sigma de 2 et ensuite avec un sigma de 10.
12.11. Champs de fleurs¶
Pour simuler la perspective, nous dessinons les fleurs proches plus grandes. Il est de nouveau utile de définir une fonction de répartition, qui permet de distribuer des listes d’objets dans une région rectangulaire.
12.12. Aquarium¶
Nous ajoutons des feuillages en bas de l’aquarium et intercalons les poissons avec les plantes.
12.13. Permuter¶
La fonction shuffle()
permet de permuter les éléments d’une liste. Ceci est l’équivalent de ce qu’on fait avec des cartes de jeux, quand on les mélange.
12.14. Mélanger des cartes¶
La fonction shuffle()
permet de mélanger ou permuter aléatoirement une liste. Nous l’utilisons pour mélanger nos cartes de jeu.