Введение
В этом проекте вы научитесь реализовывать класс Weapon Factory, который генерирует уникальные идентификаторы для клоновых солдат в клоновой фабрике Империи Галактики. Класс Weapon Factory разработан в качестве итератора, что позволяет легко генерировать и управлять последовательностью уникальных идентификаторов.
👀 Предварительный просмотр
------test1-------
1000face
1000facf
1000fad0
------test2-------
1000f000
1000f001
1000f002
1000f003
1000f004
1000f005
1000f006
1000f007
1000f008
1000f009
1000f00a
🎯 Задачи
В этом проекте вы научитесь:
- Как создавать пользовательский класс итератора на Python
- Как последовательно генерировать уникальные шестнадцатеричные идентификаторы
- Как использовать класс итератора для генерации и управления последовательностью идентификаторов
🏆 Достижения
После завершения этого проекта вы сможете:
- Реализовать пользовательский класс итератора на Python
- Последовательно генерировать уникальные шестнадцатеричные идентификаторы
- Использовать класс итератора для управления последовательностью идентификаторов
- Расширить класс итератора дополнительными функциями, такими как проверка идентификатора
Реализовать класс WeaponFactory
В этом шаге вы научитесь реализовывать класс WeaponFactory в качестве класса итератора.
- Откройте файл
soldier_generator.pyв вашем редакторе кода. - Определите класс
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, давайте протестируем его, чтобы убедиться, что он работает как ожидается.
- Добавьте следующий код в блок
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
- Сохраните файл
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, чтобы улучшить свои навыки.



