読者です 読者をやめる 読者になる 読者になる

はしくれエンジニアもどきのメモ

情報・Web系技術の勉強メモ・備忘録です。

Python (NumPy) でLifeGame を作る2 [class]

Python (NumPy) でLifeGame を作る2[class]

前回作ったものをclass にしてみました。

cartman0.hatenablog.com

環境

  • Windows 10

    • conda 4.05

      • python 3.5.1

      • jupyter 4.1.0

コード

イテレータで実装したので、 インスタンスをnext() でグルグル回せます。

140行弱

LifeGame (クラス)

実行例

初期のセル配列を突っ込んで、インスタンスを生成。


cells = np.zeros((8, 8), 'int')
cells[0:3, -1:-4:-1] = 1
lg = LifeGame(cells)

__str__() を実装しているので、 print関数が使える。


print(lg)

[[0 0 0 0 0 1 1 1]
 [0 0 0 0 0 1 1 1]
 [0 0 0 0 0 1 1 1]
 [0 0 0 0 0 0 0 0]
 [0 0 0 0 0 0 0 0]
 [0 0 0 0 0 0 0 0]
 [0 0 0 0 0 0 0 0]
 [0 0 0 0 0 0 0 0]]

iterator を生成して、next()で回す。


lg_iter = iter(lg)
next(lg_iter) #1回目

(1, array([
[0, 0, 0, 0, 0, 2, 0, 2],
[0, 0, 0, 0, 1, 0, 0, 0],
[0, 0, 0, 0, 0, 2, 0, 2],
[0, 0, 0, 0, 0, 0, 1, 0],
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0]]))

next(lg_iter) #2回目

(2, array([
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 2, 1, 0, 0],
[0, 0, 0, 0, 0, 2, 1, 0],
[0, 0, 0, 0, 0, 0, 2, 0],
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0]]))

next(lg_iter) # 3回目

(3, array([
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 2, 2, 1, 0],
[0, 0, 0, 0, 1, 0, 2, 0],
[0, 0, 0, 0, 0, 1, 2, 0],
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0]]))