TP4 - Bibliothèque turtle
¶

A. Ridard

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.

In [ ]:
# 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.

In [ ]:
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).

In [ ]:
# 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

In [ ]:
# réponse

exitonclick()
TurtleScreen._RUNNING = True

Dessiner un disque rouge de rayon 60

In [ ]:
# réponse

exitonclick()
TurtleScreen._RUNNING = True

Dessiner le drapeau du Japon

No description has been provided for this image
In [ ]:
# réponse

exitonclick()
TurtleScreen._RUNNING = True

Exercice 2 (pavillon maritime de Suisse)¶

Dessiner un rectangle rouge de longueur 300 et de largeur 200

In [ ]:
# réponse

exitonclick()
TurtleScreen._RUNNING = True

Dessiner le pavillon maritime de Suisse

No description has been provided for this image
In [ ]:
# réponse

exitonclick()
TurtleScreen._RUNNING = True

Exercice 3 (Yin et Yang)¶

Dessiner le Yin et Yang

No description has been provided for this image
à l'aide des indications suivantes :
No description has been provided for this image
In [ ]:
# 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).

In [ ]:
# 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

No description has been provided for this image
In [ ]:
# réponse

exitonclick()
TurtleScreen._RUNNING = True

Dessiner un carré de côté 100

No description has been provided for this image
In [ ]:
# réponse

exitonclick()
TurtleScreen._RUNNING = True

Dessiner un pentagone de côté 100

No description has been provided for this image
In [ ]:
# réponse

exitonclick()
TurtleScreen._RUNNING = True

Dessiner un hexagone de côté 100

No description has been provided for this image
In [ ]:
# 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
    No description has been provided for this image
In [ ]:
# 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°.

No description has been provided for this image
In [ ]:
# réponse   

exitonclick()
TurtleScreen._RUNNING = True

Dessiner 6 fois ce losange pour représenter une fleur.

No description has been provided for this image
In [ ]:
# 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...

In [ ]:
# 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().

In [ ]:
# réponse

exitonclick()
TurtleScreen._RUNNING = True

Exercice 6 (cube de Rubik)¶

Dessiner une face du cube, par exemple la face rouge.

No description has been provided for this image
In [ ]:
# réponse

exitonclick()
TurtleScreen._RUNNING = True