Exercices#
Complément : dessiner avec la tortue
Mode d’emploi
-
Niveau : ★ échauffement, ★★ classique (niveau bac), ★★★ défi ; les coups de pouce et les corrigés se déplient sous chaque exercice.
-
▶ À programmer et exécuter sur machine. Commencez toujours par
import turtle as tet terminez part.done(). -
Réflexes : une figure qui se répète \(\rightarrow\) une boucle
for; un motif à réutiliser \(\rightarrow\) une fonction ; un polygone àncôtés \(\rightarrow\) on tourne de360 / n. -
Usage de l’IA, indiqué sur chaque exercice : aucune ; en appui (déboguer, reformuler, vérifier ; la réponse finale est écrite et comprise par vous) ; l’exercice s’appuie sur une réponse d’IA. Voir la charte d’usage de l’IA.
Premiers tracés#
★ Exercice 1 — Le carré #
• essentiel
▶ Dessiner un carré de côté 100, sans boucle : on écrit les quatre « avancer, tourner de 90 » les uns après les autres.
Coup de pouce
Relisez dans le cours le tableau des instructions de la tortue : laquelle fait avancer, laquelle fait tourner ? Il faut un couple « avancer, tourner » par côté.
Corrigé
Remarque
Plusieurs écritures sont possibles ; on en donne une simple. Chaque programme suppose import turtle as t au début et t.done() à la fin. Rappel de la règle d’or : un polygone régulier à n côtés se ferme en tournant de 360 / n à chaque sommet.
Quatre fois « avancer de 100, tourner de 90 ».
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()
On verra dans le cours (§ 2) comment la boucle for évite de recopier quatre fois les mêmes lignes.
★ Exercice 2 — Le rectangle #
▶ Dessiner un rectangle de 200 de large sur 100 de haut. (Les quatre côtés ne sont pas tous égaux, mais on tourne toujours de 90.)
Coup de pouce
Faites le tour d’un rectangle dessiné sur une feuille en notant la longueur de chaque côté, dans l’ordre : quelle alternance observez-vous ?
Corrigé
Deux longueurs et deux largeurs, en alternance, en tournant toujours de 90.
import turtle as t
t.forward(200) # longueur
t.left(90)
t.forward(100) # largeur
t.left(90)
t.forward(200) # longueur
t.left(90)
t.forward(100) # largeur
t.left(90)
t.done()
Avec la boucle for du § 2, on répétera deux fois le couple « long côté / court côté ».
Répéter : la boucle for#
★ Exercice 3 — L’escalier #
• essentiel
▶ Dessiner un escalier de 5 marches : une marche, c’est « avancer, tourner, avancer, tourner ». Utiliser une boucle qui répète 5 fois ce motif.
Coup de pouce
Commencez par les quatre lignes d’une seule marche et vérifiez qu’à la fin la tortue regarde de nouveau dans la direction de départ. Placez ensuite ces lignes dans la boucle.
Corrigé
Chaque marche = un pas horizontal, un pas vertical. Après être monté, on se remet à l’horizontale avec right(90).
import turtle as t
for i in range(5):
t.forward(40) # horizontal
t.left(90)
t.forward(40) # vertical
t.right(90) # on repart a l'horizontale
t.done()
▷ Erreur fréquente. Tourner deux fois à gauche dans la marche : à la fin de la première marche, la tortue regarde vers la gauche et repart en arrière, l’escalier ne monte pas. Après avoir monté, il faut tourner à droite.
★★ Exercice 4 — Triangle et hexagone #
• essentiel
▶ Dessiner un triangle équilatéral (3 côtés), puis un hexagone (6 côtés). Dans chaque cas, de combien de degrés faut-il tourner à chaque sommet ?
Coup de pouce
Pour revenir à son point de départ dans la même direction, la tortue doit avoir tourné de \(360\) degrés en tout, répartis également entre les sommets.
Corrigé
Triangle : \(360 / 3 = \mathbf{120}\) degrés. Hexagone : \(360 / 6 = \mathbf{60}\) degrés.
import turtle as t
for i in range(3): # triangle equilateral
t.forward(120)
t.left(120)
for i in range(6): # hexagone
t.forward(80)
t.left(60)
t.done()
▷ Erreur fréquente. Tourner de \(60\) degrés pour le triangle, parce que ses angles mesurent \(60\) degrés : la tortue tourne de l’angle extérieur (\(180 - 60 = 120\)), et avec \(60\) la figure ne se ferme pas. La règle \(360 / n\) évite le piège.
★★ Exercice 5 — L’étoile à cinq branches #
▶ Dessiner une étoile à 5 branches.
Coup de pouce
Comme pour un polygone, on répète 5 fois « avancer, tourner ». Mais en traçant l’étoile, la tortue fait deux tours complets sur elle-même avant de revenir à son départ : \(2 \times 360\) degrés en tout.
Coup de pouce 2 (début de solution)
On répète 5 fois : avancer, puis tourner de 144 degrés.
Corrigé
En tournant de 144 degrés à chaque pointe, on « saute » un sommet sur deux, ce qui trace l’étoile.
import turtle as t
for i in range(5):
t.forward(200)
t.left(144)
t.done()
Réutiliser : les fonctions#
★★ Exercice 6 — La fonction carré #
• essentiel
▶ Écrire une fonction carre(cote) qui dessine un carré, puis l’appeler trois fois pour dessiner trois carrés de tailles différentes (par exemple \(50\), \(100\), \(150\)).
Coup de pouce
Placez la boucle du carré sous def carre(cote): (en la décalant vers la droite) et remplacez la longueur 100 par cote.
Corrigé
On définit carre une fois, puis on l’appelle avec des tailles différentes.
import turtle as t
def carre(cote):
for i in range(4):
t.forward(cote)
t.left(90)
carre(50)
carre(100)
carre(150)
t.done()
▷ Erreur fréquente. Écrire la définition def carre(cote): sans jamais l’appeler : rien ne se dessine. Définir une fonction ne l’exécute pas ; ce sont les lignes carre(50)… qui la font travailler.
★★ Exercice 7 — Un polygone au choix #
▶ Écrire une fonction polygone(n, cote) qui dessine un polygone régulier à n côtés de longueur cote. L’utiliser pour dessiner un triangle, un carré, puis un octogone.
Coup de pouce
Partez du carré (4 côtés, on tourne de 90) : remplacez le nombre de côtés par n et l’angle par le calcul qui convient pour n côtés.
Corrigé
On remplace l’angle par 360 / n : la même fonction dessine tous les polygones réguliers.
import turtle as t
def polygone(n, cote):
for i in range(n):
t.forward(cote)
t.left(360 / n)
polygone(3, 100) # triangle
polygone(4, 100) # carre
polygone(8, 60) # octogone
t.done()
Colorier une forme#
★★ Exercice 8 — Trois carrés colorés #
▶ Dessiner trois carrés côte à côte, remplis de trois couleurs différentes (par exemple rouge, vert, bleu).
Coup de pouce
Pour passer d’un carré au suivant sans tracer de trait, levez le stylo avec t.penup(), avancez avec t.forward(...), puis baissez-le avec t.pendown() ; pour remplir, encadrez le tracé par t.begin_fill() … t.end_fill().
Corrigé
On fabrique un « carré plein » (couleur \(+\) begin_fill/end_fill), et on déplace la tortue sans tracer entre deux carrés grâce à penup/forward/pendown. Après un carré, la tortue est revenue à son point de départ, tournée vers la droite : avancer de 100 (côté \(80\) plus un espace de \(20\)) la place au départ du carré suivant.
import turtle as t
def carre_plein(cote, couleur):
t.color(couleur)
t.begin_fill()
for i in range(4):
t.forward(cote)
t.left(90)
t.end_fill()
carre_plein(80, "red")
t.penup()
t.forward(100) # on se deplace sans tracer
t.pendown()
carre_plein(80, "green")
t.penup()
t.forward(100)
t.pendown()
carre_plein(80, "blue")
t.done()
Répéter en tournant : les rosaces#
★★ Exercice 9 — Rosace de carrés #
• essentiel
▶ En réutilisant la fonction carre(cote), dessiner une rosace formée de 12 carrés, chacun pivoté de 30 degrés par rapport au précédent. (Pourquoi 30 ? Parce que \(12 \times 30 = 360\).)
Coup de pouce
Dans une boucle de 12 tours : on dessine un carré, puis on fait pivoter la tortue avant le carré suivant. Pensez à recopier la définition de carre au début du programme.
Corrigé
On réutilise carre, répété 12 fois en pivotant de 30 degrés (\(12 \times 30 = 360\)).
import turtle as t
def carre(cote):
for i in range(4):
t.forward(cote)
t.left(90)
for k in range(12):
carre(100)
t.left(30)
t.done()
★★ Exercice 10 — Rosace de cercles #
▶ La tortue sait tracer un cercle avec t.circle(rayon). Dessiner une jolie « fleur » en répétant 18 cercles de rayon 80, en tournant un peu entre chacun. De combien faut-il tourner à chaque fois ?
Coup de pouce
Les 18 cercles doivent se répartir régulièrement sur un tour complet de \(360\) degrés.
Corrigé
18 cercles répartis sur un tour complet : on tourne de \(360 / 18 = \mathbf{20}\) degrés entre chaque.
import turtle as t
for k in range(18):
t.circle(80)
t.left(20)
t.done()
Défis#
★★★ Exercice 11 — La maison #
≈ 15 min
▶ Dessiner une maison : un carré pour la façade, surmonté d’un triangle pour le toit. (Il faudra bien placer la tortue et choisir les bons angles pour le toit.)
Coup de pouce
Dessinez la façade, puis amenez la tortue au coin haut-gauche. Le toit est un triangle équilatéral : réutilisez les angles trouvés à l’exercice « Triangle et hexagone ».
Coup de pouce 2 (début de solution)
for i in range(4):
t.forward(100)
t.left(90)
t.left(90)
t.forward(100)
(la tortue est au coin haut-gauche ; il reste à l’orienter vers le sommet du toit.)
Corrigé
On trace d’abord la façade (un carré). La tortue revient en bas à gauche ; on monte au coin haut-gauche, puis on pose un toit triangulaire (triangle équilatéral, angles de 120 degrés). Pourquoi right(30) ? Arrivée en haut, la tortue regarde vers le haut (\(90^\circ\) par rapport à l’horizontale) ; or le premier côté du toit monte à \(60^\circ\) de l’horizontale (angle d’un triangle équilatéral) : elle doit donc tourner de \(90 - 60 = 30\) degrés vers la droite.
import turtle as t
# La facade (carre de cote 100)
for i in range(4):
t.forward(100)
t.left(90)
# On monte au coin haut-gauche pour poser le toit
t.left(90)
t.forward(100)
t.right(30) # 90 - 60 = 30 : on vise le sommet du toit
# Le toit (triangle equilateral)
for i in range(3):
t.forward(100)
t.right(120)
t.done()
★★★ Exercice 12 — La spirale carrée #
≈ 10 min
▶ Dessiner une spirale : on tourne toujours de 90 degrés, mais la longueur du côté augmente à chaque tour (par exemple 10, 20, 30, …). Tracer une vingtaine de segments.
Coup de pouce
Une boucle for i in range(20) ; la longueur du côté change à chaque tour, elle peut valoir par exemple (i + 1) * 10.
Coup de pouce 2 (début de solution)
cote = 10
for i in range(20):
t.forward(cote)
(il reste à tourner, puis à faire grandir cote.)
Corrigé
On garde l’angle à 90 degrés, mais on augmente la longueur du côté à chaque tour.
import turtle as t
cote = 10
for i in range(20):
t.forward(cote)
t.left(90)
cote = cote + 10 # le cote grandit
t.done()
★★★ Exercice 13 — Du triangle à l’heptagone #
≈ 20 min
▶ Dessiner, côte à côte sur une même ligne, un triangle, un carré, un pentagone, un hexagone et un heptagone (7 côtés), tous de côté 50, en n’écrivant qu’une seule boucle pour enchaîner les cinq figures.
Coup de pouce
Réutilisez la fonction polygone(n, cote) de l’exercice « Un polygone au choix » dans une boucle où n prend les valeurs \(3\) à \(7\). Entre deux figures, déplacez la tortue sans tracer.
Coup de pouce 2 (début de solution)
for n in range(3, 8):
polygone(n, 50)
t.penup()
(il reste à avancer assez loin, puis à reposer le crayon.)
Corrigé
On réutilise la fonction polygone(n, cote) ; une seule boucle fait varier le nombre de côtés n de \(3\) à \(7\) (range(3, 8) s’arrête avant \(8\)). Après chaque figure, la tortue est revenue à son point de départ, dans la même direction (elle a tourné de \(360\) degrés en tout) : on lève le crayon, on avance vers la droite, et on le repose.
import turtle as t
def polygone(n, cote):
for i in range(n):
t.forward(cote)
t.left(360 / n)
for n in range(3, 8):
polygone(n, 50)
t.penup() # on se deplace sans tracer
t.forward(130) # assez loin pour ne pas chevaucher
t.pendown()
t.done()
Critiquer une réponse d’IA#
★★ Exercice 14 — Le pentagone de l’assistant #
▶ Un élève a demandé à un assistant d’IA : « Dessine un pentagone régulier de côté 100 avec turtle. » Voici la réponse obtenue :
import turtle as t
# Un pentagone a 5 cotes et ses angles valent 108 degres
for i in range(5):
t.forward(100)
t.left(108)
t.done()
-
La réponse est-elle correcte ? Avant d’exécuter, calculer de combien de degrés la tortue a tourné en tout à la fin de la boucle. Puis exécuter le programme : la figure est-elle fermée ?
-
Localiser l’erreur et corriger le programme.
Coup de pouce
Pour que la figure se ferme, la somme de toutes les rotations doit valoir \(360\) degrés. Combien vaut \(5 \times 108\) ?
-
Quelle vérification simple, faite avant de faire confiance à cette réponse, aurait suffi à détecter l’erreur ?
Corrigé
1. Non. La tortue tourne de \(5 \times 108 = 540\) degrés en tout, et non \(360\) : la figure ne se referme pas (la tortue termine loin de son point de départ, le cap retourné de \(180\) degrés).
2. L’assistant a confondu l’angle intérieur du pentagone (\(108\) degrés) avec l’angle dont la tortue doit tourner à chaque sommet. Règle du cours : pour fermer un polygone régulier à n côtés, elle tourne de 360 / n, soit ici \(360 / 5 = 72\) degrés. Il suffit de remplacer t.left(108) par t.left(72).
import turtle as t
for i in range(5):
t.forward(100)
t.left(72) # 360 / 5
t.done()
3. Vérifier que la somme des rotations vaut \(360\) degrés (\(5 \times 108\) n’y est pas), ou simplement exécuter le programme et regarder si la figure se ferme.