Gestion de l'aléatoire

L'aléatoire

Parfois, il est utile d'introduire un peu de hasard : on souhaite que l'appareil agisse aléatoirement.

MicroPython est fourni avec un module random qui facilite l'introduction de hasard et d'un peu de chaos dans ton code. Par exemple, voilà comment montrer un nom au hasard sur l'affichage :

1
from microbit import *
2
import random
3
4
noms = ["Mary", "Yolanda", "Damien", "Alia", "Kushal", "Mei Xiu", "Zoltan" ]
5
6
display.scroll(random.choice(noms))

La liste noms contient sept noms définis par des chaînes de caractères. La ligne finale est imbriquée : la méthode random.choice prend la liste noms comme argument et renvoie un élément choisi au hasard. Cet élément (le nom choisi au hasard) est l'argument de la méthode dispaly.scroll.

Nombres aléatoires

MicroPython est fourni avec plusieurs méthodes utiles pour les nombres aléatoires. Voici comment faire un simple dé:

1
from microbit import *
2
import random
3
4
display.show(str(random.randint(1, 6)))

A chaque fois que l'appareil est réinitialisé, il affiche un nombre entre 1 et 6.

Il est important de remarquer random.randint qui renvoie un nombre entier entre ses deux arguments inclus (un nombre entier est appelé integer en anglais d'où le nom de la méthodes). Et que puisque display.show nécessite un argument sous forme de caractère on utilise la fonction :

str() pour convertir la valeur numérique en un caractère (on converti par exemple le nombre 6 en "6")

Lorsque l'on souhaite toujours un nombre entre 0 et N alors il faut utiliser la méthode random.range.

Si on fournit un seul argument elle renverra un entier aléatoire strictement inférieur à cet argument. (ce qui est différent du comportement de la méthode``random.randint``)

Parfois, on a besoin de nombres décimaux. Ils sont appelés nombres à virgule flottante en informatique souvent abrégé en float et il est possible d'en générer de façon aléatoire avec la méthode random.random. Elle ne renvoie que des valeurs comprises entre 0.0 et 1.0 inclus.

Si on a besoin de nombres décimaux aléatoires plus grands, il faut ajouter les résultats de random.randrange et de random.random comme ça:

Graine du Chaos

Les générateurs de nombres aléatoire d'un ordinateur ne sont pas vraiment aléatoires. Ils fournissent seulement des résultats semblant aléatoires étant donnée une valeur initiale appelée valeur graine (ou seed en anglais). Cette graine est souvent générée à partir de valeurs plus ou moins aléatoires comme l'heure du moment ou des lectures de capteurs comme des thermomètres intégrés aux puces électroniques.

Parfois on a besoin d'un comportement à peu près aléatoire mais répétable : c'est-à-dire une source de hasard reproductible. C'est comme de dire que l'on veut les mêmes cinq valeurs aléatoire à chaque fois que l'on lance cinq fois de suite un dé.

C'est facile à accomplir en fixant la valeur graine. A partir d'une même valeur graine le générateur de nombres aléatoires produira toujours la même suite de nombres « aléatoires ». La graine est fixée avec la méthode random.seed et n'importe quel nombre entier. Cette version du programme de dé produit toujours les mêmes résultats :

1
from microbit import *
2
import random
3
4
random.seed(1337)
5
while True:
6
    if button_a.was_pressed():
7
        display.show(str(random.randint(1, 6)))