Sometimes you want to leave things to chance, or mix it up a little: you want the device to act randomly.
MicroPython comes with a
random module to make it easy to introduce chance
and a little chaos into your code. For example, here’s how to scroll a random
name across the display:
from microbit import * import random names = ["Mary", "Yolanda", "Damien", "Alia", "Kushal", "Mei Xiu", "Zoltan" ] display.scroll(random.choice(names))
The list (
names) contains seven names defined as strings of characters.
The final line is nested (the « onion » effect introduced earlier): the
random.choice method takes the
names list as an argument and returns
an item chosen at random. This item (the randomly chosen name) is the argument
Can you modify the list to include your own set of names?
Random numbers are very useful. They’re common in games. Why else do we have dice?
MicroPython comes with several useful random number methods. Here’s how to make a simple dice:
from microbit import * import random display.show(str(random.randint(1, 6)))
Every time the device is reset it displays a number between 1 and 6. You’re
starting to get familiar with nesting, so it’s important to note that
random.randint returns a whole number between the two arguments, inclusive
(a whole number is also called an integer - hence the name of the method).
Notice that because
display.show expects a character then we use the
str function to turn the numeric value into a character (we turn, for
If you know you’ll always want a number between
N then use the
random.randrange method. If you give it a single argument it’ll return
random integers up to, but not including, the value of the argument
(this is different to the behaviour of
Sometimes you need numbers with a decimal point in them. These are called
floating point numbers and it’s possible to generate such a number with the
random.random method. This only returns values between
inclusive. If you need larger random floating point numbers add the results
random.random like this:
from microbit import * import random answer = random.randrange(100) + random.random() display.scroll(str(answer))
Seeds of Chaos¶
The random number generators used by computers are not truly random. They just give random like results given a starting seed value. The seed is often generated from random-ish values such as the current time and/or readings from sensors such as the thermometers built into chips.
Sometimes you want to have repeatable random-ish behaviour: a source of randomness that is reproducible. It’s like saying that you need the same five random values each time you throw a dice.
This is easy to achieve by setting the seed value. Given a known seed the
random number generator will create the same set of random numbers. The seed is
random.seed and any whole number (integer). This version of the
dice program always produces the same results:
from microbit import * import random random.seed(1337) while True: if button_a.was_pressed(): display.show(str(random.randint(1, 6)))
Can you work out why this program needs us to press button A instead of reset the device as in the first dice example..?