首页 > 解决方案 > “列表分配索引超出范围”错误如何修复?

问题描述

所以我做了这个简短的脚本,如果我与一个平台发生碰撞,它应该删除我的 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 脚本

标签: pythonhtmlpygame

解决方案


目前还不完全清楚为什么你要通过平台后退而不是根据此处的代码通过平台列表前进。该 for 循环中是否有更多代码?

无论如何,使用的 range() 规范会将其保持在 list 的范围内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()

然而,这似乎仍然是一种非常奇怪的追踪健康状况的方式。我建议你重新检查一下。


推荐阅读