“列表分配索引超出范围”错误如何解决?

时间:2020-05-25 00:55:56

标签: python html pygame

所以我做了一个简短的脚本,如果我与一个平台发生碰撞,它应该删除我的1个健康状况,但是我遇到了这个错误

我要说的视频的视频<-如您所见,如果我与冰砖碰撞,它将删除我的一名球员健康-

 'list assignment index out of range' 
            for dude in range(len(platforms)-1,-1,-1):
                if playerman.rect.colliderect(platforms[dude].rect):
                    del healths[dude]



我的完整代码不适合我,所以我把它变成了一个pastebin script

2 个答案:

答案 0 :(得分:1)

在删除元素之前检查其是否存在。

for dude in range(len(platforms)-1,-1,-1):
    if playerman.rect.colliderect(platforms[dude].rect):
        if dude < len(healths): #Check
            del healths[dude]

答案 1 :(得分:1)

尚不完全清楚为什么您要通过平台向后浏览,而不是根据此处的代码向前浏览平台列表。 for循环中还有更多代码吗?

无论如何,所使用的range()规范将使其保持在列表platforms的范围内,因此这表明列表healths超出了范围。

实际上是健康清单吗?这是管理/保持玩家健康状况的奇怪方法。通常,您只需与柜台联系即可。什么是healths

无论如何,列表healthplatforms为何大小相同?这似乎是显而易见的问题。似乎您是通过管理一堆对象来管理健康的,每个对象都以某种方式表示健康单位,并且要删除健康单位,您需要删除healths列表中的某些内容。如果是这样的话,则从healths中删除一个条目,从healths中删除哪个条目都没关系。您可以使用healths.pop()删除列表中的最后一个条目(删除最后一个条目,这是最有效的删除方法)。

for dude in range(len(platforms)-1,-1,-1):
    if playerman.rect.colliderect(platforms[dude].rect):
        healths.pop()

但是,这仍然是跟踪健康状况的一种非常奇怪的方法。我建议您重新检查一下。