TP4 - Bibliothèque turtle ¶
Python fournit certaines fonctions pour les besoins les plus courants (type, int, print, input, sum, len, ...). Il contient également de nombreuses bibliothèques fournissant des fonctions supplémentaires plus spécifiques. Nous les introduirons, au fur et à mesure, selon nos besoins...
Commençons ici par la bibliothèque turtle qui permet de reproduire les fonctionnalités de base du langage de programmation éducatif Logo. Les fonctions de ce langage font se déplacer une tortue munie d'un crayon à la surface d'une feuille virtuelle. On peut alors observer l'exécution du programme à travers les mouvements de la tortue et le tracé qu'elle laisse derrière elle.
# on importe toutes les fonctions de la bibliothèque
from turtle import *
Les fonctions de turtle permettent d'orienter et déplacer la tortue dans le plan cartésien à deux dimensions.
$$ \begin{array}{|l|l|} \hline \textrm{\textbf{fonction}} & \textrm{\textbf{description}}\\ \hline \hline \textrm{goto(x,y)} & \textrm{aller au point de coordonnées (x,y)} \\ \hline \textrm{forward(d)} & \textrm{avancer de la distance d} \\ \hline \textrm{backward(d)} & \textrm{reculer de la distance d} \\ \hline \textrm{left(a)} & \textrm{pivoter à gauche de l'angle a} \\ \hline \textrm{right(a)} & \textrm{pivoter à droite de l'angle a} \\ \hline \textrm{circle(r,a)} & \textrm{tracer un arc de cercle de rayon r et d'angle a} \\ \hline \textrm{dot(r)} & \textrm{tracer un point de rayon r} \\ \hline \end{array} $$
La tortue commence au point de coordonnées (0,0), situé au centre de l'écran, et est orientée par l'axe des abscisses. Les coordonnées et distances sont mesurées en pixels et les angles en degrés. Les arcs de cercles sont parcourus dans le sens trigonométrique si l'angle est positif, et sens horaire si l'angle est négatif.
forward(60)
left(120)
forward(60)
right(90)
circle(60,300)
right(90)
forward(60)
goto(0,0)
# la fonction suivante termine l'exécution du programme en cliquant sur la figure
exitonclick()
TurtleScreen._RUNNING = True
S'ajoute à cette base des fonctions permettant de modifier les dessins produits par chacun des déplacements.
$$ \begin{array}{|l|l|} \hline \textrm{\textbf{fonction}} & \textrm{\textbf{description}} \\ \hline \hline \textrm{up()} & \textrm{relever le crayon (et interrompre le dessin)} \\ \hline \textrm{down()} & \textrm{redescendre le crayon (et reprendre le dessin)} \\ \hline \textrm{width(e)} & \textrm{fixer à e l'épaisseur du trait} \\ \hline \textrm{color(c)} & \textrm{sélectionner la couleur c pour les traits} \\ \hline \textrm{begin\_fill()} & \textrm{activer le mode remplissage} \\ \hline \textrm{end\_fill()} & \textrm{désactiver le mode remplissage} \\ \hline \textrm{fillcolor(c)} & \textrm{sélectionner la couleur c pour le remplissage} \\ \hline \end{array} $$
Par défaut, les tracés sont faits en noir avec une épaisseur d'un pixel. Les couleurs peuvent être désignées par leur nom sous la forme de chaînes de caractères : "black", "white", "grey", "pink", "purple", "blue", "green", "yellow", "orange", "red", "brown". Toute la surface contenue à l'intérieur de la trajectoire de la tortue pendant une période de temps où le mode remplissage est activé prend la couleur choisie pour le remplissage (noir par défaut).
# rectangle épais
width(4)
color("blue")
goto(60,0)
goto(60,110)
goto(0,110)
goto(0,0)
# déplacement
up()
goto(5,5)
down()
# sablier gris
width(1)
color("red")
fillcolor("grey")
begin_fill()
goto(55,5)
goto(5,105)
goto(55,105)
goto(5,5)
end_fill()
# la fonction suivante termine l'exécution du programme en cliquant sur la figure
exitonclick()
TurtleScreen._RUNNING = True
Enfin, quelques fonctions permettent de configurer l'action de la bibliothèque turtle en général.
$$ \begin{array}{|l|l|} \hline \textrm{\textbf{fonction}} & \textrm{\textbf{description}} \\ \hline \hline \textrm{reset()} & \textrm{tout effacer et recommencer à zéro} \\ \hline \textrm{speed(s)} & \textrm{définir la vitesse de déplacement de la tortue} \\ \hline \textrm{title(t)} & \textrm{donner le titre t à la fenêtre de dessin} \\ \hline \textrm{ht()} & \textrm{ne montre plus la tortue (seulement le dessin)} \\ \hline \end{array} $$
Les vitesses possibles sont à choisir parmi les chaînes de caractères "slowest", "slow", "normal", "fast", "fastest" ou parmi les entiers de 0 à 10 : 1 est le plus lent, 10 le plus rapide et 0 le déplacement instantané.
Partie 1 : dessiner "à la main"¶
Exercice 1 (drapeau du Japon)¶
Dessiner un rectangle de longueur 300 et de largeur 200
# réponse
exitonclick()
TurtleScreen._RUNNING = True
Dessiner un disque rouge de rayon 60
# réponse
exitonclick()
TurtleScreen._RUNNING = True
Dessiner le drapeau du Japon
# réponse
exitonclick()
TurtleScreen._RUNNING = True
Exercice 2 (pavillon maritime de Suisse)¶
Dessiner un rectangle rouge de longueur 300 et de largeur 200
# réponse
exitonclick()
TurtleScreen._RUNNING = True
Dessiner le pavillon maritime de Suisse
# réponse
exitonclick()
TurtleScreen._RUNNING = True
Exercice 3 (Yin et Yang)¶
Dessiner le Yin et Yang
à l'aide des indications suivantes :
# réponse
exitonclick()
TurtleScreen._RUNNING = True
Partie 2 : automatiser un dessin¶
Nous allons exploiter la boucle for (cf. TP 3) pour simplifier le dessin des formes symétriques.
Rappel : que représente i dans l’expression for i in range(n) ?
C’est une variable d’itération appelée aussi indice.
Par défaut, cette variable commence à 0 et augmente de 1 à chaque répétition jusqu’à n-1.
Pour visualiser cette valeur, nous pouvons l’afficher dans le dessin avec l’instruction write(i).
# exemple
for i in range(5):
write(i)
forward(20)
left(90)
forward(20)
right(90)
forward(100)
exitonclick()
TurtleScreen._RUNNING = True
Exercice 4 (polygones réguliers)¶
Dessiner un triangle de côté 100
# réponse
exitonclick()
TurtleScreen._RUNNING = True
Dessiner un carré de côté 100
# réponse
exitonclick()
TurtleScreen._RUNNING = True
Dessiner un pentagone de côté 100
# réponse
exitonclick()
TurtleScreen._RUNNING = True
Dessiner un hexagone de côté 100
# réponse
exitonclick()
TurtleScreen._RUNNING = True
Ecrire un programme :
- qui demande à l'utilisateur de saisir un entier n inférieur à 20, puis un entier d inférieur à 100
- qui dessine le polygone régulier à n côtés de longueur d
# réponse
exitonclick()
TurtleScreen._RUNNING = True
Exercice 5 (losange et fleur)¶
Dessiner un losange de côté 100 dont les angles valent 60° et 120°.
# réponse
exitonclick()
TurtleScreen._RUNNING = True
Dessiner 6 fois ce losange pour représenter une fleur.
# réponse
exitonclick()
TurtleScreen._RUNNING = True
On peut définir une fonction pour simplifier le code.
Cette notion essentielle fera l'objet du TP 5...
# exemple
def carre():
for i in range(4):
forward(100)
left(90)
for i in range (3):
carre()
forward(100)
exitonclick()
TurtleScreen._RUNNING = True
Simplifier le code qui permet de représenter une fleur en définissant une fonction losange().
# réponse
exitonclick()
TurtleScreen._RUNNING = True
Exercice 6 (cube de Rubik)¶
Dessiner une face du cube, par exemple la face rouge.
# réponse
exitonclick()
TurtleScreen._RUNNING = True