前提・実現したいこと
Pythonでコンウェイのライフゲームを見てみようと思いました。そして、計算物理学Ⅱという本のセルオートマトンの所に書かれているコードを入力した所、うまくいかなかったので、エラーメッセージを見ながら直していきましたが、「tuple index out of range」のエラーでつまずきました。
発生している問題・エラーメッセージ
エラーメッセージ
Traceback (most recent call last): File "GameOfLife.py", line 8, in <module> [(-49 , -49) , (-49 , 49) , (49 , 49) , (49 , -49) , (-49 , -49)] , color = color.white) File "C:\Python37\lib\site-packages\vpython\vpython.py", line 1996, in __init__ self.append(tpos) File "C:\Python37\lib\site-packages\vpython\vpython.py", line 1852, in append pts, cps = self.process_args(*args1, **args) File "C:\Python37\lib\site-packages\vpython\vpython.py", line 1792, in process_args tpos = self.parse_pos(args1[0]) File "C:\Python37\lib\site-packages\vpython\vpython.py", line 1837, in parse_pos v = list_to_vec(v) File "C:\Python37\lib\site-packages\vpython\vpython.py", line 225, in list_to_vec return vector(L[0], L[1], L[2]) IndexError: tuple index out of range
該当のソースコード
Python 3.7.1
from vpython import * from IPython.display import display from numpy import zeros scene = display(width = 500 , height = 500 , title = 'Game of Life') cell = zeros((50 , 50)); cellu = zeros((50 , 50)) curve(pos = [(-49 , -49) , (-49 , 49) , (49 , 49) , (49 , -49) , (-49 , -49)] , color = color.white) boxes = points(shape = 'square' , size = 8 , color = color.cyan) def drawcells(ce): boxes.pos = [] for j in ranges(0 , 50): for i in range(0 , 50): if ce[i , j] == 1: xx = 2*i - 50 yy = 2*j - 50 boxes.append(pos = (xx , yy)) def initial(): for j in range(20 , 28): for i in range(20 , 28): r= int(random.random() * 2) cell[j , i] = r return cell def gameoflife(call): for i in range(1 , 49): for j in range(1 , 49): sum1 = cell[i-1 , j-1] + cell[i , j-1] + cell[i+1 , j-1] sum2 = cell[i-1 , j] + cell[i+1 , j] + cell[i-1 , j+1] + cell[i , j+1] + cell[i+1 , j+1] alive = sum1 + sum2 if cell[i , j] == 1: if alive == 2 or alive == 3: cellu[i , j] = 1 if alive > 3 or alive < 2: cellu[i , j] = 0 if cell[i , j] == 0: if alive == 3: cellu[i , j] = 1 else: cellu[i , j] = 0 alive = 0 return cellu temp = initial() drawcells(temp) while True: rate(6) cell = temp temp = gameoflife(cell) drawcells(cell)
試したこと
index out of rangeはindexは範囲の外という意味までは分かり、自分も探してみましたが、どこがおかしいのか分かりません。
補足情報(FW/ツールのバージョンなど)
提示ソースは本に載っているものそのままでしょうか、それともご自身で直した後のものでしょうか?
本に載っているものを少し変更したものです。本に載っているものをそのまま実行しようとすると、エラーが出てきたので変えました。例えば、最初はfrom visual import *でしたが、visualでは動作せずvpythonに変更しました。
http://tk-lab.org/books/computationalphysics/ そしてこのページを先ほど見つけたのですが、VPython6で書かれていて最新バージョンに対応していないとのことです。
追記ありがとうございます。サポートページ見て、紹介されているコンバーターも試してみましたが、最新Verへの対応は難易度高いです。
ご回答ありがとうございました。初心者が正しいコードに変えるのは難しそうなので、一旦このコードは諦めます。本当にありがとうございました。
回答1件
あなたの回答
tips
プレビュー