Criando uma Função Reutilizável para Gerador de Números de Loteria
Agora que entendemos como gerar números aleatórios únicos, vamos criar uma função reutilizável para nosso gerador de números de loteria. Isso tornará nosso código mais organizado e nos permitirá gerar facilmente números para diferentes formatos de loteria.
Criando um Arquivo de Funções
Vamos criar um novo arquivo com nossas funções de loteria:
- Na WebIDE, navegue até o diretório
~/project/lottery
- Crie um novo arquivo chamado
lottery_functions.py
Adicione o seguinte código para definir nossa função geradora de números de loteria:
import random
def generate_lottery_numbers(count, min_num, max_num):
"""
Gera uma contagem especificada de números aleatórios únicos dentro de um determinado intervalo.
Args:
count (int): Número de números únicos a serem gerados
min_num (int): Valor mínimo (inclusive)
max_num (int): Valor máximo (inclusive)
Returns:
list: Lista ordenada de números aleatórios únicos
"""
## 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():
"""
Gera números para a loteria Powerball (5 números de 1-69 e 1 de 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():
"""
Gera números para a loteria Mega Millions (5 números de 1-70 e 1 de 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)
Agora, vamos criar um arquivo para testar nossas funções:
- Na WebIDE, crie um novo arquivo chamado
test_lottery_functions.py
Adicione o seguinte código para testar nossas funções:
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}")
Execute o arquivo de teste para ver nossas funções em ação:
cd ~/project/lottery
python3 test_lottery_functions.py
Você deve ver uma saída semelhante 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
Benefícios de Usar Funções
Ao criar essas funções reutilizáveis, alcançamos vários objetivos importantes de programação:
- Reutilização de Código: Podemos gerar números de loteria em qualquer lugar do nosso programa sem duplicar código
- Validação de Entrada: Nossa função verifica se o número solicitado de valores únicos é possível no intervalo fornecido
- Abstração: Escondemos os detalhes de implementação dentro de funções com nomes descritivos
- Funções Especializadas: Criamos funções específicas para formatos de loteria comuns
Essa abordagem modular torna nosso código mais fácil de manter e entender. Na próxima etapa, usaremos essas funções para criar uma aplicação de loteria completa com uma interface de usuário.