Echanges autour d'EduPython.
Vous n'êtes pas identifié(e).
Bonjour à tous,
j'ai utilisé le module turtle pour introduire la programmation fonctionnelle en seconde,
c'est plutôt pris de façon ludique par les élèves, ça change des défis France IOI et Algoréa sur lesquels on travaille d'habitude.
La programmation récursive n'est pas au programme de seconde, de plus la fonction vonKoch qui produit récursivement le tracé de la courbe de VonKoch de niveau n est un mauvais exemple d'introduction à la récursivité car l'algorithme n'est pas facile à concevoir ni à comprendre. L'objectif est de faire utiliser la fonction vonKoch pour tracer le flocon de Von Koch ou l'antiflocon de Von Koch, faire des animations modestes avec le module turtle.
Le sujet des fractales étant vaste, je propose de lancer un espace d'échange sur la programmation fonctionnelles avec turtle.
################################################################
Programme ''animation'' antiflocon de Von Koch du niveau 0 au niveau 7
from turtle import * from sys import setrecursionlimit setrecursionlimit(10**8) # réglage de la limite de récursion (nb appels de fonctions limité à 1000 en python) from time import sleep # permet de suspendre momentanément l'exécution du programme # fonction principale main -> rend python plus performant et permet # l'utilisation de l'instruction ''nonlocal'' ligne 11, etc.. def main(): def vonKoch(niveau): # fonction récursive, fonction qui s'appelle elle même nonlocal taille # accès à la variable taille...voir portée de variable pour les curieux if niveau == 0: forward(taille) else: vonKoch(niveau-1) # la fonction s'appelle elle même left(60) vonKoch(niveau-1) # la fonction s'appelle elle même right(120) vonKoch(niveau-1) # la fonction s'appelle elle même left(60) vonKoch(niveau-1) # la fonction s'appelle elle même def brancheAntiflocon(niveau): nonlocal taille begin_fill() vonKoch(niveau) right(180) vonKoch(niveau) end_fill() # la méthode sur les string format(niveau) permet d'insérer la valeur de niveau # dans la chaine de caractères au niveau de la balise {} def antiflocon(niveau): nonlocal taille up() clear() angle=90 for _ in range(3): up() goto(0,-75) setheading(angle) angle+=120 down() brancheAntiflocon(niveau) title("Antiflocon de VonKoch de niveau {}".format(niveau)) #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # Paramétrages bgcolor("orange") # back ground color: couleur d'arrière plan color('white', 'green') # color(penColor,fillColor) hideturtle() pensize(0) speed(0) #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # tracé des antiflocons du niveau 0 à 7 for niveau in range(8): # niveau prend toutes les valeurs de 0 à 7 taille = 333 / (3**niveau) tracer(False) antiflocon(niveau) tracer(True) sleep(7) # met en veille le programme pendant 7 seconde mainloop() main() # Remarque: les fonctions récursives ne sont pas au programme de seconde # la fonction VonKoch est une fonction difficile à comprendre pour un débutant # en programmation mais c'est un exemple classique de fractale mathématique
################################################################
Programme ''animation" courbe de Von Koch niveau 1 à 7
from turtle import * from sys import setrecursionlimit setrecursionlimit(10**8) from time import time, sleep def main(): def vonKoch(niveau): nonlocal taille if niveau==0: forward(taille) else: vonKoch(niveau-1) left(60) vonKoch(niveau-1) right(120) vonKoch(niveau-1) left(60) vonKoch(niveau-1) bgcolor("black") color('#0000ff', '#55ffff') # color(penColor,fillColor) hideturtle() pensize(0) for niveau in range(8): up() goto(-500,-200) clear() down() taille=999/(3**niveau) tracer(False) # pour obtenir directement le résultat begin_fill() vonKoch(niveau) end_fill() title("Branche de VonKoch de niveau {}".format(niveau)) tracer(True) # remarque: si on met un seul tracer(False) avant la boucle ça plante ... sleep(7) # met en veille le programme pendant 7 seconde mainloop() main()
Hors ligne