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.
- Abra o arquivo
soldier_generator.pyno seu editor de código. - Defina a classe
WeaponFactorycom 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ânciaWeaponFactory, para que a classe possa ser usada como um iterador.
- O método
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.
- Adicione o seguinte código ao bloco
if __name__ == "__main__":no arquivosoldier_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
- Salve o arquivo
soldier_generator.pye 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.



