Cours#
Complément : dessiner avec la tortue
| Idée | une « tortue » se déplace sur l’écran en traçant un trait derrière elle. En lui donnant des ordres simples (avance, tourne), on dessine des figures. |
| Prérequis | le chapitre Les bases de la programmation Python (boucles et fonctions). Le complément est ouvert par l’activité débranchée qui précède. La partie 1 utilise des instructions en séquence puis la boucle for ; la partie 2, les fonctions. |
| Pourquoi | turtle rend visibles les boucles et les fonctions : on voit la répétition et la factorisation. C’est un formidable terrain d’entraînement. |
Pour les curieux (facultatif) — Un peu d’histoire
La « tortue » vient du langage Logo, créé en 1967 par Seymour Papert et Wally Feurzeig. À l’origine, c’était un vrai petit robot en forme de tortue qui traçait au sol ! Papert, mathématicien du MIT qui avait travaillé à Genève avec le psychologue Jean Piaget, en tire une idée forte : on apprend le mieux en fabriquant des choses. Dans les années 1980, des robots tortues comme celui ci-contre entrent dans les écoles : munis d’un feutre, ils dessinent sur une grande feuille posée par terre les figures programmées en Logo. Python a hérité de cette tortue, devenue virtuelle.

Un robot tortue de sol et ses dessins
Partie 1 — Des instructions en séquence, puis la boucle for#
Prendre la tortue en main#
Tout programme commence par importer le module, et se termine par turtle.done() (qui garde la fenêtre ouverte). Entre les deux, les ordres sont exécutés dans l’ordre, de haut en bas, un par un : c’est une séquence d’instructions.
import turtle
turtle.forward(100) # avance de 100 pas (pixels)
turtle.left(90) # tourne de 90 degres vers la gauche
turtle.forward(100)
turtle.done() # garde la fenetre ouverte
On peut raccourcir les noms en donnant un surnom au module, ce qui allège le code :
import turtle as t
t.forward(100)
t.left(90)
t.forward(100)
t.done()
Les ordres essentiels#
| Ordre | Effet |
|---|---|
forward(d) / fd(d) |
avance de d pas |
backward(d) / bk(d) |
recule de d pas |
left(a) / lt(a) |
tourne de a degrés vers la gauche |
right(a) / rt(a) |
tourne de a degrés vers la droite |
penup() / pendown() |
lever / baisser le stylo (se déplacer sans tracer) |
goto(x, y) |
aller au point de coordonnées (x, y) |
color("red") |
couleur du trait |
pensize(n) |
épaisseur du trait |
speed(n) |
vitesse (0 = très rapide, 1 = lent) |
circle(r) |
trace un cercle de rayon r |
Remarque
La tortue a une position et une direction (le « cap »). left/right ne font que changer le cap ; le trait n’apparaît qu’avec forward/backward. Les angles sont en degrés.
Répéter : la boucle for#
Dessiner un carré « à la main », c’est quatre fois la même chose :
import turtle as t
t.forward(100)
t.left(90)
t.forward(100)
t.left(90)
t.forward(100)
t.left(90)
t.forward(100)
t.left(90)
t.done()
… mais répéter, c’est exactement le rôle d’une boucle for. Le même carré, en bien plus court :
import turtle as t
for cote in range(4):
t.forward(100)
t.left(90)
t.done()
Règle 1 — Écrire une boucle for
for cote in range(4): répète 4 fois les lignes qui suivent et qui sont décalées vers la droite (4 espaces) : c’est le corps de la boucle. Ne pas oublier le deux-points en fin de ligne. La ligne t.done(), non décalée, n’est exécutée qu’une fois, après la boucle. (range a été présenté au chapitre Les bases de la programmation Python.)
Règle 2 — Le secret des polygones réguliers
Pour fermer un polygone régulier à n côtés, la tortue doit avoir tourné en tout de \(360^\circ\). À chaque sommet, elle tourne donc de \(\dfrac{360}{n}\) degrés.
Un hexagone (6 côtés, on tourne de \(360/6 = 60^\circ\)) devient immédiat ; l’étoile, dessinée à côté, demande deux tours complets (\(720^\circ\)) : ce sera un exercice.
import turtle as t
for cote in range(6): # hexagone
t.forward(80)
t.left(60)
t.done()
▶ Exercices d'application : exercices 15 et 16 (prédire une figure ; trouver l’angle)
Colorier une forme#
Pour remplir une figure, on encadre le tracé par begin_fill() et end_fill().
import turtle as t
t.color("orange")
t.begin_fill()
for i in range(3):
t.forward(120)
t.left(120)
t.end_fill()
t.done()
Partie 2 — Les fonctions#
Factoriser : les fonctions#
Quand on veut réutiliser un dessin, on en fait une fonction avec un paramètre pour le régler.
import turtle as t
def carre(cote):
for i in range(4):
t.forward(cote)
t.left(90)
carre(50)
carre(100) # on reutilise, avec une autre taille
t.done()
Encore mieux : une fonction pour n’importe quel polygone régulier.
def polygone(n, cote):
for i in range(n):
t.forward(cote)
t.left(360 / n)
polygone(3, 100) # triangle
polygone(8, 60) # octogone
Le plus beau : les rosaces#
Une rosace s’obtient en répétant une même figure tout en tournant un peu à chaque fois. Ici, 12 carrés, pivotés de \(360/12 = 30^\circ\) :
import turtle as t
def carre(cote):
for i in range(4):
t.forward(cote)
t.left(90)
for k in range(12): # 12 carres...
carre(100)
t.left(30) # ...pivotes de 30 degres
t.done()
Remarque
On tient là toute la puissance du complément : une fonction (le motif), une boucle (la répétition) et un petit tour à chaque étape suffisent à produire des figures très riches. À vous de jouer dans les exercices !
Pour les curieux (facultatif) — Liens avec d’autres chapitres
Ce complément met en images les boucles et les fonctions du chapitre Les bases de la programmation Python, et turtle est une bibliothèque, au sens vu dans ce même chapitre (section Les fonctions). En Terminale, la tortue tracera des fractales au chapitre La récursivité.
Mémo#
| Pour… | On utilise… |
|---|---|
| avancer / reculer | forward(d) / backward(d) |
| tourner | left(a) / right(a) |
| répéter un motif | une boucle for |
polygone régulier à n côtés |
tourner de 360 / n à chaque sommet |
| réutiliser un dessin | une fonction avec paramètre(s) |
| remplir | begin_fill() … end_fill() |
| se déplacer sans tracer | penup() … pendown() |