【问题标题】: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

标签: python arrays python-3.x


【解决方案1】:

我在移动设备上,但它看起来像一个二维数组。为了访问值做 grid[x][y] 而不是元组或数组。

如果我有什么误解,请纠正我。

【讨论】:

    【解决方案2】:

    让我们看看grid[[i][j]]。该表达式的内部是[i][j]。例如,如果i = 2j = 3,则扩展为[2][3]。换句话说,它会创建一个列表[2],然后尝试从中获取索引 3 处的项目。

    那是行不通的。 grid[i][j] 是正确的语法。但实际上,不要这样做for i in range(...) 的东西。就像马蒂斯说的,你真的很想写这样的东西:

    for sublist in grid:
        for item in sublist:
            print(item)
            count += 1
    

    【讨论】:

      猜你喜欢
      • 2016-12-25
      • 2015-02-03
      • 1970-01-01
      • 2016-04-09
      • 2020-09-17
      • 2014-07-27
      • 2015-11-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多