Inicio Apuntes FPApuntes DAMAcceso a Datos Generar números aleatorios sin repetición con Python

Generar números aleatorios sin repetición con Python

Crea una combinación para jugar a Euromillones

Publicado por entreunosyceros

AVISO: Esta entrada tiene más de dos años desde su publicación. Es posible que el contenido esté desactualizado.

Una vez más aquí. Hoy vengo a dejar un pequeño artículo por que estos días me han enviado un correo electrónico en el que me han pedido una alternativa en Python del artículo Generar números aleatorios sin repeticiones con PHP. Este artículo lo escribí hace ya unos cuantos años, por eso me decidí a crear una nueva versión, y de paso echar una mano al usuari@ que lo necesita.

El código que vamos a ver en las siguientes líneas, es un pequeño programa de Python. En el vamos a utilizar la biblioteca gráfica tkinter para crear una interfaz de usuario simple, con la que generar números aleatorios únicos para el sorteo de Euromillones.

El código para crear un generador de números aleatorios sin repetición con Python

Generador de números aleatorios sin repetición con Python
import random
import tkinter as tk

# crea una ventana
ventana = tk.Tk()

# establece el título de la ventana
ventana.title("Generador de números aleatorios para Euromillones con Python")

# tamaño de la ventana
ventana.geometry("500x300")

# crea una fuente en negrita para el texto
font_negrita = ("TkDefaultFont", 12, "bold")

# crea dos widgets Label y muestra los números generados y los números aleatorios
texto_numeros = tk.Label(ventana, text="Los números son:", font=font_negrita)
texto_numeros.pack(pady=10)

canvas_numeros = tk.Canvas(ventana, width=300, height=80)
canvas_numeros.pack(pady=10)

texto_estrellas = tk.Label(ventana, text="Las estrellas son:", font=font_negrita)
texto_estrellas.pack(pady=5)

canvas_estrellas = tk.Canvas(ventana, width=100, height=80)
canvas_estrellas.pack(pady=5)

# función para dibujar los círculos de las estrellas
def dibujar_estrellas(estrellas):
    canvas_estrellas.delete("all")
    x = 10
    for i in range(2):
        color = "Blue"
        canvas_estrellas.create_oval(x, 5, x+30, 35, width=2, fill=color)  # cambiar tamaño de círculo
        canvas_estrellas.create_text(x+15, 20, text=str(estrellas[i]), fill="white")  # centrar texto en círculo
        x += 40
        

# función para dibujar los círculos de los números
def dibujar_numeros(numeros):
    canvas_numeros.delete("all")
    x = 30
    y = 30
    for num in numeros:
        canvas_numeros.create_oval(x-20, y-20, x+20, y+20, width=2, fill="yellow")
        canvas_numeros.create_text(x, y, text=str(num), font=font_negrita)
        x += 60
        if x > 270:
            x = 30
            y += 60

# genera 5 números aleatorios únicos entre 1 y 50
def generar_numeros():
    numeros_generados = random.sample(range(1, 51), 5)
    numeros_generados.sort()

    # genera dos números aleatorios únicos entre 1 y 12 para las estrellas
    estrellas = random.sample(range(1, 13), 2)
    estrellas.sort()

    # actualiza las etiquetas de texto con los nuevos números y estrellas
    dibujar_numeros(numeros_generados)
    dibujar_estrellas(estrellas)

# genera los números y estrellas por primera vez
generar_numeros()

# crea un botón para generar nuevos números
boton_generar = tk.Button(ventana, text="Generar nuevos números", command=generar_numeros)
boton_generar.pack(anchor="center", expand=True)

# muestra la ventana
ventana.mainloop()

Una breve explicación del código

Comenzando por las importaciones, el código comienza importando dos bibliotecas: «random» y «tkinter«. La biblioteca «random» se utiliza para generar números aleatorios y la biblioteca «tkinter» se utiliza para crear la interfaz de usuario. Esta última biblioteca se abrevia a menudo como «tk» para facilitar su uso en el código.

La siguiente línea de código crea una ventana utilizando la clase Tk() de la biblioteca tkinter:

ventana = tk.Tk()

El siguiente paso es establecer el título de la ventana utilizando la función «title()«. Para este ejemplo, el título es «Generador de números aleatorios para Euromillones con Python«.

ventana.title("Generador de números aleatorios para Euromillones con Python")

A continuación, se establece el tamaño de la ventana utilizando la función «geometry()«. En este caso, la ventana tendrá un tamaño de 500 píxeles de ancho por 300 píxeles de alto.

ventana.geometry("500x300")

Después se define una fuente en negrita para el texto en la interfaz de usuario utilizando la variable «font_negrita». Esta variable define la fuente «TkDefaultFont» con un tamaño de 12 y un estilo en negrita.

font_negrita = ("TkDefaultFont", 12, "bold")

