Créer une fonction réutilisable de génération de numéros de loterie
Maintenant que nous savons comment générer des nombres aléatoires uniques, créons une fonction réutilisable pour notre générateur de numéros de loterie. Cela rendra notre code plus organisé et nous permettra de générer facilement des numéros pour différents formats de loterie.
Créer un fichier de fonctions
Créons un nouveau fichier avec nos fonctions de loterie :
- Dans le WebIDE, accédez au répertoire
~/project/lottery
- Créez un nouveau fichier appelé
lottery_functions.py
Ajoutez le code suivant pour définir notre fonction de génération de numéros de loterie :
import random
def generate_lottery_numbers(count, min_num, max_num):
"""
Génère un nombre spécifié de nombres aléatoires uniques dans une plage donnée.
Args:
count (int): Nombre de nombres uniques à générer
min_num (int): Valeur minimale (inclusive)
max_num (int): Valeur maximale (inclusive)
Returns:
list: Liste triée de nombres aléatoires uniques
"""
## 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():
"""
Génère des numéros pour la loterie Powerball (5 numéros de 1 à 69 et 1 de 1 à 26).
Returns:
tuple: (liste des numéros principaux, numéro Powerball)
"""
main_numbers = generate_lottery_numbers(5, 1, 69)
powerball = random.randint(1, 26)
return (main_numbers, powerball)
def generate_mega_millions_numbers():
"""
Génère des numéros pour la loterie Mega Millions (5 numéros de 1 à 70 et 1 de 1 à 25).
Returns:
tuple: (liste des numéros principaux, numéro Mega Ball)
"""
main_numbers = generate_lottery_numbers(5, 1, 70)
mega_ball = random.randint(1, 25)
return (main_numbers, mega_ball)
Maintenant, créons un fichier pour tester nos fonctions :
- Dans le WebIDE, créez un nouveau fichier appelé
test_lottery_functions.py
Ajoutez le code suivant pour tester nos fonctions :
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}")
Exécutez le fichier de test pour voir nos fonctions en action :
cd ~/project/lottery
python3 test_lottery_functions.py
Vous devriez voir une sortie similaire à :
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
Avantages de l'utilisation de fonctions
En créant ces fonctions réutilisables, nous avons atteint plusieurs objectifs de programmation importants :
- Réutilisabilité du code : Nous pouvons générer des numéros de loterie n'importe où dans notre programme sans dupliquer le code.
- Validation des entrées : Notre fonction vérifie si le nombre de valeurs uniques demandé est possible dans la plage donnée.
- Abstraction : Nous avons masqué les détails de l'implémentation à l'intérieur de fonctions avec des noms descriptifs.
- Fonctions spécialisées : Nous avons créé des fonctions spécifiques pour les formats de loterie courants.
Cette approche modulaire rend notre code plus maintenable et plus facile à comprendre. Dans la prochaine étape, nous utiliserons ces fonctions pour créer une application de loterie complète avec une interface utilisateur.