兵士シリアルナンバー生成器

PythonBeginner
オンラインで実践に進む

はじめに

このプロジェクトでは、銀河帝国のクローン工場においてクローン兵に固有の ID を生成する Weapon Factory クラスを実装する方法を学びます。Weapon Factory クラスは反復子として設計されており、固有の 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__()メソッドでは、int()関数を使用して 16 進数(基数 16)でstart_id文字列を整数に変換することで、current_id属性を初期化しています。

__next__()メソッドでは、hex()関数を使用してcurrent_idを 16 進数文字列に変換し、その後スライシング[2:]を使用して先頭の'0x'を削除します。そして、current_idを 1 増やします。最後に、zfill()メソッドを使用して、必要に応じて先頭にゼロを埋めることで、ID 文字列が常に 8 文字になるようにしています。

__iter__()メソッドは単にWeaponFactoryインスタンス自体を返すだけで、クラスを反復子として使用できるようにします。

WeaponFactory クラスをテストする

これでWeaponFactoryクラスを実装したので、期待通りに動作しているかどうかをテストしましょう。

  1. soldier_generator.pyファイルのif __name__ == "__main__":ブロックに以下のコードを追加します。
wf = WeaponFactory("1000face")
print("------test1-------")
print(next(wf))   ## 出力:'1000face'
print(next(wf))   ## 出力:'1000facf'
print(next(wf))   ## 出力:'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__()メソッドが呼び出されると順次的に次の ID を生成し、反復子として使用されると ID を反復処理することが確認されます。

まとめ

おめでとうございます!このプロジェクトを完了しました。技術力を向上させるために、LabEx でさらに多くの実験を行って練習してください。

✨ 解答を確認して練習✨ 解答を確認して練習