Soldaten-Seriennummer-Generator

PythonBeginner
Jetzt üben

Einführung

In diesem Projekt lernst du, wie du eine Waffenfabrik-Klasse implementierst, die einzigartige IDs für Klonsoldaten in der Klonfabrik des Galaktischen Reiches generiert. Die Waffenfabrik-Klasse ist als Iterator entworfen, was es dir ermöglicht, eine Sequenz von einzigartigen IDs leicht zu generieren und zu verwalten.

👀 Vorschau

------test1-------
1000face
1000facf
1000fad0
------test2-------
1000f000
1000f001
1000f002
1000f003
1000f004
1000f005
1000f006
1000f007
1000f008
1000f009
1000f00a

🎯 Aufgaben

In diesem Projekt wirst du lernen:

  • Wie du eine benutzerdefinierte Iterator-Klasse in Python erstellst
  • Wie du sequentiell einzigartige hexadezimale IDs generierst
  • Wie du die Iterator-Klasse verwendest, um eine Sequenz von IDs zu generieren und zu verwalten

🏆 Errungenschaften

Nach Abschluss dieses Projekts wirst du in der Lage sein:

  • Eine benutzerdefinierte Iterator-Klasse in Python zu implementieren
  • Sequentiell einzigartige hexadezimale IDs zu generieren
  • Eine Iterator-Klasse verwenden, um eine Sequenz von IDs zu verwalten
  • Die Iterator-Klasse um zusätzliche Funktionen wie z. B. ID-Validierung zu erweitern

Implementiere die Waffenfabrik-Klasse

In diesem Schritt lernst du, wie du die Waffenfabrik-Klasse als Iterator-Klasse implementierst.

  1. Öffne die Datei soldier_generator.py in deinem Code-Editor.
  2. Definiere die Waffenfabrik-Klasse mit den folgenden Anforderungen:
    • Die __init__()-Methode sollte einen String als Argument akzeptieren. Dieses Argument ist die Start-ID der Waffenfabrik.
    • Die __next__()-Methode sollte die nächste ID in der Sequenz generieren. Die generierte ID sollte ein String aus 8 hexadezimalen Zeichen sein.
    • Die __iter__()-Methode sollte die Waffenfabrik-Instanz selbst zurückgeben, sodass die Klasse als Iterator verwendet werden kann.

Hier ist der Code für die Waffenfabrik-Klasse:

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)

In der __init__()-Methode initialisieren wir das Attribut current_id, indem wir die start_id-Zeichenfolge mit der int()-Funktion in eine Ganzzahl umwandeln, wobei die Basis 16 (hexadezimal) ist.

In der __next__()-Methode generieren wir die nächste ID, indem wir die current_id mit der hex()-Funktion in einen hexadezimalen String umwandeln und dann das führende '0x' mit dem Slicing [2:] entfernen. Danach erhöhen wir die current_id um 1. Schließlich verwenden wir die zfill()-Methode, um sicherzustellen, dass die ID-Zeichenfolge immer 8 Zeichen lang ist und bei Bedarf mit führenden Nullen aufgefüllt wird.

Die __iter__()-Methode gibt einfach die Waffenfabrik-Instanz selbst zurück, sodass die Klasse als Iterator verwendet werden kann.

Teste die Waffenfabrik-Klasse

Jetzt, da du die Waffenfabrik-Klasse implementiert hast, testen wir sie, um sicherzustellen, dass sie wie erwartet funktioniert.

  1. Füge den folgenden Code in den if __name__ == "__main__":-Block in der soldier_generator.py-Datei hinzu:
wf = WeaponFactory("1000face")
print("------test1-------")
print(next(wf))   ## Ausgabe: '1000face'
print(next(wf))   ## Ausgabe: '1000facf'
print(next(wf))   ## Ausgabe: '1000fad0'

count = 0
max_count = 10
print("------test2-------")
for id in WeaponFactory("1000f000"):
    print(id)
    count += 1
    if count > max_count:
        break
  1. Speichere die soldier_generator.py-Datei und führe das Skript aus:
python3 soldier_generator.py

Die Ausgabe sollte wie folgt sein:

------test1-------
1000face
1000facf
1000fad0
------test2-------
1000f000
1000f001
1000f002
1000f003
1000f004
1000f005
1000f006
1000f007
1000f008
1000f009
1000f00a

Dies bestätigt, dass die Waffenfabrik-Klasse wie erwartet funktioniert, die nächste ID in der Sequenz generiert, wenn die __next__()-Methode aufgerufen wird, und über die IDs iteriert, wenn als Iterator verwendet.

Zusammenfassung

Herzlichen Glückwunsch! Du hast dieses Projekt abgeschlossen. Du kannst in LabEx weitere Labs absolvieren, um deine Fähigkeiten zu verbessern.

✨ Lösung prüfen und üben✨ Lösung prüfen und üben