# -*- coding: utf-8 -*- from turtle import * # Génération de plante par grammaire L-system def initialisation(): # Définition des variables indépendantes de la grammaire global nbiteration, longueur nbiteration = 5 longueur = 3 def grammaire(): # Définition de la grammaire angle = 25.7 axiom = 'F' regle = 'F[+F]F[-F]F' #regle = 'F+FF-FF-F-F+F+FF-F-F+F+FF+FF-F' return angle, axiom, regle def production(axiom, regle): # Génération de la chaine de caractères i = 0 while i < nbiteration: j = 0 axiom2 = '' while j < len(axiom): pointeur1 = axiom[j] # Symboles non terminaux if pointeur1 == 'F': # remplacement de la règle dans l'axiome axiom2 = axiom2 + regle # Symboles terminaux if pointeur1 == '+': axiom2 = axiom2 + '+' if pointeur1 == '-': axiom2 = axiom2 + '-' if pointeur1 == '[': axiom2 = axiom2 + '[' if pointeur1 == ']': axiom2 = axiom2 + ']' j = j + 1 axiom = axiom2 i = i + 1 print axiom return axiom def interpretation(angle, axiom): # Interprétation de la chaine par turtle k = 0 laposition = [] langle = [] while k < len(axiom): pointeur2 = axiom[k] # Interpréation if pointeur2 == 'F': forward(longueur) elif pointeur2 == '+': left(angle) elif pointeur2 == '-': right(angle) elif pointeur2 == '[': # mémorisation de la position courante laposition.append(position()) langle.append(heading()) elif pointeur2 == ']': # retour à la dernière position et suppression de celle-ci goto(laposition[len(laposition)-1][0], laposition[len(laposition)-1][1]) del laposition[len(laposition)-1] setheading(langle[len(langle)-1]) del langle[len(langle)-1] k = k + 1 # Placement initial de la tortue up() backward(400) down() # Programme principal ## gram[0] retourne l'angle ## gram[1] retourne l'axiome ## gram[2] retourne la règle initialisation() gram = grammaire() axio = production(gram[1], gram[2]) interpretation(gram[0], axio) #quit()