python - python 生命游戏中的问题

  显示原文与译文双语对照的内容

这是我第一次在这个网站上发帖,所以我。 我遇到了一个问题,我没有成功地通过别人的其他帖子找到解决方案。 我们正在遵循Life游戏的标准规则。

到目前为止,我已经能够创建 2d array,并用一个随机的来填充 array,对于死和'O'来说,它是一个随机的。 我相信我正在检查和检查所有的邻居。 * 是我使用 try/catch的原因,因为它是唯一可以避免获取界限错误消息的方法。

我的主要问题是,我不确定在检查/更改值时是否正确地进行了 array 。 另外,我不确定如何在将 live/die规则应用到整个数组之后打印"已经更新" 2d array 。

现在输出输出随机 array,然后再次打印完全相同的array,然后询问是否继续( 再次循环循环) 。 如果我选择'y',我会得到错误消息


TypeError: list indices must be integers, not list



我已经失去了,任何想法都会有助于我到 python的3周。

这是我的代码:


import random



numrows = 25


numcols = 25



def rnd():


 rn = random.randint(0,1)


 return rn



def initial():



 grid = []


 count = 0



 for x in range(numrows):


 grid.append([])


 for y in range(numcols):


 rand=random.randrange(1,3)


 if(rand == 1):


 grid[x].append('O')


 else:


 grid[x].append('-')



 for x in grid: 


 print(*x, sep=' ',end="n") #prints initial grid with random values



 print("")# space for clarity sake


 print("")#""



 answer = 'y'


 count = 0



 while(answer == 'y'):



 #This is where I am checking each neighbor. Adding 1 to count for each


 #live neighbor.



 for r in range(0,numrows):


 for c in range(0,numcols):



 try:


 if(grid[r-1][c-1] == 'O'):


 count += 1



 except:


 pass



 try:


 if(grid[r-1][c] == 'O'):


 count += 1



 except:


 pass



 try:


 if(grid[r-1][c+1] == 'O'):


 count += 1



 except:


 pass



 try:


 if(grid[r][c-1] == 'O'):


 count += 1



 except:


 pass



 try:



 if(grid[r][c+1] == 'O'):


 count += 1



 except:


 pass



 try:


 if(grid[r+1][c-1] == 'O'):


 count += 1



 except:


 pass



 try:


 if(grid[r+1][c] == 'O'):


 count += 1



 except:


 pass



 try:


 if(grid[r+1][c+1] == 'O'):


 count += 1



 except:


 pass



 #this is where I am applying the rules of living or dying


 #based on how many neighbors there are.



 if(grid[r][c] == '-'):


 if(count == 3):


 grid[r][c].append('O')



 if(grid[r][c] == 'O'):


 if(count <2):


 grid[r][c].append('-')



 if(grid[r][c] == 'O'):


 if(count == 2 or count == 3):


 grid[r][c].append('O')



 if(grid[r][c] == 'O'):


 if(count> 3):


 grid[r][c].append('-')



 for r in grid: #This is a problem area as i dont


 print(*r, sep=' ',end="n")#know how to print the grid 



 answer = input("Continue? y or n( lower case only):")



 if(answer!= 'y'):


 print(" Hope you had a great life! Goodbye!")



时间: 原作者:

问题在于:崩溃发生在if行:


 if(grid[r][c] == '-'): # <=== here on this line


 if(count == 3):


 grid[r][c].append('O')



在这一行中,r 不再是整数,而是一个列表。 但是为什么答案会在后面几行出现:?


 for r in grid: #This is a problem area as i dont


 print(*r, sep=' ',end="n")#know how to print the grid



在这个块中,R 是一个 int,但是现在你把它变成了一个列表。 我认识到你的评论,不知道如何打印网格,所以我可以建议快速:


print('n'.join(' '.join(str(cell) for cell in row) for row in grid))



这样,你就不会覆盖变量 r

原作者:
...