병사 일련 번호 생성기

PythonBeginner
지금 연습하기

소개

이 프로젝트에서는 은하 제국의 복제 공장에서 복제 병사에게 고유 ID 를 생성하는 Weapon Factory 클래스를 구현하는 방법을 배우게 됩니다. Weapon Factory 클래스는 반복자 (iterator) 로 설계되어 고유 ID 시퀀스를 쉽게 생성하고 관리할 수 있습니다.

👀 미리보기

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

🎯 과제

이 프로젝트에서는 다음을 배우게 됩니다.

  • Python 에서 사용자 정의 반복자 클래스를 만드는 방법
  • 순차적으로 고유한 16 진수 ID 를 생성하는 방법
  • 반복자 클래스를 사용하여 ID 시퀀스를 생성하고 관리하는 방법

🏆 성과

이 프로젝트를 완료하면 다음을 수행할 수 있습니다.

  • Python 에서 사용자 정의 반복자 클래스를 구현할 수 있습니다.
  • 순차적으로 고유한 16 진수 ID 를 생성할 수 있습니다.
  • 반복자 클래스를 사용하여 ID 시퀀스를 관리할 수 있습니다.
  • ID 유효성 검사와 같은 추가 기능으로 반복자 클래스를 향상시킬 수 있습니다.

WeaponFactory 클래스 구현

이 단계에서는 WeaponFactory 클래스를 반복자 클래스로 구현하는 방법을 배우게 됩니다.

  1. 코드 편집기에서 soldier_generator.py 파일을 엽니다.
  2. 다음 요구 사항에 따라 WeaponFactory 클래스를 정의합니다.
    • __init__() 메서드는 문자열을 인수로 받아야 합니다. 이 인수는 무기 공장의 시작 ID 입니다.
    • __next__() 메서드는 시퀀스에서 다음 ID 를 생성해야 합니다. 생성된 ID 는 8 개의 16 진수 문자로 구성된 문자열이어야 합니다.
    • __iter__() 메서드는 WeaponFactory 인스턴스 자체를 반환해야 하므로 클래스를 반복자로 사용할 수 있습니다.

다음은 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)

__init__() 메서드에서 start_id 문자열을 16 진수 (base 16) 로 int() 함수를 사용하여 정수로 변환하여 current_id 속성을 초기화합니다.

__next__() 메서드에서는 current_idhex() 함수를 사용하여 16 진수 문자열로 변환한 다음 슬라이싱 [2:]을 사용하여 선행 '0x'를 제거하여 다음 ID 를 생성합니다. 그런 다음 current_id를 1 씩 증가시킵니다. 마지막으로, zfill() 메서드를 사용하여 ID 문자열이 항상 8 자 길이이고 필요한 경우 선행 0 으로 채워지도록 합니다.

__iter__() 메서드는 클래스를 반복자로 사용할 수 있도록 WeaponFactory 인스턴스 자체를 반환합니다.

WeaponFactory 클래스 테스트

이제 WeaponFactory 클래스를 구현했으므로 예상대로 작동하는지 테스트해 보겠습니다.

  1. soldier_generator.py 파일의 if __name__ == "__main__": 블록에 다음 코드를 추가합니다.
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. soldier_generator.py 파일을 저장하고 스크립트를 실행합니다.
python3 soldier_generator.py

출력 결과는 다음과 같아야 합니다.

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

이는 __next__() 메서드가 호출될 때 WeaponFactory 클래스가 예상대로 작동하여 시퀀스에서 다음 ID 를 생성하고, 반복자로 사용될 때 ID 를 반복함을 확인합니다.

요약

축하합니다! 이 프로젝트를 완료했습니다. LabEx 에서 더 많은 랩을 연습하여 기술을 향상시킬 수 있습니다.

✨ 솔루션 확인 및 연습✨ 솔루션 확인 및 연습