A continuación se crean dos etiquetas de texto utilizando la clase «Label» de tkinter. La primera etiqueta, «texto_numeros«, muestra el mensaje «Los números son:«. La segunda etiqueta, «texto_estrellas«, muestra el mensaje «Las estrellas son:«. Ambas etiquetas se definen con la fuente en negrita creada anteriormente y se ajustan en la ventana utilizando la función «pack()» de tkinter.

texto_numeros.pack(pady=10) 

texto_estrellas = tk.Label(ventana, text="Las estrellas son:", font=font_negrita) 

texto_estrellas.pack(pady=5)

A continuación, se crean dos «Canvas» utilizando la clase «Canvas» de tkinter. Hay que decir que un «Canvas» es un widget de tkinter que se utiliza para dibujar gráficos y formas en una ventana. El primer «Canvas«, «canvas_numeros«, se utiliza para dibujar los números aleatorios generados y el segundo «Canvas«, «canvas_estrellas«, se utiliza para dibujar las estrellas generadas. Ambos «Canvas» se ajustan en la ventana utilizando la función «pack()» de tkinter.

canvas_numeros = tk.Canvas(ventana, width=300, height=80) 

canvas_numeros.pack(pady=10) 

canvas_estrellas = tk.Canvas(ventana, width=100, height=80) 

canvas_estrellas.pack(pady=5)

Después, se definen dos funciones para dibujar los círculos de las estrellas y los números en los «Canvas» correspondientes.

La función dibujar_estrellas(estrellas) borra todo el contenido del canvas de las estrellas con el método delete("all") y luego dibuja dos círculos azules con el método create_oval. Los valores de posición y tamaño de los círculos se definen en la función con variables. Luego, se añade un número en cada círculo utilizando el método create_text, el cual recibe como parámetro la posición x e y del texto y el valor del número como string.

La función dibujar_numeros(numeros) también borra todo el contenido del canvas de los números con el método delete("all"). Luego, itera sobre cada número en la lista de números generados y dibuja un círculo amarillo y el número correspondiente utilizando los métodos create_oval y create_text, respectivamente. También se utilizan variables para definir la posición y tamaño de los círculos.

Finalmente, se define una función generar_numeros() que utiliza la librería random para generar 5 números aleatorios únicos entre 1 y 50 utilizando el método sample. Luego, genera dos números aleatorios únicos entre 1 y 12 para las estrellas. Estas dos listas son ordenadas en orden ascendente con el método sort(). Luego, se actualizan las etiquetas de texto con los nuevos números y estrellas utilizando las funciones dibujar_numeros(numeros_generados) y dibujar_estrellas(estrellas) respectivamente.

Por último, se crea un botón que llama a la función generar_numeros() cada vez que es presionado y se muestra la ventana con el método mainloop().

En resumen, este código utiliza la librería tkinter de Python para crear una ventana que muestra números y estrellas generados aleatoriamente con los que poder jugar al sorteo de Euromillones. Esto no garantiza ni más ni menos posibilidades de que toque un premio. Tan solo es otra forma de crear un listado de números con Python, como me ha pedido el usuari@ por correo. Eso si, si a alguien le toca, que sepa que yo acepto donaciones a la causa …

También te puede interesar ...

Deja un comentario

* Al utilizar este formulario, aceptas que este sitio web almacene y maneje tus datos.

Resumen de privacidad
cookies entreunosyceros

Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible.

La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudarnos a comprender qué secciones de la web encuentras más interesantes y útiles.

Nunca almacenamos información personal de ningún tipo.

Tienes toda la información sobre privacidad, derechos legales y cookies en nuestra página sobre la política de privacidad o en la página sobre nuestra política de cookies.

Cookies necesarias

Las cookies estrictamente necesarias tiene que activarse siempre para que podamos guardar tus preferencias de ajustes de cookies.

Si desactivas esta cookie no podremos guardar tus preferencias. Esto significa que cada vez que visites esta web tendrás que activar o desactivar las cookies de nuevo.

Cookies de terceros

Esta web utiliza las siguientes cookies adicionales:

- Mailchimp: Recordar si ya estás suscrito al boletín de noticias y sino ofrecértelo al salir.

- Accesibilidad: Para saber tus ajustes de accesibilidad en cada visita.

- Comentarios: Saber si has leído y aceptado nuestra política de privacidad a la hora de dejar un comentario en la web.

- Google Analytics: Localización para recopilar información anónima tal como el número de visitantes del sitio, o las páginas más populares.

- Goggle Adsense: Anuncios personalizados según tu geolocalización y preferencias.

Dejar estas cookies activadas nos permite mejorar nuestra web.

Adblock Detectado!!

Ayúdanos deshabilitando la extensión AdBlocker de tu navegador para visitar esta web.
Si no sabes hacerlo en Chrome, consulta el siguiente enlace. Si utilizas Firefox, puedes consultar este otro enlace.
Esto mejorará tu experiencia en este sitio web.