python - “列表分配索引超出范围”错误如何修复?
问题描述
所以我做了这个简短的脚本,如果我与一个平台发生碰撞,它应该删除我的 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 脚本
解决方案
目前还不完全清楚为什么你要通过平台后退而不是根据此处的代码通过平台列表前进。该 for 循环中是否有更多代码?
无论如何,使用的 range() 规范会将其保持在 list 的范围内platforms
,因此这表明它是healths
超出范围的列表。
健康真的是一个清单吗?这是管理/跟踪玩家健康状况的一种奇怪方式。您通常只需使用计数器即可。是什么healths
?
无论如何,为什么列表health
和platforms
大小相同?这似乎是一个明显的问题。似乎您通过拥有一堆对象来管理健康,每个对象以某种方式代表一个健康单位,并且要删除一个健康单位,您会删除healths
列表中的某些内容。如果这是想法,那么从中删除一个条目healths
应该无关紧要从healths
您删除哪个条目。您可以使用删除列表healths.pop()
中的最后一个条目(删除最后一个条目并且是最有效的删除)。
for dude in range(len(platforms)-1,-1,-1):
if playerman.rect.colliderect(platforms[dude].rect):
healths.pop()
然而,这似乎仍然是一种非常奇怪的追踪健康状况的方式。我建议你重新检查一下。
推荐阅读
- function - 如何从与其定义的模块不同的模块调用木偶函数
- tkinter-entry - 验证输入字段
- excel - 将 p 值从 reghdfe 导出到 Excel
- java - 如何获取本地 Maven 包以引入其依赖项?
- python - python requests sending files in array shows ValueError: too many values to unpack
- php - 在 Worpress 中检测特定的 update_user_meta
- android - Kotlin 中的按钮数组
- mysql - Improving MySQL Query Speeds - 150,000+ Rows Returned Slows Query
- java - 在不登录的情况下显示 Twitter 用户资料?
- datastage - IBM Datastage 报告失败代码 262148