Пытался самостоятельно реализовать код для рисования фрактальных фигур с помощью системы Лиденмайера.
Вот код (геном 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 и, возможно, неправильную стилизацию тапками не кидайте