Gerador de Números de Série de Soldados

PythonBeginner
Pratique Agora

Introdução

Neste projeto, você aprenderá como implementar uma classe Weapon Factory (Fábrica de Armas) que gera IDs únicos para soldados clones na fábrica de clones do Império Galáctico. A classe Weapon Factory é projetada como um iterador, permitindo que você gere e gerencie facilmente uma sequência de IDs únicos.

👀 Pré-visualização

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

🎯 Tarefas

Neste projeto, você aprenderá:

  • Como criar uma classe iteradora personalizada em Python
  • Como gerar IDs hexadecimais únicos em sequência
  • Como usar a classe iteradora para gerar e gerenciar uma sequência de IDs

🏆 Conquistas

Após concluir este projeto, você será capaz de:

  • Implementar uma classe iteradora personalizada em Python
  • Gerar IDs hexadecimais únicos em sequência
  • Usar uma classe iteradora para gerenciar uma sequência de IDs
  • Aprimorar a classe iteradora com recursos adicionais, como validação de ID

Implementar a Classe WeaponFactory

Nesta etapa, você aprenderá como implementar a classe WeaponFactory como uma classe iteradora.

  1. Abra o arquivo soldier_generator.py no seu editor de código.
  2. Defina a classe WeaponFactory com os seguintes requisitos:
    • O método __init__() deve aceitar uma string como argumento. Este argumento é o ID inicial da fábrica de armas.
    • O método __next__() deve gerar o próximo ID na sequência. O ID gerado deve ser uma string de 8 caracteres hexadecimais.
    • O método __iter__() deve retornar a própria instância WeaponFactory, para que a classe possa ser usada como um iterador.

Aqui está o código para a 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)

No método __init__(), inicializamos o atributo current_id convertendo a string start_id em um inteiro usando a função int() com uma base de 16 (hexadecimal).

No método __next__(), geramos o próximo ID convertendo o current_id em uma string hexadecimal usando a função hex(), e então removendo o prefixo '0x' usando slicing [2:]. Em seguida, incrementamos o current_id em 1. Finalmente, usamos o método zfill() para garantir que a string do ID tenha sempre 8 caracteres de comprimento, preenchida com zeros à esquerda, se necessário.

O método __iter__() simplesmente retorna a própria instância WeaponFactory, para que a classe possa ser usada como um iterador.

Testar a Classe WeaponFactory

Agora que você implementou a classe WeaponFactory, vamos testá-la para garantir que está funcionando como esperado.

  1. Adicione o seguinte código ao bloco if __name__ == "__main__": no arquivo 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. Salve o arquivo soldier_generator.py e execute o script:
python3 soldier_generator.py

A saída deve ser:

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

Isso confirma que a classe WeaponFactory está funcionando como esperado, gerando o próximo ID na sequência quando o método __next__() é chamado, e iterando sobre os IDs quando usado como um iterador.

Resumo

Parabéns! Você concluiu este projeto. Você pode praticar mais laboratórios no LabEx para aprimorar suas habilidades.

✨ Verificar Solução e Praticar✨ Verificar Solução e Praticar