Генератор серийных номеров солдат

PythonBeginner
Практиковаться сейчас

Введение

В этом проекте вы научитесь реализовывать класс Weapon Factory, который генерирует уникальные идентификаторы для клоновых солдат в клоновой фабрике Империи Галактики. Класс Weapon Factory разработан в качестве итератора, что позволяет легко генерировать и управлять последовательностью уникальных идентификаторов.

👀 Предварительный просмотр

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

🎯 Задачи

В этом проекте вы научитесь:

  • Как создавать пользовательский класс итератора на Python
  • Как последовательно генерировать уникальные шестнадцатеричные идентификаторы
  • Как использовать класс итератора для генерации и управления последовательностью идентификаторов

🏆 Достижения

После завершения этого проекта вы сможете:

  • Реализовать пользовательский класс итератора на Python
  • Последовательно генерировать уникальные шестнадцатеричные идентификаторы
  • Использовать класс итератора для управления последовательностью идентификаторов
  • Расширить класс итератора дополнительными функциями, такими как проверка идентификатора

Реализовать класс WeaponFactory

В этом шаге вы научитесь реализовывать класс WeaponFactory в качестве класса итератора.

  1. Откройте файл soldier_generator.py в вашем редакторе кода.
  2. Определите класс WeaponFactory с такими требованиями:
    • Метод __init__() должен принимать строку в качестве аргумента. Этот аргумент является начальным идентификатором фабрики оружия.
    • Метод __next__() должен генерировать следующий идентификатор в последовательности. Сгенерированный идентификатор должен быть строкой из 8 шестнадцатеричных символов.
    • Метод __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__() мы инициализируем атрибут current_id, преобразовав строку start_id в целое число с использованием функции int() с основанием 16 (шестнадцатеричной).

В методе __next__() мы генерируем следующий идентификатор, преобразуя current_id в шестнадцатеричную строку с использованием функции hex(), а затем удаляя ведущие '0x' с использованием среза [2:]. Затем мы увеличиваем current_id на 1. Наконец, мы используем метод zfill(), чтобы убедиться, что строка идентификатора всегда имеет длину 8 символов, дополняя ведущими нулями, если необходимо.

Метод __iter__() просто возвращает сам экземпляр класса WeaponFactory, чтобы класс можно было использовать в качестве итератора.

Тестировать класс WeaponFactory

Теперь, когда вы реализовали класс WeaponFactory, давайте протестируем его, чтобы убедиться, что он работает как ожидается.

  1. Добавьте следующий код в блок if __name__ == "__main__": в файле 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. Сохраните файл soldier_generator.py и запустите скрипт:
python3 soldier_generator.py

Вывод должен быть таким:

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

Это подтверждает, что класс WeaponFactory работает как ожидается, генерирует следующий идентификатор в последовательности при вызове метода __next__() и итерируется по идентификаторам, когда используется в качестве итератора.

Резюме

Поздравляем! Вы завершили этот проект. Вы можете практиковаться в более многих лабораторных работах в LabEx, чтобы улучшить свои навыки.

✨ Проверить решение и практиковаться✨ Проверить решение и практиковаться