Python二维数组索引报不可调用与IndexError错误原因咨询
错误原因分析
- 核心错误是二维列表的索引语法使用错误
Python中访问二维列表元素的标准语法是grid[行索引][列索引],你代码中所有类似grid[[i][j]]、grid[(3)(3)]的写法都是不符合语法规范的:[i][j]的执行逻辑是先创建一个仅包含元素i的单元素列表[i],再尝试取这个列表的第j位元素。当j >= 1时,单元素列表只有索引0的位置有效,直接触发IndexError索引越界,这就是你收到报错的直接原因。(3)(3)的执行逻辑是把整数3当成可调用的函数,传入参数3执行,整数类型不支持调用操作,所以会触发'int' object is not callable的不可调用报错。
- 次要问题是遍历范围不完整
你定义的grid是4行4列的结构,合法索引范围是0~3,但你的循环写的是range(0,3),实际只会遍历到索引2,最后一行和最后一列的元素不会被处理,需要修改为range(4)才能覆盖全部网格。 - 额外语法问题
你定义的gridTile类中draw方法下的w.create_rectangle代码没有正确缩进,会触发语法错误,需要补充缩进层级。
修正后的核心代码示例
# 正确访问二维列表元素 print(grid[3][3]) grid_size = 4 count = 0 size = 60 # 遍历范围调整为0~3 for i in range(grid_size): print(i) for j in range(grid_size): print(j) count += 1 # 正确索引写法 print(grid[i][j]) # 正确赋值写法 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"
内容的提问来源于stack exchange,提问作者Ethanchatter
相关产品推荐
相关产品推荐

