Google+ Seguidores

lunes, 10 de junio de 2013

Modulo random en python con ejemplos

    34

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...



34 comentarios:
Write comentarios
  1. 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!!

    ResponderEliminar
    Respuestas
    1. 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

      Eliminar
    2. 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.

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

    ResponderEliminar
    Respuestas
    1. 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.

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

    ResponderEliminar
  4. 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

    ResponderEliminar
  5. 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

    ResponderEliminar
  6. 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

    ResponderEliminar
  7. 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.

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

    E0IL23X0
    OICO6XI

    ResponderEliminar
  9. 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.

    ResponderEliminar
    Respuestas
    1. 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!!!

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

    ResponderEliminar
  11. 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?

    ResponderEliminar
    Respuestas
    1. Probaste cambiando el nombre de tu programa? Saludos

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

    ResponderEliminar
    Respuestas
    1. Y si generas un aleatorio para x y otro para y? Saludos

      Eliminar
  13. 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

    ResponderEliminar
  14. 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

    ResponderEliminar
    Respuestas
    1. 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

      Eliminar
    2. Gacias Diego ! voy a probar con eso.

      Eliminar
  15. 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.

    ResponderEliminar
    Respuestas
    1. Gracias por escribir y valorar la info. Saludo grande ;)

      Eliminar
  16. oye cuando quiero que guarde números aleatorios

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

    ResponderEliminar
  18. 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

    ResponderEliminar
  19. Hola, esta excelente tu explicación, solo me falta averiguar random.seed.. :D

    ResponderEliminar
  20. 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:')

    ResponderEliminar
  21. #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)

    ResponderEliminar
  22. 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

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

    ResponderEliminar

Tu comentario es importante y nos motiva a seguir escribiendo...

Entradas más recientes

© 2014 Mi diario Python. Designed by Bloggertheme9 | Distributed By Gooyaabi Templates
Powered by Blogger.