Modulo random en python con ejemplos

Modulo Random
Modulo Random

En la sección Módulos, intentare ir explicando cada uno de los módulos y las
funciones que ellos contienen, vistos en el correr del blog.

El modulo random proporciona un generador de números aleatorios, por lo que es adecuado para una gran gama de aplicaciones: juegos, web, bases de datos, etc.

Importante decir para los que no saben, cuando queremos utilizar alguna función de un modulo, tenemos que importar el modulo con anterioridad. En python para importar un modulo hacemos lo siguiente:

Si lo queremos importar en el shell interactivo para probarlo:
»»»import random

O en la cabecera de nuestros programas para utilizar las funciones mas tarde:
import random

random.randrange([start,] stop [,step]) , random.randrange(stop)

 

El método randrange devuelve un elemento seleccionado al azar y como su nombre lo dice, el numero aleatorio que nos va a devolver tiene que estar dentro de un rango ingresado por nosotros. 


start - punto de inicio del rango (el inicio se incluye en el rango)
stop - punto final del rango (no se incluye dentro del rango)
step - agrega un salto en el rango


Ejemplos de random.randrange


#! /usr/bin/env python
# -*- coding: utf-8 -*-

import random

print random.randrange(10)


Nos devolverá un numero aleatorio entre 0 y 9 (el 10 no es incluido en el rango)


#! /usr/bin/env python
# -*- coding: utf-8 -*-

import random

print random.randrange(1, 12, 2) #Las opciones son (1, 3, 5, 7, 9, 11)
print random.randrange(0, 11, 2) #Las opciones son (0, 2, 4, 6, 8, 10)



Nos devolverá un numero aleatorio entre 0 y 10 contando de 2 en 2 (0, 2, 4, 6, 8, 10) 

random.randint(a, b)

La única diferencia que encuentro entre randint y randrange es que al usar randint(1, 10), el 10 es incluido dentro del rango, cosa que en la función randrange no pasa.

Ejemplo de random.randint:

#! /usr/bin/env python
# -*- coding: utf-8 -*-

import random

print random.randint(0, 5)#La salida va a ser: 0, 1, 2, 3, 4 o 5

random.choice(secuencia)

Devuelve un elemento aleatorio de una secuencia no vacía.
random.choice(["rojo", "negro", "verde"])

Esta funcion de eleccion se puede utilizar para elegir un elemento aleatorio a partir de una lista:

Ejemplo de random.choice:

#! /usr/bin/env python
# -*- coding: utf-8 -*-

import random

lista = [2, 190, False, "hola", "pelota", 123]
random.choice(lista) 

random.random() 

Devuelve un numero aleatorio de punto flotante entre 0.0 y 1.0
También se puede utilizar de la siguiente manera:

random.random() * 100 #Nos devuelve un numero de punto flotante entre 0.0 y 100.0

random.uniform(a, b)

 

Al igual que random.random, devuelve un numero de punto flotante entre a y b:

random.uniform(1, 2) #Devuelve un numero aleatorio entre 1.0 y 2.0

random.shuffle(a)

 

La función shuffle mezcla aleatoriamente el orden de los elementos.

Ejemplo de random.shuffle(a):

#! /usr/bin/env python
# -*- coding: utf-8 -*-

import random

a = [1, 2, 3, 4, 5]

random.shuffle(a)

print a
[3, 2, 4, 5, 1]

Hay muchas mas funciones con el modulo random, estas son las que voy entendiendo y publicando. A medida que vaya conociendo otras funciones de random actualizare el post.

