Hasard¶
Des fois tu as envie des laisser le hasard choisir, ou d’introduire un peu de hasard: tu veux 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:
from microbit import *
import random
noms = ["Mary", "Yolanda", "Damien", "Alia", "Kushal", "Mei Xiu", "Zoltan" ]
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 (L’effet oignon présenté plus tôt): 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
.
Peux-tu modifier la liste pour y inclure ton propre ensemble de noms ?
Nombres aléatoires¶
Les nombres aléatoires sont très utiles. Ils sont communs dans les jeux. Pour quelle autre raison avons-nous des dés ?
MicroPython est fourni avec plusieurs méthodes utiles pour les nombres aléatoires. Voici comment faire un simple dé:
from microbit import *
import random
display.show(str(random.randint(1, 6)))
A chaque fois que l’appareil est réinitialisé, il affiche un nombre entre 1 et 6.
Tu commences à avoir l’habitude de l’imbrication, donc il est important que tu
remarques 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 ``6
en "6"
)
Si tu sais que tu voudras toujours un nombre entre 0
et N
alors tu dois
utiliser la méthode random.range
. Si tu lui fournis un seul argument elle te
renverra un entier aléatoire strictement inférieur à cet argument. (ce qui est
différent du comportement de la méthode``random.randint``)
Des fois tu as 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 tu as besoin de nombres
décimaux aléatoires plus grands, ajoute les résultats de random.randrange
et
de random.random
comme ça:
from microbit import *
import random
reponse = random.randrange(100) + random.random()
display.scroll(str(reponse))
Les Graines 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 tu auras 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 tu veux les mêmes cinq valeurs aléatoire à chaque fois que tu lances cinq fois de suite un dé.
C’est facile à accomplir en fixant toi-même 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:
from microbit import *
import random
random.seed(1337)
while True:
if button_a.was_pressed():
display.show(str(random.randint(1, 6)))
Comprends-tu pourquoi ce programme nécessite l’appuie sur le bouton A plutôt que de réinitialier le micro:bit comme dans le premier exemple ?