Introduction
Dans ce projet, vous allez apprendre à implémenter une classe Weapon Factory qui génère des IDs uniques pour les soldats clones dans l'usine à clones de l'Empire Galactique. La classe Weapon Factory est conçue comme un itérateur, vous permettant de générer et de gérer facilement une séquence d'IDs uniques.
👀 Aperçu
------test1-------
1000face
1000facf
1000fad0
------test2-------
1000f000
1000f001
1000f002
1000f003
1000f004
1000f005
1000f006
1000f007
1000f008
1000f009
1000f00a
🎯 Tâches
Dans ce projet, vous allez apprendre :
- Comment créer une classe itérateur personnalisée en Python
- Comment générer des IDs hexadécimaux uniques séquentiellement
- Comment utiliser la classe itérateur pour générer et gérer une séquence d'IDs
🏆 Réalisations
Après avoir terminé ce projet, vous serez capable de :
- Implémenter une classe itérateur personnalisée en Python
- Générer des IDs hexadécimaux uniques séquentiellement
- Utiliser une classe itérateur pour gérer une séquence d'IDs
- Améliorer la classe itérateur avec des fonctionnalités supplémentaires, telles que la validation d'ID
Implémentez la classe WeaponFactory
Dans cette étape, vous allez apprendre à implémenter la classe WeaponFactory en tant que classe itératrice.
- Ouvrez le fichier
soldier_generator.pydans votre éditeur de code. - Définissez la classe
WeaponFactoryavec les exigences suivantes :- La méthode
__init__()doit accepter une chaîne de caractères en tant qu'argument. Cet argument est l'ID de départ de l'usine d'armes. - La méthode
__next__()doit générer le prochain ID dans la séquence. L'ID généré doit être une chaîne de 8 caractères hexadécimaux. - La méthode
__iter__()doit renvoyer l'instanceWeaponFactoryelle-même, de sorte que la classe puisse être utilisée comme itérateur.
- La méthode
Voici le code pour la classe WeaponFactory :
class WeaponFactory:
def __init__(self, start_id):
self.current_id = int(start_id, 16)
def __iter__(self):
return self
def __next__(self):
hex_id = hex(self.current_id)[2:]
self.current_id += 1
return hex_id.zfill(8)
Dans la méthode __init__(), nous initialisons l'attribut current_id en convertissant la chaîne start_id en un entier en utilisant la fonction int() avec une base de 16 (hexadécimale).
Dans la méthode __next__(), nous générons le prochain ID en convertissant le current_id en une chaîne hexadécimale en utilisant la fonction hex(), puis en supprimant le préfixe '0x' en utilisant le découpage [2:]. Nous incrémentons ensuite le current_id de 1. Enfin, nous utilisons la méthode zfill() pour vous assurer que la chaîne d'ID est toujours de 8 caractères de long, avec des zéros ajoutés au début si nécessaire.
La méthode __iter__() renvoie simplement l'instance WeaponFactory elle-même, de sorte que la classe puisse être utilisée comme itérateur.
Testez la classe WeaponFactory
Maintenant que vous avez implémenté la classe WeaponFactory, testons-la pour vous assurer qu'elle fonctionne comme prévu.
- Ajoutez le code suivant au bloc
if __name__ == "__main__":dans le fichiersoldier_generator.py:
wf = WeaponFactory("1000face")
print("------test1-------")
print(next(wf)) ## Sortie : '1000face'
print(next(wf)) ## Sortie : '1000facf'
print(next(wf)) ## Sortie : '1000fad0'
count = 0
max_count = 10
print("------test2-------")
for id in WeaponFactory("1000f000"):
print(id)
count += 1
if count > max_count:
break
- Enregistrez le fichier
soldier_generator.pyet exécutez le script :
python3 soldier_generator.py
La sortie devrait être :
------test1-------
1000face
1000facf
1000fad0
------test2-------
1000f000
1000f001
1000f002
1000f003
1000f004
1000f005
1000f006
1000f007
1000f008
1000f009
1000f00a
Cela confirme que la classe WeaponFactory fonctionne comme prévu, en générant le prochain ID dans la séquence lorsqu'on appelle la méthode __next__(), et en itérant sur les IDs lorsqu'elle est utilisée comme itérateur.
Résumé
Félicitations ! Vous avez terminé ce projet. Vous pouvez pratiquer plus de laboratoires sur LabEx pour améliorer vos compétences.



