我在最后一行遇到索引超出范围错误

问题描述 投票:0回答:1

我正在尝试使用Python和海龟制作蛇游戏。

我创建了 create_snake() 函数来在程序启动时创建 3 个对象,即蛇的各个部分。

from turtle import Turtle, Screen
POS = [(0,0), (-20,0),(-40,0)]
MOVE_DISTANCE = 20
class SnakeBody(Turtle):
    def __init__(self):
        super().__init__()
        self.shape("square")
        self.color("white")
        self.penup()
        self.segments = []

    def create_snake(self):
        for p in POS:
            pybody = SnakeBody()
            pybody.goto(p)
            self.segments.append(pybody)

    def move(self):
        for i in range(len(self.segments) - 1, 0, -1):
            newx = self.segments[i - 1].xcor()
            newy = self.segments[i - 1].ycor()
            self.segments[i].goto(newx, newy)
        self.segments[0].forward(MOVE_DISTANCE)

我希望 move() 函数连续地一个接一个地移动每个段。

最后一行给我一个“IndexError:列表索引超出范围” 我该如何解决这个问题?

python oop error-handling runtime-error python-turtle
1个回答
0
投票

循环从 len(self.segments) - 1 开始,一直到 0(不包括 0)。 在循环内部,您使用 self.segments[i - 1],因此当 i 为 0 时,您将尝试访问 self.segments[-1],这是列表的最后一个元素。

© www.soinside.com 2019 - 2024. All rights reserved.