python - 为什么我会收到 KeyError : 0

我正在尝试编写 Conway 的生命游戏。据我所知,程序应该是完整的,但是当我运行它时,我得到 KeyError: 0,据我所知,这意味着引用了一个不存在的字典键。字典 (cell_dict) 包含形成死/活细胞的 20x20 网格的 tkinter 按钮。

完整代码如下:

#imports
import tkinter
import random

#functions
def step(): #updates the status of each cell
    for i in range(0,20): # runs through each cell to check the number of living neighbors
        for j in range(0,20):

            cell = cell_dict[i][j] #key error happens here
            pop = 0

            for n in range(-1,2): #checks each neighbor and tracks the number of alive ones
                for m in range(-1,2):
                    if i+n in range(0,20) and j+m in range(0,20):
                        if n != 0 or m != 0:
                            cell_neighbor = cell_dict[i+n][j+m]
                            if cell_neighbor['bg'] == "yellow":
                                pop += 1

            if cell['bg'] == "yellow" and (pop == 2 or pop == 3): #primes the new status for the cell
                cell['fg'] = "yellow"
            elif cell['bg'] == "black" and pop == 3:
                cell['fg'] = "yellow"
            else:
                cell['fg'] = "black"

    for i in range(0,20): #updates the status of each cell
        for j in range(0,20):
            cell = cell_dict[i][j]
            if cell['fg'] == "black":
                cell['bg'] = "black"
            elif cell['fg'] == "yellow":
                cell['bg'] = "yellow"

    window.after(1000,step) #repeats the process every second

#gui
window = tkinter.Tk()

cell_dict = {} #primes the dictionary

for i in range(0,400): #creates all the cells
    cell = tkinter.Button(fg = "white", bg = "white", height = 1, width = 2)

    r = random.randrange(0,2) #randomly determines if the cell will be initially dead or alive

    if r == 0:
        cell['bg'] = "black" #dead
    elif r == 1:
        cell['bg'] = "yellow" #alive

    cell.grid(row = int(i/20)%20, column = i%20) #packs the cell into the grid

    cell_dict[(int(i/20)%20,i%20)] = cell #stores the cell in the dictionary

#mainloop
step()
window.mainloop()

我注意到一旦弹出键错误,i = 399 并且 j 未定义。因此,代码似乎以某种方式跳过了“for i in range(0,2): for j in range(0,20):”。我是编码新手,所以我不确定哪里出错了。

最佳答案

看起来您将单元格位置存储为两个整数的元组。 所以你应该用那个而不是整数来解决 cell_dict。

使用 cell_dict[(i, j)] 代替 cell_dict[i][j]

https://stackoverflow.com/questions/62944714/

相关文章:

r - 对于循环存储问题

vue.js - Nuxt : Open component/page as modal with

r - 错误 : Must subset columns with a valid subscrip

python - 在循环中的每个字符后插入句点

c - 浅/深复制术语是否适用于没有引用的对象?

python - 如何在 Python 中读取 SPSS aka (.sav)

html - 在 flex 中将 div 的内容右对齐

asp.net-mvc - 如何将 Azure Active Directory 身份验证添加到 R

python-3.x - 可以将我的临时文件放入我的应用程序中的 tmp/目录吗?

python - Jupyter notebook 感叹号参数