该数组不可调用是不是有原因?
Posted
技术标签:
【中文标题】该数组不可调用是不是有原因?【英文标题】:Is there a reason for this array not being callable?该数组不可调用是否有原因? 【发布时间】:2022-01-06 17:10:47 【问题描述】:from tkinter import *
import random
master = Tk()
w = Canvas(master, width=400, height=400)
w.pack()
w.config(background = "white")
class gridTile:
def __init__(self,width,height,c1,c2,colour,val):
self.width = width
self.height = height
self.c1 = c1
self.c2 = c2
self.colour = colour
self.val = val
def draw(self):
w.create_rectangle(self.c1, self.c2, self.width + self.c1,
self.height + self.c2, fill = self.colour)
grid = [["a","b","c","d"],["1a","1b","1c","1d"],["2a","2b","2c","2d"],["3a","3b","3c","3d"]]
当我在一个单独的环境中测试它时,它工作得很好,当放大它时它就不起作用了。
print(grid[(3)(3)])
grid_size = 4
count = 0
size = 60
for i in range(0,3):
print(i)
for j in range(0,3):
print(j)
count += 1
print (grid[[i][j]])
这个范围应该包含在grid
内
grid[[i][j]] = gridTile(size,size,i*(size +10),j*(size + 10),"black",count)
def end():
sqry = random.randint(0,3)
sqrx = random.randint(0,3)
grid[[sqry][sqrx]].colour = "white"
for i in range(0,2):
x = random.randint(0,3)
y = random.randint(0,3)
mainloop()
错误:
<module>
grid[[i][j]] = gridTile(size,size,i*(size +10),j*(size + 10),"black",count)
IndexError: list index out of range
【问题讨论】:
有什么问题?请edit你的问题并添加完整的错误回溯,你也应该使用for item in iterable
而不是for index in range(len(itrable))
,如果你需要索引你可以使用for index, item in enumerate(iterable):
,如果你只需要获取特定数量的项目你可以使用if
然后使用这个或使用列表切片或itertools.islice
【参考方案1】:
我在移动设备上,但它看起来像一个二维数组。为了访问值做 grid[x][y] 而不是元组或数组。
如果我有什么误解,请纠正我。
【讨论】:
【参考方案2】:让我们看看grid[[i][j]]
。该表达式的内部是[i][j]
。例如,如果i = 2
和j = 3
,则扩展为[2][3]
。换句话说,它会创建一个列表[2]
,然后尝试从中获取索引 3 处的项目。
那是行不通的。 grid[i][j]
是正确的语法。但实际上,不要这样做for i in range(...)
的东西。就像马蒂斯说的,你真的很想写这样的东西:
for sublist in grid:
for item in sublist:
print(item)
count += 1
【讨论】:
以上是关于该数组不可调用是不是有原因?的主要内容,如果未能解决你的问题,请参考以下文章
Websocket:是不是可以从程序中知道调用 onClose 的原因是啥