La Lotería es un juego tradicional mexicano parecido al juego de Bingo.
En este juego, en lugar de números se sacan tarjetas con diferentes personajes u objetos como una campana, la muerte o un borracho.
Al inicio del juego se reparten cartas con pictogramas distribuidos de manera aleatoria. El jugador debe marcar lo que aparece en su carta. Gana el jugador que marca su carta completa.
Algunos conceptos importantes:
- Mazo. Es el conjunto de todas las cartas individuales.
- Carta. Cada carta tiene una imagen y su nombre. Por ejemplo: El valiente.
- Tabla. Cada jugador tiene una tabla con 16 cartas aleatorias que debe de llenar conforme el gritón las menciona.
- El gritón. Es la persona encargada de dar a conocer la siguiente carta a todos los jugadores.
Para comenzar, invocamos los módulos.
import pandas as pd
import random
Con pandas
ahora tienes el poder de crear y manipular bases de datos.
Con pandas
puedes cargar datos desde archivos csv
o Excel, visualizarlo, quitar filas, cambiar columnas y hacer lo que sea con tus datos. Como nuestro proyecto es una lotería, vamos a necesitar números aleatorios, que son la especialidad del módulo random
.
Comencemos a incluir las cartas en una lista.
cartas = ["La maceta", "El borracho", "La campana", "El catrin", "El violoncello","La sandia", "La chalupa", "El gorrito", "El arpa", "El camaron", "El barril", "La dama", "La bota", "El pajaro", "El melon", "El cotorro", "La palma", "El mundo", "El apache", "El pescado", "La muerte", "El alacran", "El gallo", "La calavera"]
Los conocedores de la lotería se podrán dar cuenta de que me faltó poner algunas cartas.
No es problema. Podemos incluír las cartas que nos faltan más adelante. Usemos la función append()
para agregar la carte de "El diablito" a nuestro mazo de cartas. También podemos usar extend()
para agregar más elementos al mazo desde otra lista.
# Con append podemos agregar un elemento adicional que nos faltaba
cartas.append("El diablito")
# Con extend podemos agregar los elementos de una lista a otra
cartas.extend(["El valiente", "La corona", "El barril"])
# Con print() mostramos
print(cartas)
Con esta lista ya podemos repartir las tablas.
Una tabla de lotería tiene 16 cartas: cuatro a lo ancho y cuatro a lo largo. Usa pandas
para crear un DataFrame para la tabla de cada jugador. Este DataFrame tendrá 16 cartas únicas del mazo y una columna adicional para marcar las cartas.
deck_df = pd.DataFrame(cartas, columns=['Carta'])
def crear_tabla(deck_df):
tabla = deck_df.sample(16).reset_index(drop=True)
tabla['Marcada'] = False # Add a new column for marking the cards
return tabla
# Example of creating a table for a player
tabla_jugador = crear_tabla(deck_df)
print("Tabla del Jugador:")
print(tabla_jugador)
Esta función crear_tabla toma la lista de cartas y utiliza random.sample para seleccionar 16 cartas únicas de esa lista. random.sample es útil porque automáticamente se asegura de que no haya duplicados en la selección.
Cantar las cartas
Ahora que tenemos las tablas, necesitamos una forma de "cantar" las cartas y que los jugadores revisen sus tablas.
Podemos hacer esto con otra función muy sencilla. Hemos creado canta_carta()
, que selecciona una carta del mazo de forma aleatoria.
Este código tiene un error. Normalmente cuando el “gritón” canta las cartas de lotería, ya no las reemplaza en el mazo y no volverán a salir. Para solucionar esto tendríamos que hacer que se elimine el elemento de la carta, pero dejaremos esto como ejercicio al lector.
def cantar_carta(deck_df):
return deck_df.sample().iloc[0]['Carta']
# Example of drawing a card
carta_cantada = cantar_carta(deck_df)
print("Carta Cantada:", carta_cantada)
Esta función selecciona una carta al azar de la lista de cartas. Cada vez que se llama a la función, simula al "gritón" cantando una nueva carta.
Marcando las Cartas
El Data Frame tabla_jugador
tiene dos columnas. La primera tiene nuestras cartas y la segunda nos ayuda a marcar si el gritón ya dijo nuestra carta. Es nuestra columna de frijolitos.
En la siguiente función primero se verifica si la carta cantada está en nuestra tabla. Lo hacemos con la palabra clave if
, que cambia el elemento de la segunda columna a True
si la tenemos.
def marcar_carta(tabla, carta_cantada):
if carta_cantada in tabla['Carta'].values:
tabla.loc[tabla['Carta'] == carta_cantada, 'Marcada'] = True
print("¡Carta marcada!")
else:
print("Esta carta no está en tu tabla.")
# Example of marking a card
marcar_carta(tabla_jugador, carta_cantada)
print(tabla_jugador)
De lo contrario, el sistema simplemente nos dirá que la carta no está en nuestra tabla y podemos volver a pedir al gritón que cante.
Verificando el Ganador
La función all()
verifica si todos los valores en la columna “Marcada” tiene valor verdadero.
def verificar_ganador(tabla):
return all(tabla['Marcada'])
# Example of checking for a winner
if verificar_ganador(tabla_jugador):
print("¡Felicidades, has ganado!")
else:
print("Sigue jugando.")
Cuando tu tabla tiene todas las cartas marcadas, haz ganado.
El programa completo
Intenta hacer este ejercicio por tu cuenta.
Hazlo a conciencia y trata de ponerle tus propias modificaciones. Este ejercicio está diseñado para practicar el uso de pandas
para hacer y manipular tablas con python.
Aquí te dejo el notebook con el código completo que puedes correr directamente en Google Colab.