Cualquier duda o sugerencia espero tu comentario...


				
	
	
  1. Anónimo dice:

    Buen día!! Te consulto, cuando pongo el siguiente código no me resuelve. Yo quiero que me devuelva la lista con distinto orden y y despues quiero que me devuelva una tupla. El código es:

    listaPosible = [1,2,3,4,5,6,7,8,9]
    return tuple(random.shuffle(listaPosible))

    Y el mensaje de error: TipeError 'NoneType' object is not iterable

    Agradeceria tu ayuda!! Sldos!!

    1. porno thrasher dice:

      a mi me paso eso en un programa al manejar arreglos
      pero me pase al python 2.7 y me corrio perfecto (estaba en el 3.3)
      es cuestion de la version de python...a menos que te marque el error antes de ejecutarlo

    2. Anónimo dice:

      El problema está en return tuple, se devuelve un valor, pero ¿a dónde?
      Hazlo así:

      listaPosible = [1,2,3,4,5,6,7,8,9]
      random.shuffle(listaPosible)
      tupla= tuple(listaPosible) # para convertir la lista en tupla

      Por cierto que uso la versión 3.4.1.

  2. Unknown dice:

    Como se genera un random con un porcentaje de imprimir x valores iguales a 1 y m valores iguales a 0... Gracias

    1. PythonDiario dice:

      No entiendo bien la consulta.

    2. Anónimo dice:

      La pregunta es ambigua, pero lo que solicita se puede hacer con una función en la cual se lleve un contador de elementos para el total a imprimir y con base en ello se subdivida la cantidad entre los 0's y 1's que se requieren.
      Luego de allí, generar la cantidad de números con algún random entre 0 y 1 hasta que la cantidad se consiga. La sugerencia es poner todo en 0 y luego contar 1's generados.

    3. tomasalejandro dice:

      saca las panochas,saca klas pamochas

  3. Anónimo dice:

    Muy bueno, y completo, la verdad me sirvio de mucho gracias

  4. Unknown dice:

    Hola muy bueno me gustó la explicación, necesito si me podes ayudar, armar un programa donde yo ingresó una cantidad de números ej 20 números y me armé varias combinaciones de grado 4. Que condiciones me convienen usar Saludos Pipi

  5. Unknown dice:

    para armar strings que no se repitan:

    def nombre_aleatorio(etiqueta = "rpteoc_"):
    import random

    letras = []

    for x in range(65,91):

    letras.append(chr(x))

    for x in range(97,123):

    letras.append(chr(x))

    for x in range(48,58):

    letras.append(chr(x))

    #for z in range(12):
    nombre = ""
    for x in range(12):
    nombre = nombre + random.choice(letras)
    #print "nombre aleatorio=", z , nombre
    nombre = etiqueta + nombre
    return nombre

  6. almi dice:

    Buen aporte :).... estoy resolviendo un problema que me pide que lo resuelva con random... donde me piden 5 numeros aleatorios con un rango determinado... lei que tbm se puede usar el random.sample.. ejemplo, por favor? o solo usar el random.randrange?. Gracias

  7. Unknown dice:

    me podrian ayudar con este programa porfavor la verdad no lo entiendo.
    Se desea generar numeros N aleatorios entre 1 y X, se espera que X sea una constante, y imprima los numeros generados en pantalla.

    1. REPTIL35 dice:

      ESPERO LE SIRVA A ALGUIEN:
      #PROG. QUE GENERA NÚMEROS ENTRE 1 Y UN TOPE DADO POR CONSOLA

      import time
      import random
      texto="PROGRAMA ALEATORIO"
      print()
      print (texto.center(50,"="))
      cant_num=int(input("INGRESE CANTIDAD DE NÚMEROS A GENERAR: "))
      x=int(input("INGRESE TOPE MÁXIMO :"))
      print("TUS NÚMEROS SON:")
      print()
      num=1
      for num in range(1,cant_num+1):
      imprimir=random.randrange(x)
      print(num,"° NÚMERO ",imprimir)
      print()
      num+=1
      time.sleep(10)

    2. seba dice:

      oye man y como puedo hacer para validar un if/else con el numero dado o volver a imprimirlo

  8. Unknown dice:

    Hola, me gustaria saber como puedo generar numeros alfanumericos de manera aleratoria del siguiente tipo: Tamanos fijos de 8, numeros y letras.

    E0IL23X0
    OICO6XI

  9. Anónimo dice:

    El blog muy bueno, lástima que la gente lo agarre para que les hagan sus trabajos y seguir de vagos. Espero que el moderador los anule.

    1. PythonDiario dice:

      Como tu dices; acá no se resuelven tareas. Lo que si hago aveces cuando plantean un ejercicio complejo y que vale la pena desarrollarlo, es crear una nueva entrada con ese ejercicio para que le sirva a todos. Saludos y gracias por visitar el blog!!!

    2. Anónimo dice:

      stfu binch

  10. Anónimo dice:

    hola, existe alguna forma de hacer que con random.choice generar una nueva lista pero que no se repitan los numeros entre si

  11. Anónimo dice:

    Hola soy Esteban estudiante de matemáticas, resulta que hice un programa el cual llame random.py y ahora cuando importo el modulo random me lleva a mi archivo y no al modulo.
    Que puedo hacer?

    1. PythonDiario dice:

      Probaste cambiando el nombre de tu programa? Saludos

  12. Anónimo dice:

    hola y si necesito una posicion aletoria en una matriz de 9*9 por ejemplo?

    1. PythonDiario dice:

      Y si generas un aleatorio para x y otro para y? Saludos

  13. Unknown dice:

    hola si, eso hice pero es que necesito algo mas complejo, este es mi codigo para el primer objeto en mi matriz:
    tablero[random.randint(0,8)][random.randint(0,8)]=random.randint(1,7)
    pero tengo que hacer un juego donde el usuario debe mover el objeto de la matriz, una vez que lo mueva necesito un ciclo donde en un arreglo me indique 3 objetos entre 1 y 7 de los cuales 2 deben ser aleatorios, no iguales, y distintos para cada vez que se repita el ciclo, y el tercer objeto debe ser igual al que esta repetido menos veces en mi matriz, adicionalmente luego de cada turno del usurario necesito un ciclo que me genere 3 posiciones aleatorias distintas y distintas en cada ciclo para ubicar los 3 objetos que esten en mi arreglo, la idea es que no se repitan ,es la primera vez que programo y estoy aprendiendo con python y estoy vuelta un ocho

  14. Anónimo dice:

    Hola, yo tendria que hacer una función que toma una palabra aleatoria de un archivo .txt , no se bien hasta ahora como armar la función, desde ya agradezco ideas. Saludos

    1. PythonDiario dice:

      Se me ocurre que podrias convertir el texto en una lista (cada palabra un elemento de la lista). Luego creas un número aleatorio que va a ser el índice de la lista para seleccionar la palabra. Saludos

    2. Anónimo dice:

      Gacias Diego ! voy a probar con eso.

  15. Anónimo dice:

    Estupendo post y muy útil. Estoy de acuerdo con que es una pena que algunos usuarios no sepan aprovechar la información para aprender, sino para intentar que les hagan su trabajo.

    1. PythonDiario dice:

      Gracias por escribir y valorar la info. Saludo grande 😉

  16. Unknown dice:

    oye cuando quiero que guarde números aleatorios

    1. Ángel MJ dice:

      Justo eso quiero saber...si ya sabes como es, me avisas.

      please.

  17. Unknown dice:

    como importaria una lista creada en el block de notas con random

  18. diendo dice:

    tengo un problema
    Dado un conjunto de datos, ejemplo:
    994,919,815,862,1140,890,865,1120,1170,701,1160,701,901,874,744,742,874,963,1120,1010
    a) Realice un muestreo aleatorio simple con reemplazo con un tamaño de muestra n.

    b) Realice un muestreo aleatorio simple sin reemplazo con un tamaño de muestra n.

    la duda es q no se como ingresar el pseudocodigo para ingresar el tamaño de muestra que tome de la lista ingresada

  19. Tecnología e Informática dice:

    Hola, esta excelente tu explicación, solo me falta averiguar random.seed.. 😀

    1. PythonDiario dice:

      Gracias por visitar el blog!!!

  20. Brujita dice:

    ayuda con esto por favor
    Escriba un programa que soliciute al usuario el nombre de un producto, luego gener un aleatorio de 3 cifras y forme un codigo con las 4 primera letras del nombre unidos al numero generado.
    Ayuda!! solo se que mas o menos inicia asi:
    x=input('Ingrese el nombre del producto:')

  21. Anónimo dice:

    #Programa codigo
    import random
    producto=input("Ingrese el nombre dle producto: " )
    aleatorio=random.randint(1,1000)
    codigo=str(aleatorio)
    producto=producto[0:4]+codigo
    print("Codigo del producto es:",producto)

  22. Unknown dice:

    Buenas ante todo saludos, soy nuevo por aca
    me disculpan si tenia que presentarme en alguna parte del foro, pero no e revisado bien

    tengo un problema con un ejercicio que me mandaron en clases de python

    es el siguiente

    >>>> Hacer un programa que solicice una oracion y divida las palabras en la pantalla con movinientos diferentes de cada palabra <<<<<

    lo estoy haciendo en la pagina de ccodeskulptor.org (una excelente pagina donde puedes hacer tus programas y pasarlos con el link >>>>>

    http://www.codeskulptor.org/#user41_FXiCUyquNL_0.py

    ________________________________________________________________
    Código

    # programa

    import simplegui
    import random

    oracion = ""
    posicion = [75, 75]
    ancho = 1100
    alto = 800
    intervalo = 900

    def update(texto):
    global oracion
    oracion = texto.split()
    def tick():
    x = random.randrange(50, 600)
    y = random.randrange(20, 600)
    posicion[0] = x
    posicion[1] = y
    def draw(canvas):
    canvas.draw_text(str(oracion), posicion, 30, "skyblue")
    frame = simplegui.create_frame("texto", ancho, alto)
    texto = frame.add_input("Escriba su oracion:", update, 150)
    frame.set_draw_handler(draw)
    timer = simplegui.create_timer(intervalo, tick)
    frame.start()
    timer.start()python

    _____________________________________________________________

    como pueden ver ya separe la oracion usando el metdo Split pero no se como hacer para que me muestre las palabras en lugares distintos, con distintos movimientos

    E intentado tomarlo como una lista pero al tratar de usar >> str(oracion(0)) << me dice que no es elegible

  23. Anónimo dice:

    existe una función que me de un numero aleatorio entre un rango, pero con una distribución de probabilidad que yo escoja ?

  24. Unknown dice:

    Perfecto, Gracias

  25. Anónimo dice:

    Hola tengo una pregunta, he intentado hacer este ejercicio por activa y por pasiva y sigo sin saber exactamente como hacerlo, ¿me podrían ayudar?...

    1.- El objetivo de este ejercicio es realizar una función que encuentre una expresión que añade signos + (suma) o - (resta) entre los dígitos 123456789 de manera que la expresión evaluada valga 100.

    Por ejemplo, 1 + 2 + 3 - 4 + 5 + 6 + 78 + 9 = 100 es una posible solución.

    Escribir una función suma_100 sin argumentos que devuelve una lista de números enteros (positivos o negativos) que cumpla las siguientes condiciones:

    La suma de todos sus elementos es 100.
    El resultado de imprimir todos los números en valor absoluto, en el mismo orden y sin ningún espacio entre ellos es la cadena '123456789'.
    La lista no corresponde a la solución de arriba. Es decir, el resultado no es [1,2,3,-4,5,6,78,9].

    1. PythonDiario dice:

      Hola, tienes algo hecho para poder guiarte??
      Saludos y gracias por visitar el blog!!!

  26. Monik dice:

    Hola! Necesitaría saber cómo generar aleatorios entre 80 y 85? Con random.random() va la secuencia entre 0 y 1 por defecto y preciso otro piso y otro techo. Saluds!!!

    1. PythonDiario dice:

      import random

      x = random.randrange(80,86)

      print x

      Saludos!!!

  27. Unknown dice:

    hola
    akguine me ayuda en esto

    La prueba Poker, prueba grupos de números juntos como una mano de poker y compara cada mano con la mano esperada usando la prueba Chi-cuadrada. Esta es una prueba de independencia basada en la frecuencia con que ciertos dígitos se repiten en una serie de números.
    Elabore un script en python que haga lo siguiente:
    Utilizando un metodo para generar numeros aleatorios (de su preferencia), genere 50 numeros aleatorios como minimo (puede ser mucho mas si lo desea, y la vez puede solicitar al usuario que digite la cantidad de numeor a generar). Que puedan ser analizados por el test de poker para verificar si son indedendentes unos de otros.

    1. PythonDiario dice:

      Hola Jonatan, has podido hacer algo en el código? Puedes ponerlo por acá para ayudarte!!!
      Saludos y gracias por visitar el blog!!!

  28. Unknown dice:

    Como puedo hacer para que con random.randint no se repitan los números?

    Gracias! Saludos!

  29. PythonDiario dice:

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-

    import random

    deck = list(range(1, 10))
    random.shuffle(deck)
    while True:
    ----print deck.pop()

  30. Unknown dice:

    Buenas, necesito generar números aleatorios, concretamente dos y que uno me aparezca con distinta probabilidad que el otro. Alguna idea?

  31. Arguez dice:

    Muchas gracias, ahora lo voy entendiendo mejor.

  32. Unknown dice:

    Hola necesito hacer una funcion que devuelva un orden aleatorio de una cantidad de jugadores de un juego.
    Yo lo hice asi pero no me corre.
    Import random

    Def orden_aleatorio()
    Lista=[]
    Print(random.sample(list,len(lista)))

  33. Ángel MJ dice:

    thanks Broth, very helpful....

    Como puedo imprimir un artículo y el precio de dicho artículo?

    tengo muchos artículos y si yo (como usuario) eligiera uno, me gustaría saber como puedo hacer que me diga:usted a elegido 'nombre del ar´ticulo' y el precio de el mismo..

    aiuda, no quiero usar if.

  34. Ángel MJ dice:

    hice un for donde me imprime los artículos y le agregué un contador del 100 en adelante y llega hasta el 250.

    los artículos se imprimen junto al precio en el mismo for...
    quiero saber si puedo usar cada uno de esos números.

  35. Ángel MJ dice:

    mi_lista = ['faldas','pantalones','corbatas','gorras','pelucas','cuadernos','telefonos','mesas','sillas','sabanas','panes','hot dogs','perros','robots','cofres']

    a = 0
    b = 100
    for elementos in mi_lista:
    a+=1
    b+=10
    print (a -1 ,':',elementos)

    posicion = int(input('introduzca un numero'))
    if posicion > 14:
    print ('exede el número de artí­culos del Market')
    else:
    posicion = mi_lista[posicion]
    print ('usted a elegido:', b)

    import random

    #reparar este error
    print ('los',posicion,'cuestan',':', (random.randrange(100,250)))

    tube que probar con el random...pero de igual manera quiero saber si puedo elegir ese número que me imprimió el random.

  36. garri dice:

    Buena info. Gracias

    1. PythonDiario dice:

      Gracias Alberto por visitar el blog. Saludos

  37. Unknown dice:

    Hola! Una pregunta, si deseo separar una palabra por silabas segun las reglas del idioma, deberia tratar las palabras como una lista?

  38. Consultor2014 dice:

    Necesito una ayuda. Necesito un programa en python para iterar a traves de una secuencia de 50 enteros generados aleatoriamente entre 100 y 200 y crear 2 objetos, uno con pares multiplos de 3 y el otro con impares multiplo de 5.

  39. Jesús Lozano dice:

    Podría ayudarme en resolver el sig error que aparece en mi código.
    Tengo una matriz inputs y quiero barajar las filas y guardarla en change pero me aparece lo sig.
    Este es parte de mi código:
    >>> inputs
    array([[41., 43., 45.],
    [42., 44., 46.],
    [43., 45., 47.],
    [44., 46., 48.],
    [45., 47., 49.]])
    >>> change = range(np.shape(inputs)[0])
    >>> np.random.shuffle(change)
    Traceback (most recent call last):
    File "", line 1, in
    np.random.shuffle(change)
    File "mtrand.pyx", line 4865, in mtrand.RandomState.shuffle
    File "mtrand.pyx", line 4868, in mtrand.RandomState.shuffle
    TypeError: 'range' object does not support item assignment

  40. Anónimo dice:

    Quisiera saber cómo realizar la prueba de póker en python

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir

Te has suscrito correctamente al boletín

Se produjo un error al intentar enviar tu solicitud. Inténtalo de nuevo.

Mi Diario Python will use the information you provide on this form to be in touch with you and to provide updates and marketing.