Creando una Función Reutilizable para Generar Números de Lotería
Ahora que entendemos cómo generar números aleatorios únicos, creemos una función reutilizable para nuestro generador de números de lotería. Esto hará que nuestro código esté más organizado y nos permitirá generar fácilmente números para diferentes formatos de lotería.
Creando un Archivo de Funciones
Creemos un nuevo archivo con nuestras funciones de lotería:
- En el WebIDE, navega al directorio
~/project/lottery
- Crea un nuevo archivo llamado
lottery_functions.py
Agrega el siguiente código para definir nuestra función generadora de números de lotería:
import random
def generate_lottery_numbers(count, min_num, max_num):
"""
Generate a specified count of unique random numbers within a given range.
Args:
count (int): Number of unique numbers to generate
min_num (int): Minimum value (inclusive)
max_num (int): Maximum value (inclusive)
Returns:
list: Sorted list of unique random numbers
"""
## Validate inputs
if count > (max_num - min_num + 1):
raise ValueError(f"Cannot generate {count} unique numbers in range {min_num}-{max_num}")
## Generate unique random numbers
numbers = random.sample(range(min_num, max_num + 1), count)
## Sort the numbers
numbers.sort()
return numbers
def generate_powerball_numbers():
"""
Generate numbers for Powerball lottery (5 numbers from 1-69 and 1 from 1-26).
Returns:
tuple: (list of main numbers, powerball number)
"""
main_numbers = generate_lottery_numbers(5, 1, 69)
powerball = random.randint(1, 26)
return (main_numbers, powerball)
def generate_mega_millions_numbers():
"""
Generate numbers for Mega Millions lottery (5 numbers from 1-70 and 1 from 1-25).
Returns:
tuple: (list of main numbers, mega ball number)
"""
main_numbers = generate_lottery_numbers(5, 1, 70)
mega_ball = random.randint(1, 25)
return (main_numbers, mega_ball)
Ahora, creemos un archivo para probar nuestras funciones:
- En el WebIDE, crea un nuevo archivo llamado
test_lottery_functions.py
Agrega el siguiente código para probar nuestras funciones:
import lottery_functions
## Test standard lottery function (e.g., 6 numbers from a range of 1-49)
standard_lottery = lottery_functions.generate_lottery_numbers(6, 1, 49)
print(f"Standard lottery (6 from 1-49): {standard_lottery}")
## Test Powerball function
main_numbers, powerball = lottery_functions.generate_powerball_numbers()
print(f"Powerball: Main numbers: {main_numbers}, Powerball: {powerball}")
## Test Mega Millions function
main_numbers, mega_ball = lottery_functions.generate_mega_millions_numbers()
print(f"Mega Millions: Main numbers: {main_numbers}, Mega Ball: {mega_ball}")
## Test with different parameters
custom_lottery = lottery_functions.generate_lottery_numbers(4, 1, 20)
print(f"Custom lottery (4 from 1-20): {custom_lottery}")
## Test error handling - Try to generate too many numbers
try:
## Trying to get 10 numbers from a range of only 5 numbers (impossible)
impossible_lottery = lottery_functions.generate_lottery_numbers(10, 1, 5)
except ValueError as e:
print(f"Error caught successfully: {e}")
Ejecuta el archivo de prueba para ver nuestras funciones en acción:
cd ~/project/lottery
python3 test_lottery_functions.py
Deberías ver una salida similar a:
Standard lottery (6 from 1-49): [4, 17, 23, 26, 39, 48]
Powerball: Main numbers: [3, 18, 27, 42, 61], Powerball: 13
Mega Millions: Main numbers: [7, 24, 31, 52, 67], Mega Ball: 9
Custom lottery (4 from 1-20): [2, 9, 15, 19]
Error caught successfully: Cannot generate 10 unique numbers in range 1-5
Beneficios de Usar Funciones
Al crear estas funciones reutilizables, hemos logrado varios objetivos de programación importantes:
- Reutilización de Código: Podemos generar números de lotería en cualquier lugar de nuestro programa sin duplicar código.
- Validación de Entrada: Nuestra función verifica si la cantidad solicitada de valores únicos es posible en el rango dado.
- Abstracción: Hemos ocultado los detalles de implementación dentro de funciones con nombres descriptivos.
- Funciones Especializadas: Hemos creado funciones específicas para formatos de lotería comunes.
Este enfoque modular hace que nuestro código sea más mantenible y fácil de entender. En el siguiente paso, usaremos estas funciones para crear una aplicación de lotería completa con una interfaz de usuario.