Python 类型错误:';int';对象不可下标
我找过其他类似的案例,但没有一个完全适用于我。。。。如果他们这样做了,我不明白怎么做 我尝试通过2D数组进行过滤(如下所示): 并找出当前部分是什么。抱歉,如果我的代码有点草率,我是python新手。这是我代码的一部分Python 类型错误:';int';对象不可下标,python,python-2.7,for-loop,Python,Python 2.7,For Loop,我找过其他类似的案例,但没有一个完全适用于我。。。。如果他们这样做了,我不明白怎么做 我尝试通过2D数组进行过滤(如下所示): 并找出当前部分是什么。抱歉,如果我的代码有点草率,我是python新手。这是我代码的一部分 def drawBlock(): for blockL1 in blocks: for blokL2 in blocks: if blocks[blockL1[blockL2[1]]] == 0: pygame.draw.rect(
def drawBlock():
for blockL1 in blocks:
for blokL2 in blocks:
if blocks[blockL1[blockL2[1]]] == 0:
pygame.draw.rect(screen, (0, 255, 255), Rect((blockL1 * 32, blockL2 *32), (32, 32)))
pygame.draw.rect(screen, color, Rect(i * 32, ))
global blockL2
blockL2 += 1
global blockL1
blockL1 += 1
你这里有几个问题 主要问题是您使用
进行压边圈中的压边
当你写作时
for blockL1 in blocks:
for blockL1 in blocks:
for blockL2 in blocks:
这几乎和写作一样
for ii in range(len(blocks)):
blockL1 = blocks[ii]
...
这意味着blockL1不是整数,也不是块的索引。。它是块的一个元素
它的值如下所示:[[0]、[0]、[0]、[0]、[0]、[0]、[0]、[0]、[0]、[0]]
这是一个列表。。。其中asblocks
是包含列表的列表列表。。。嗯
当你写作时
for blockL1 in blocks:
for blockL1 in blocks:
for blockL2 in blocks:
blockL2
的值将是单个列表[0]
假设要查看blockL2
中包含的一个值,可以更改:
if blocks[blockL1[blockL2[1]]] == 0:
致:
但是,这段代码看起来需要blockL1
和blockL2
的索引值,因此我建议您遍历它们的索引列表(意思是ints
)。。。不是他们的元素
def drawBlock():
for blockL1 in range(len(blocks)):
for blockL2 in range(len(blockL1)):
if blocks[blockL1[blockL2[0]]] == 0:
pygame.draw.rect(screen, (0, 255, 255), Rect((blockL1 * 32, blockL2 *32), (32, 32)))
希望这能帮助一些人 块实际上是一个三维数组。移除每个
0
周围的[]
。谢谢!这其实是有道理的!我很感激你能帮助我,因为我学到的第一种循环是javascript风格,这使得我很难想象使用不同的风格。所以你建议我使用底部的代码?谢谢@等等,这真的取决于你的风格,。。但是如果逻辑需要知道当前块在主数组中的位置,我建议使用底部。