If you're seeing this message, it means we're having trouble loading external resources on our website.

Si estás detrás de un filtro de páginas web, por favor asegúrate de que los dominios *.kastatic.org y *.kasandbox.org estén desbloqueados.

Contenido principal

Números aleatorios

Aprende cómo generar números aleatorios en ProcessingJS al utilizar la función random() y comprueba sus valores con condicionales if.
Hemos estado usando nuestros condicionales if para revisar valores acerca del ambiente, como la posición actual del ratón del usuario, y responder de manera predecible.
¿Pero qué pasa si queremos cosas que sean impredecibles? ¿Qué pasa si queremos que nuestro programa actúe de manera diferente cada vez que se ejecuta?
¡La aleatoriedad al rescate!
Podemos generar números aleatorios y usar condicionales if y else if para cambiar el comportamiento de nuestro programa con base en los valores aleatorios.
Por ejemplo:
var randNum = random(0, 10);
if (randNum < 5) {
   text("¡Dulce!", 200, 200);
} else {
   text("¡Travesura!", 200, 200);
}
El programa tiene como salida "¡Dulce!" la mitad del tiempo y "¡Travesura!" la otra mitad.
Cómo funciona:
  • Se le asigna un número aleatorio a la variable randNum, empezando en 0 e incluyendo números hasta 10. Los valores regresados podrían incluir 0, 0.2, 3.3, 4, 5.5, 6.9, 8, 9 o 9.99, pero no el propio 10.
  • El condicional revisa si el número regresado es menor que 5, y si sí, escribe "¡Dulce!" o de lo contrario escribe "¡Travesura!'.
Algunas veces es más fácil tratar con número enteros que con números de punto flotante, de modo que podamos revisar valores exactos. Aquí hay unas cuantas funciones que convierten números de punto flotante a enteros:
  • round(): redondea un número hacia abajo al entero más cercano si la parte decimal es menor que .5 y si la parte decimal es igual o mayor que .5, redondea hacia arriba.
  • ceil(): siempre redondea un número al siguiente entero hacia arriba.
  • floor(): siempre redondea un número al entero hacia abajo.
Por lo general, queremos generar números aleatorios que se escojan de manera relativamente uniforme. Por ejemplo, si estamos simulando lanzar una moneda, entonces esperamos tener la misma probabilidad de obtener "Águila" o "Sol".
Este código logra ese objetivo:
var randFlip = floor(random(0, 2));
if (randFlip === 0) {
   text("Águila", 200, 200);
} else {
   text("Sol", 200, 200);
}
La variable randFlip siempre va a ser 0 o 1, puesto que llama floor() sobre el valor que regresa random(0, 2).
Para darte una idea de por qué ese es el caso, aquí está el resultado de llamar floor() sobre varios valores de random(0, 2):
random(0, 2)floor(resultado)
0.00
0.217…0
0.542…0
0.973…0
1.01
1.332…1
1.589…1
1.999…1
Los valores que regresa random() son aleatorios, así que no necesariamente se van a ver iguales a los valores en esa tabla. Si ejecutas el código de lanzar monedas solo 10 veces, podrías obtener una cadena de puras "Águilas" o de puros "Soles". Sin embargo, si lo ejecutas miles de veces y lleva sun registro de los resultados, verás que salen tanto "Águilas" como "Soles" alrededor de un 50% de las veces cada uno.
Como una regla general, cuando nuestro objetivo es obtener una distribución justa y uniforme de valores enteros, es mejor usar floor() con random().
La función random() es una muy buena manera de agregar un poco de variedad a nuestros programas. Sin embargo, hay que usarla con cuidado: averigua el rango de los números que estás generando, decide si necesitas redondear los números y revisa los valores de manera apropiada.
¡En el siguiente proyecto vas a tener la oportunidad de intentar eso por tu cuenta!

¿Quieres unirte a la conversación?

¿Sabes inglés? Haz clic aquí para ver más discusiones en el sitio en inglés de Khan Academy.