Pygame中出现IndexError: list index out of range错误求助
解决Pygame蛇形游戏中的IndexError问题
我一眼就瞅到问题所在啦——你代码里藏了个超容易忽略的笔误!
错误根源
看你定义蛇身的这行代码:
self.body=[[100,50], [90.50], [80,50]]
第二个蛇身坐标里的逗号被写成小数点了!原本应该是[90, 50],结果写成了[90.50],这直接导致这个蛇身段的坐标变成了一个只有单个元素的列表。当代码执行到pygame.Rect(pos[0], pos[1], 10,10)时,尝试访问pos[1],但这个列表只有索引0,自然就抛出了IndexError: list index out of range。
为啥教程里的代码能正常跑?人家写的是逗号呀,你对着看的时候可能没注意到这个细节差异~
修正后的代码
只需要把小数点换回逗号就行,修改后的完整代码如下:
class Snake: def __init__(self): self.position = [50, 50] self.body = [[100, 50], [90, 50], [80, 50]] # 这里把.换成了, self.direction = "RIGHT" self.changeDirectionTo = self.direction def getBody(self): return self.body window = pygame.display.set_mode((500, 500)) snake = Snake() while True: for pos in snake.getBody(): pygame.draw.rect(window, pygame.Color(0, 225, 0), pygame.Rect(pos[0], pos[1], 10, 10))
小技巧
下次遇到类似的索引错误,可以先在循环里加一句print(pos),把每个要处理的元素打印出来,就能快速定位到格式异常的元素啦,比盯着代码瞎找高效多了!
内容的提问来源于stack exchange,提问作者Naya Keto
相关产品推荐
相关产品推荐

