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.

Question

En Python, random est




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.