class Island (object):
def __init__(self, i,j,k, wolf_count=0, eagle_count=0, rabbit_count=0, pigeon_count=0,):
'''Initialize grid to all 0's, then fill with animals
'''
# print(n,prey_count,predator_count)
self.i=i
self.j=j
self.k=k
self.cube= []
for k in range(k):
self.square=[]
for j in range(j):
row=[0]*i
self.square.append(row)
self.cube.append(self.square)
self.init_animals(wolf_count, eagle_count, rabbit_count, pigeon_count)
def init_animals(self,wolf_count, eagle_count, rabbit_count, pigeon_count):
count = 0
while count < wolf_count:
i = random.randint(0,self.i-1)
j = random.randint(0,self.j-1)
k = 0
if not self.animal(i,j,k):
new_Wolf=Wolf(island=self,i=i,j=j,k=0)
count += 1
self.register(new_Wolf)
def animal(self,i,j,k):
'''Return animal at location (i,j,k)'''
if 0 <= i < self.i and 0 <= j < self.j and 0 <= k < self.k:
return self.cube[i][j][k]
else:
return -1
这些是我的程序中相互调用的部分。当我尝试运行该程序时,它给了我:
IndexError: list index out of range.
它代表return self.cube[i][j][k]
中的animal()
。参考if not self.animal(i,j,k):
中的init_animals()
部分。这又是对isle = Island(i,j,k, initial_Wolf, initial_Pigeon, initial_Eagle, initial_Rabbit)
中的__init__()
行的引用。
我知道为什么会收到此错误?对不起,如果它难以阅读。
答案 0 :(得分:1)
您的外部列表self.cube
包含k
个条目,每个条目都包含j
条目的嵌套列表,每个条目包含i
个条目的列表。扭转指数:
return self.cube[k][j][i]
或颠倒您创建self.cube
列表的方式:
for _ in range(i):
square = []
for _ in range(j):
square.append([0] * k)
self.cube.append(self.square)
或更紧凑仍然使用列表推导:
self.cube = [[[0] * k for _ in range(j)] for _ in range(i)]