Задать вопрос
@UnrealPelmen

Ошибка IndexError: string index out of range в написании реализации системы Линденмайера – от чего происходит и как исправить?

Пытался самостоятельно реализовать код для рисования фрактальных фигур с помощью системы Лиденмайера.
Вот код (геном K оставлен, хотя нигде не используется):
class instinctTurtle(turtle.Turtle):
    axiom = ''
    turtleX = 0;
    turtleY = 0;
    turtleRotate = 0.0;
    teta = 0
    lenght = 0
    def __init__(self, shape = "classic", undobuffersize = 1000, visible = False):
        super().__init__(shape, undobuffersize, visible)
    def setDrawingParameters(self,teta:int = 60, lenght:int = 10, axiom:str = 'F++F++F', newF:str = 'F-F++F-F', newB:str = 'B', newK:str = 'K'):
        self.teta = teta
        self.lenght = lenght
        self.axiom = axiom
        self.newF = newF
        self.newB = newB
        self.newK = newK
    def createInstinct(self, deep:int = 1):
        self.instinct = ''
        for i in range(deep):
            for j in range(len(self.axiom)):
                instinct = ''
                match self.axiom[j]:
                    case 'F':
                        instinct += self.newF
                    case 'B':
                        instinct += self.newB
                    case 'K':
                        instinct += self.newK
                    case _:
                        instinct += self.axiom[j]
                self.axiom = instinct
    def runInstinct(self):
        for i in range(len(self.axiom)):
            cmd = self.axiom[i]
            match cmd:
                case 'F':
                    self.forward(self.lenght)
                case 'B':
                    self.up()
                    self.forward(self.lenght)
                    self.pendown()
                case '+':
                    self.right(self.teta)
                case '-':
                    self.left(self.teta)
                case '[':
                    self.turtleX = self.xcor
                    self.turtleY = self.ycor
                    self.turtleRotate = self.heading()
                case ']':
                    self.setx(self.turtleX)
                    self.sety(self.turtleY)
                    self.setheading(self.turtleRotate)
N = instinctTurtle()
N.setDrawingParameters()
N.createInstinct(3)
N.runInstinct()

При запуске выдаёт такую ошибку:

Traceback (most recent call last):
File "E:\Python\Библиотеки\turtleGeometry\src\turtleGeometry\main.py", line 142, in
N.createInstinct(3)
File "E:\Python\Библиотеки\turtleGeometry\src\turtleGeometry\main.py", line 108, in createInstinct
match self.axiom[j]:
IndexError: string index out of range

Предполагаю, что неправильно работает range, но не могу этого доказать.
P.S: При изменении в строчке с ошибкой j на 0, рисует одну итерацию, затем виснет. При замене j на 1 выскакивает такая же ошибка, что и была.
P.P.S. : в питоне почти что новичок, до этого прогал на JS, так что за camelCase и, возможно, неправильную стилизацию тапками не кидайте
  • Вопрос задан
  • 19 просмотров
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Python-разработчик
    10 месяцев
    Далее
  • Skillbox
    Python-разработчик
    10 месяцев
    Далее
  • Нетология
    Fullstack-разработчик на Python + нейросети
    20 месяцев
    Далее
Решения вопроса 1
Maksim_64
@Maksim_64
ML Engineer
Пытался самостоятельно реализовать код для рисования фрактальных фигур с помощью системы Лиденмайера
А почему элементарно дебажить не пробовал, посмотреть как изменяется длинна self.axiom и j?

если для тебя новость, что длинна self.axiom не постоянна, то посмотри ты же его переопределяешь после match case.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы