Random ------ 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 for ``display.scroll``. Can you modify the list to include your own set of names? Random Numbers ++++++++++++++ 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 example, ``6`` into ``"6"``). If you know you'll always want a number between ``0`` and ``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 ``N`` (this is different to the behaviour of ``random.randint``). 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 ``0.0`` and ``1.0`` inclusive. If you need larger random floating point numbers add the results of ``random.randrange`` and ``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 set with ``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..?