Generador de Números de Serie de Soldados

PythonPythonBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este proyecto, aprenderás a implementar una clase de Fábrica de Armas que genere identificadores únicos para los soldados clonados en la fábrica de clones del Imperio Galáctico. La clase de Fábrica de Armas está diseñada como un iterador, lo que te permite generar y administrar fácilmente una secuencia de identificadores únicos.

👀 Vista previa

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

🎯 Tareas

En este proyecto, aprenderás:

  • Cómo crear una clase de iterador personalizada en Python
  • Cómo generar identificadores hexadecimales únicos en secuencia
  • Cómo usar la clase de iterador para generar y administrar una secuencia de identificadores

🏆 Logros

Después de completar este proyecto, podrás:

  • Implementar una clase de iterador personalizada en Python
  • Generar identificadores hexadecimales únicos en secuencia
  • Usar una clase de iterador para administrar una secuencia de identificadores
  • Mejorar la clase de iterador con características adicionales, como la validación de identificadores

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/ObjectOrientedProgrammingGroup(["Object-Oriented Programming"]) python(("Python")) -.-> python/AdvancedTopicsGroup(["Advanced Topics"]) python(("Python")) -.-> python/BasicConceptsGroup(["Basic Concepts"]) python(("Python")) -.-> python/ControlFlowGroup(["Control Flow"]) python/BasicConceptsGroup -.-> python/type_conversion("Type Conversion") python/ControlFlowGroup -.-> python/for_loops("For Loops") python/ObjectOrientedProgrammingGroup -.-> python/classes_objects("Classes and Objects") python/AdvancedTopicsGroup -.-> python/iterators("Iterators") subgraph Lab Skills python/type_conversion -.-> lab-302764{{"Generador de Números de Serie de Soldados"}} python/for_loops -.-> lab-302764{{"Generador de Números de Serie de Soldados"}} python/classes_objects -.-> lab-302764{{"Generador de Números de Serie de Soldados"}} python/iterators -.-> lab-302764{{"Generador de Números de Serie de Soldados"}} end

Implementar la clase WeaponFactory

En este paso, aprenderás a implementar la clase WeaponFactory como una clase iteradora.

  1. Abra el archivo soldier_generator.py en su editor de código.

  2. Defina la clase WeaponFactory con los siguientes requisitos:

    • El método __init__() debe aceptar una cadena como argumento. Este argumento es el ID de inicio de la fábrica de armas.
    • El método __next__() debe generar el siguiente ID en secuencia. El ID generado debe ser una cadena de 8 caracteres hexadecimales.
    • El método __iter__() debe devolver la instancia de WeaponFactory en sí misma, para que la clase se pueda usar como un iterador.

Aquí está el código para la clase 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)

En el método __init__(), inicializamos el atributo current_id convirtiendo la cadena start_id a un entero usando la función int() con una base de 16 (hexadecimal).

En el método __next__(), generamos el siguiente ID convirtiendo el current_id a una cadena hexadecimal usando la función hex(), y luego eliminando el prefijo '0x' usando la segmentación [2:]. Luego incrementamos el current_id en 1. Finalmente, usamos el método zfill() para asegurarnos de que la cadena de ID siempre tenga 8 caracteres de longitud, rellenada con ceros a la izquierda si es necesario.

El método __iter__() simplemente devuelve la instancia de WeaponFactory en sí misma, para que la clase se pueda usar como un iterador.

Probar la clase WeaponFactory

Ahora que has implementado la clase WeaponFactory, probémosla para asegurarnos de que funciona como se espera.

  1. Agregue el siguiente código al bloque if __name__ == "__main__": en el archivo soldier_generator.py:
wf = WeaponFactory("1000face")
print("------test1-------")
print(next(wf))   ## Output: '1000face'
print(next(wf))   ## Output: '1000facf'
print(next(wf))   ## Output: '1000fad0'

count = 0
max_count = 10
print("------test2-------")
for id in WeaponFactory("1000f000"):
    print(id)
    count += 1
    if count > max_count:
        break
  1. Guarde el archivo soldier_generator.py y ejecute el script:
python3 soldier_generator.py

La salida debe ser:

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

Esto confirma que la clase WeaponFactory está funcionando como se espera, generando el siguiente ID en secuencia cuando se llama al método __next__(), y iterando sobre los IDs cuando se usa como un iterador.

✨ Revisar Solución y Practicar

Resumen

¡Felicidades! Has completado este proyecto. Puedes practicar más laboratorios en LabEx para mejorar tus habilidades.