3.4 Números Aleatorios, al Azar o random con Python



1. Número aleatorio o al azar

Referencia: Van Rossum 10.6 p85, Rodríguez 5.9 p99, Downey 12.1

dados para números aleatorios

Para simular un número de azar se recurre al concepto de números aleatorios, que por ejemplo es el valor obtenido al lanzar un dado para juegos de tablero. Si el dado es estándar, no se puede predecir el valor que saldrá en el dado.

aleatorio recta numérica

Un número aleatorio se define como un número real cualquiera en el intervalo [0,1).

La forma básica de generar un número aleatorio en Python es usando la librería random(), que se puede usar con operaciones adicionales para simulaciones de dados, movimientos en juegos, etc.

>>> import random as rnd
>>> rnd.random()
0.28033599517631624
>>> rnd.random()
0.07239272147532794
>>> 


2. Número aleatorios para un dado en Python

numero aleatorio entero dado de seis caras

Para simular un dado de seis caras, que es un número aleatorio entero en el intervalo [0,6] se construye paso a paso:

dado ← entero(aleatorio*6)+1

1. Un número aleatorio

aleatorio recta numérica

Se empieza con la forma básica para generar un número aleatorio entre [0,1)

>>> import random as rnd
>>> aleatorio = rnd.random()
>>> aleatorio
0.9531257439341784

2. Se debe convertir del intervalo [0,1) al intervalo de un dado de 6 caras,

numero aleatorio en intervalo[0.6)

multiplicando el aleatorio por 6, obteniendo un real de [0,6). No se incluye el 6.

>>> dado = aleatorio*6
>>> dado
5.7187544636050704
número aleatorio [0,6) entero

3. Sin embargo, el aleatorio de un dado es un número entero

Se extrae solo la parte entera para obtener un número entero [0,5]

>>> dado = int(aleatorio*6)
>>> dado
5

4. Para que el resultado sea [1,6],

número aleatorio [1,6] entero

se desplaza el intervalo a la derecha sumándole 1, con lo que el valor mínimo es 1 y el máximo será 6

>>> dado = int(aleatorio*6)+1
>>> dado
6

La fórmula final del ejemplo usada varias veces, mostrará que se obtiene un número diferente semejante a lanzar un dado de seis caras.

>>> dado = int(rnd.random()*6)+1
>>> dado
1
>>> dado = int(rnd.random()*6)+1
>>> dado
3
>>> 

Referencia: Elementos esenciales para programación: Algoritmos y Estructuras de Datos Latin Project. Primera Edición 2014. Sección 4.42. p.86



3. Ejercicio

Referencia: 1Eva2008TI_T3 Simular precio de petroleo

Realice un algoritmo para simular el precio del barril de petróleo durante un mes de 30 días, suponiendo que son valores enteros que fluctúan en forma aleatoria entre $ 130 y $ 150 y se obtenga las siguientes respuestas:

promedio valores grafico

a) El promedio del precio del petróleo.
b) ¿Cuál fue el día en el que estuvo más barato el barril de petróleo?



4. Desarrollo de algoritmo

precio petroleo aleatorio diagrama
Diagrama de Flujo ejercicio - números aleatorios

Para iniciar el algoritmo, se puede considerar como variable de entrada los días del mes, o asignarles directamente 30 días.

La primera aproximación al problema para responder el literal a) consiste en generar números aleatorios en el rango [130, 150] y acumular sus valores para el promedio.

Será necesario disponer de un contador para controlar el número de veces que se generan los precios de forma aleatoria en el lazo de repetición.

Una de las formas de resolver el problema es con un lazo repita hasta, cuyo diagrama de flujo se muestra a continuación:

Instrucciones en Python

# Ejercicio 1. Precio del petroleo
import random as rnd

# INGRESO
diasmes = int(input('dias que tiene el mes: '))

# PROCEDIMIENTO
total = 0
dia   = 0
rango = (150-130)+1
while not(dia>=diasmes):
    precio = int(rnd.random()*rango) + 130
    total  = total + precio
    dia    = dia + 1
promedio = total/diasmes

# SALIDA
print(promedio)
dias que tiene el mes: 30
137.56666666666666
>>> 

Para la pregunta b) es necesario analizar la manera de encontrar el día con el precio más barato.

En este caso se utilizará el algoritmo para búsqueda del menor, que consiste en iniciar con el supuesto para el valor menor de precio y día, probando contra el precio de cada día y de ser necesario se cambian los valores menores.

precio petroleo aleatorio 02 diagrama
Diagrama de Flujo ejercicio - búsqueda de menor valor

Es un similar al caso de usar una hipótesis y realizar luego las pruebas.

Como supuesto, se escogerá el valor máximo de precio con el objetivo que el primer precio que aparece sustituye los valores.

# Ejercicio 1. Precio del petroleo
import random as rnd

# INGRESO
diasmes =  int(input('dias que tiene el mes: '))

# PROCEDIMIENTO
total = 0
dia = 0
rango = (150-130)+1
diamenor = 0
preciomenor = 150
while not(dia>=diasmes):
    precio = int(rnd.random()*rango) + 130
    total = total + precio
    if (precio<preciomenor):
        diamenor = dia
        preciomenor = precio
    dia = dia + 1
promedio = total/diasmes

# SALIDA
print(promedio)
print(diamenor)
dias que tiene el mes: 30
 140.06666666666666
 22
 >>>

Otra forma de realizar el algoritmo consiste en cambiar la perspectiva del lazo repita- hasta por un mientras repita. Para el cambio será necesario solo negar la expresión usada en el lazo repita-hasta en días<diasmes.

precio petroleo aleatorio 03 diagrama
Diagrama de Flujo ejercicio - aleatorios y búsqueda de menor valor con mientras-repita



Unidades FP