Soldaten-Seriennummer-Generator

PythonPythonBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

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.

✨ Lösung prüfen und üben

Zusammenfassung

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