RANDOM, FUNCIÓN ALEATORIO
- 11 nov 2017
- 3 Min. de lectura

A veces quieres dejar las cosas al azar, o simplemente mezclarlas un poco, es decir, quieres que el dispositivo actúe aleatoriamente.
MicroPython incluye un módulo llamado “random” que hace más sencillo introducir un poco de caos en el código. En el siguiente ejemplo podemos ver como se muestran por el display nombres aleatoriamente de una lista (c8_random)
from microbit import*
import random
names = [“Mary”,”Yolanda”,”Damien”,”Alia”,”Kushal”,”Mei Xiu”,”Zoltan”]
display.scroll(random.choice(names))
La lista “names” contiene siete nombres definidos como strings de caracteres. La línea final está anidada (el efecto cebolla vuelve al ataque): el método “random.choice” coge los nombres de la lista como argumento y devuelve un nombre al azar. Este nombre (el elegido al azar) es el argumento para “display.scroll”.
¿Puedes modificar la lista para incluir tus propios nombres? Con todo lo visto hasta ahora, ¿Puedes hacer que salga un nombre al azar de tu propia lista cada vez que pulsas uno de los botones?
from microbit import*
import random
while True:
if button_a.is_pressed():
names = ["Maria","Yolanda","Daniel","Ana","Karina","Marta","Zaida"]
display.scroll(random.choice(names))
Números aleatorios
Los números aleatorios son muy útiles. Son muy comunes en los juegos. Es por eso que tenemos los dados.
MicroPython incluye varios métodos de números aleatorios muy útiles. A continuación vamos a ver un código para realizar un sencillo dado.
from microbit import*
import random
display.show(str(random.randint(1,6)))
Cada vez que el dispositivo se resetee mostrará un número entre el 1 y el 6. Estas empezando a familiarizarte con el anidado, por lo tanto es importante que veas que “random.randint” devuelve un número entero entre los dos argumentos dados. Fijate que como “display.show” necesita un dato tipo carácter utilizamos la función “str” para cambiar el tipo de dato de entero a carácter (por ejemplo, cambiamos el 6 en “6”).
Si quieres un número aleatorio entre 0 y N entonces utiliza el método “random.randrange”. De esta manera solo tendremos que dar un argumento, el método te devolverá un entero. Hay que tener en cuenta que el número N no se incluye (es otra diferencia con el método “random.randint”).
A veces necesitas números con decimal. Son los llamados números con punto flotante y es posible generarlos como un número con el método “random.random”. Sólo devuelve valores entre 0.0 y 1.0 incluidos. Si se necesitan números decimales más grandes deberemos sumar el resultado de “random.randrange” “random.random” como se describe a continuación.
from microbit import*
import random
answer = random.randrange(100) + random.random()
display.scroll(str(answer))
Semilla de caos
El generador de número aleatorio utilizado por los ordenadores no es verdaderamente aleatorio. Simplemente dan un número aleatorio a partir de un valor inicial llamado seed (semilla). Esta semilla suele estar generada de una manera aleatoria, como por ejemplo leyendo el tiempo del sistema y/o leyendo algún tipo de sensor como los termómetros que se colocan en los chips.
A veces necesitas tener el mismo comportamiento repetitivo para un valor aleatorio, es decir, una fuente que sea repetitiva. Es como si necesitaras los mismos cinco primeros valores aleatorios cada vez que tires un dado.
Esto es sencillo si proporcionamos el valor de la semilla (seed). Dando un valor de semilla, el generador de números aleatorios creará siempre los mismos valores aleatorios. Se puede introducir la semilla mediante “random.seed” y dando como parámetro un número entero. Esta variación del código del dado siempre produce el mismo resultado (c9_dado).
from microbit import*
import random
random.seed(1337)
while True:
if button_a.was_pressed():
display.show(str(random.randint(1, 6)))
¿Eres capaz de saber porque el programa necesita que pulses el botón A en vez de resetear el dispositivo como en el primer ejemplo?
En los siguientes enlaces se pueden descargar los archivos en micropython de los ejemplos:
https://drive.google.com/open?id=1yjvSSysC6XKW3gKKwi9iT8Ch08AHlTzH
https://drive.google.com/open?id=1Gt1dVn3VQnNI0vYA3Gd5ILhDeyCHdVZG
Fuente: https://microbit-micropython.readthedocs.io/en/latest/tutorials/random.html


Comentarios