Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 康威的问题';人生的游戏_Python_Arrays_2d_Conways Game Of Life - Fatal编程技术网

Python 康威的问题';人生的游戏

Python 康威的问题';人生的游戏,python,arrays,2d,conways-game-of-life,Python,Arrays,2d,Conways Game Of Life,我遇到了一个问题,我没有通过别人的帖子找到解决办法。我们遵循康威生命游戏的标准规则 到目前为止,我已经能够创建2d数组,并使用随机字符'-'填充数组,其中'-'表示死亡,'O'表示活着(字母O不是数字零)。我相信我正在正确地检查所有邻居。*我使用try/catch的原因是,这是我唯一能够找出如何避免收到越界错误消息的方法 我的主要问题是,在检查/更改值时,我不确定是否正确地遍历了数组。另外,我不知道在将活/死规则应用于整个阵列之后如何打印“更新”的2d阵列 目前为止,输出只打印一次随机化数组,然

我遇到了一个问题,我没有通过别人的帖子找到解决办法。我们遵循康威生命游戏的标准规则

到目前为止,我已经能够创建2d数组,并使用随机字符'-'填充数组,其中'-'表示死亡,'O'表示活着(字母O不是数字零)。我相信我正在正确地检查所有邻居。*我使用try/catch的原因是,这是我唯一能够找出如何避免收到越界错误消息的方法

我的主要问题是,在检查/更改值时,我不确定是否正确地遍历了数组。另外,我不知道在将活/死规则应用于整个阵列之后如何打印“更新”的2d阵列

目前为止,输出只打印一次随机化数组,然后再次打印完全相同的数组,然后询问是否要继续(再次执行while循环)。如果选择“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!")
随机导入
numrows=25
numcols=25
def rnd():
rn=random.randint(0,1)
返回rn
def initial():
网格=[]
计数=0
对于范围内的x(numrows):
grid.append([])
对于范围内的y(numcols):
rand=random.randrange(1,3)
如果(rand==1):
网格[x]。追加('O')
其他:
网格[x]。追加('-')
对于网格中的x:
打印(*x,sep='',end=“\n”)#使用随机值打印初始网格
为清晰起见,打印(“”)#空格
打印(“”)
答案='y'
计数=0
而(答案=‘y’):
#这是我检查每个邻居的地方。每项加1计算
#住在邻居家。
对于范围内的r(0,numrows):
对于范围内的c(0,numcols):
尝试:
如果(网格[r-1][c-1]=“O”):
计数+=1
除:
通过
尝试:
如果(网格[r-1][c]='O'):
计数+=1
除:
通过
尝试:
如果(网格[r-1][c+1]=='O'):
计数+=1
除:
通过
尝试:
如果(网格[r][c-1]='O'):
计数+=1
除:
通过
尝试:
如果(网格[r][c+1]=='O'):
计数+=1
除:
通过
尝试:
如果(网格[r+1][c-1]=='O'):
计数+=1
除:
通过
尝试:
如果(网格[r+1][c]=='O'):
计数+=1
除:
通过
尝试:
如果(网格[r+1][c+1]=='O'):
计数+=1
除:
通过
#这就是我运用生死法则的地方
#根据有多少邻居。
如果(网格[r][c]='-'):
如果(计数=3):
网格[r][c]。追加('O')
如果(网格[r][c]='O'):
如果(计数<2):
网格[r][c]。追加('-'))
如果(网格[r][c]='O'):
如果(计数=2或计数=3):
网格[r][c]。追加('O')
如果(网格[r][c]='O'):
如果(计数>3):
网格[r][c]。追加('-'))
对于网格中的r:#这是一个问题区域,我不知道
打印(*r,sep='',end=“\n”)#知道如何打印网格
回答=输入(“继续?y或n(仅小写):”)
如果(回答!=“y”):
打印(“希望你有一个美好的生活!再见!”)

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

                if(grid[r][c] == '-'):  # <=== here on this line
                        if(count == 3):
                            grid[r][c].append('O')
在这个块中,r是一个int,但现在你把它变成了一个列表。我承认你在那里关于不知道如何打印网格的评论,因此我可以提出一个快速建议:

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

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

显示完整的错误消息(回溯)。还有其他有用的信息,比如产生问题的代码行。在使用
r-1
之前,您必须检查
r-1>-1
,这样您就不需要一些
尝试/除了
。与
c-1>-1
r+1
c+1
grid[r][c]
相同的是char,而不是list,所以你不能使用
grid[r][c]。追加('O')
-你需要
grid[r][c]=/O'
中使用
r
来表示网格中的r:
r在
中表示范围内的r(0,0):
grid[r][c]
也-它给你
类型错误:列表索引必须是整数,而不是list
你必须在
中使用
elif
如果(grid[r][c]='O'):
(和其他),因为你首先将
-
更改为
O
,然后在同一位置检查
O
。您可以打印网格并要求
继续
在这两个
之外进行
循环。现在,在每个更改的单元格后绘制。
print('\n'.join(' '.join(str(cell) for cell in row) for row in grid))