Afficher Turtle

Identification

Infoforall

3 - Séquentialité avec Turtle


Dans cette activité, vous allez apprendre à réaliser de petits dessins en utilisant Python et son module Turtle.

Ce module d'initiation à la programmation se nomme Turtle car on peut utiliser une icône de tortue qui se déplace sur l'écran et qui dessine peu à peu un dessin en exécutant ce qu'on lui demande.

Une rose rouge
Une rose rouge

Cette activité vous permettra de comprendre qu'un programme s'exécute ligne par ligne et qu'on ne passe à la ligne suivante que lorsque la ligne actuelle a été entiérement traitée.

Ce principe se nomme la séquentialité.

Logiciel nécessaire pour l'activité : Python 3 : Thonny, IDLE ou le site repl.it ...

Evaluation : 6 quesstions

 questions 05-07-12-15-17

 question 20

DM 🏠 : Oui, Pyrates !

Documents de cours PDF : .PDF

Sources latex : .TEX et entete.tex et licence.tex

Résumé : Version HTML ou imprimable ou ou PDF (couleur ou gris)

1 - Voir la séquentialité en mode debug

RAPPELS

(Rappel) 1.1 VARIABLE - Affectation

Affectation

Les variables servent à stocker des données.

une sorte de boite
Image issue de http://hcc-cs.weebly.com/variables.html

Le mécanisme d'affectation de variables consiste à créer une liaison entre un NOM et un CONTENU MEMOIRE.

1
a = 10

L'opérateur = permet de créer une variable nommée a et y stocker la valeur 10.

On peut représenter naïvement ce mécanisme comme une boite qui porte un NOM et dans laquelle on place le CONTENU associé.

Boite a contenant 10

Néanmoins, une affectation est simplement un moyen de faire la liaison entre un NOM et un CONTENU en mémoire :

une sorte de liaison
Notation dans les algorithmes

Notez bien que c'est le CONTENU 10 qu'on associe au NOM a : on va de la droite vers la gauche. C'est pour cela qu'on écrit a  10 dans les algorithmes.

Lecture du contenu via la console interactive

Pour obtenir le contenu d'une variable, il suffit de taper le nom de cette variable dans la console interactive. Nous verrons que cela n'est pas suffisant dans un programme.

(Rappel) 1.2 - VARIABLE - Incrémentation

Incrémenter veut dire modifier la valeur d'une variable en lui ajoutant une autre valeur.

Incrémenter de 1 veut dire qu'on augmente la valeur de 1 : 45 passe à 46.

Ce +1 est la valeur par défaut en l'absence d'information.

Incrémenter de 2 veut dire qu'on augmente la valeur de 2 : 45 passe à 47.

Incrémenter de -1 veut dire qu'on augmente la valeur de -1 : 45 passe à 44.

On dit plutôt décrémenter.

Pour incrémenter a de 1 : a = a + 1

  1. a = a + 1 : évaluer la valeur actuelle de a,
  2. a = a + 1 : évaluer (calculer) ce que donne cette valeur + 1 et
  3. a = a + 1 : affecter le résultat de cette évaluation à a.
1 2
a = 10 a = a + 1

En ligne 1, on associe 10 à a.

En ligne 2, on évalue a + 1, ce qui donne 11. On place ENSUITE ce résultat de 11 dans a : au final, a contient donc 11.

(Rappel) 1.3 FONCTION : notion
ENTREE(S)  ⇒   Fonction   ⇒  SORTIE

Description

Les fonctions sont des instructions particulières qui :

  • reçoivent des données d'entrée et
  • renvoient leur réponse en sortie.

Un exemple avec la fonction VALEUR_ABSOLUE qui n'attend qu'une entrée (un nombre) et qui renvoie la valeur absolue du nombre (le même nombre mais sans son signe).

-12  ⇒   Fonction VALEUR ABSOLUE   ⇒  12

12  ⇒   Fonction VALEUR ABSOLUE   ⇒  12
D'autres exemples
5; 10; 50; 0; 20  ⇒   Fonction MAXIMUM   ⇒  50

5; 10; 50; 0; 20  ⇒   Fonction MINIMUM   ⇒  0

5; 10; 50; 0; 20  ⇒   Fonction SOMME   ⇒  85
(Rappel) 1.4 - FONCTION : native

Une fonction native est une fonction présente de base dans Python.

On en fait l'appel en notant son nom et en fournissant entre parenthèses les entrées séparées par des virgules.

nom_fonction(a, b, c, d...)

Dans le cadre de ce site, les fonctions natives sont toujours écrites en vert.

Fonction VALEUR ABSOLUE : cette fonction se nomme abs() en Python.

>>> abs(-12) 12 >>> abs(12) 12

Fonction MAXIMUM : cette fonction se nomme max() en Python.

>>> max(10, 0, 50, 40) 50

01° Ouvrir Thonny. Aller dans le menu Affichage/Views et sélectionner Variables si l’onglet Variables n’est pas ouvert.

Vous devriez constater qu'une nouvelle fenêtre est désormais disponible dans la partie droite de Thonny :

Thonny
Ecran de Thonny

Dans la zone Console (celle avec 3 chevrons >>>), tapez les instructions (en jaune).

>>> 50 + 2 Effet ? >>> a = 50 Effet ? >>> b = 20 Effet ?

Question

Que constate-on dans l'onglet variable de Thonny ?

...CORRECTION...

>>> 50 + 2 52 Effet ? Python évalue l'expression 50 + 2 à 52 et l'affiche dans la console >>> a = 50 Effet ? Affectation de la variable a, référençant 50 (sans affichage dans la console) >>> b = 20 Effet ? Affectation de la variable b, référençant 20 (sans affichage)

02-A° A votre avis, que va-t-on maintenant voir dans la console si on tape ceci :

>>> a + b Effet ?

...CORRECTION...

Affichage car on ne stocke pas le résultat.

>>> a + b 70 Effet ? Python évalue a + b à 70 et l'affiche dans la console

02-B° A votre avis, que va-t-on maintenant voir dans la console si on tape ceci :

>>> c = a + b Effet ?

...CORRECTION...

Aucun affichage puisqu'on stocke le résultat.

>>> c = a + b Effet ? Python évalue a + b à 70 et place le résultat dans la variable c. Aucun affichage du coup.

02-C° A votre avis, comment sera évaluée cette expression comportant un appel de fonction ? Vérifiez ensuite votre réponse.

>>> 10 * max(5, 2, 3, 6, 1)

...CORRECTION...

L'interpréteur va commencer par évaluer max(5, 2, 3, 6, 1) à 6.

Ensuite, il suffit de multiplier cela par 10.

On va donc obtenir 60.

>>> 10 * max(5, 2, 3, 6, 1) 60

03 ✔° Utiliser l'animation suivante pour être certain de bien visualiser le déroulement progressif que nous voulons observer aujourd'hui.

1 2 3
a = 200 b = a * 2 fin du programme

CLIQUEZ ICI POUR VOIR LE DEROULEMENT :

Comme on peut le voir, le programme se déroule séquentiellement : une ligne à la fois, en partant de la ligne du haut et en se dirigeant vers le bas. L'ordinateur va donc évaluer et exécuter une ligne à la fois.

NOUVEAUTES : Mode debug de Thonny :

1.5 Mode DEBUG de Thonny

On peut demander à Thonny d'exécuter un programme ligne par ligne.

  1. Pour lancer le programme en mode DEBUG : appuyez sur le petit insecte (bug), celui à droite de la flèche verte.
  2. L'interpréteur va alors surligner en jaune la prochaine ligne qu'il désire exécuter.
  3. Pour donner l'autorisation d'exécuter la ligne surlignée : appuyez sur le bouton à droite de l'insecte.

A vous de valider progressivement les lignes de façon à tracer la forme en visualisant bien que Python les exécute une à une dans l'ordre prédéfini.

Exemple avec un programme linéaire

Voici le programme avant d'appuyer sur quoi que ce soit :

Debug Thonny

Après avoir appuyé sur DEBUG, Thonny attend qu'on lui donne l'autorisation d'exécuter la première ligne en appuyant sur la touche à droite de DEBUG :

Debug Thonny

Après avoir autorisé la ligne, on voit que la variable a a été créée. Thonny attend maintenant l'autorisation d'effectuer la ligne 2 :

Debug Thonny
Ecran de Thonny

04° Réfléchir à ce que va faire le programme ci-dessous, pas à pas. Activer ensuite le mode DEBUG pour parvenir à exécuter le programme ligne par ligne.

1 2 3 4
a = 20 b = 10 c = a * b print(c)

...CORRECTION...

Ligne 1, on déclare a comme valant 20.

Ligne 2, on déclare b comme valant 10.

Ligne 3, on déclare c comme valant 20 * 10, soit 200.

Ligne, on demande l'affichage de c dans la console. On observe donc 200.

✌ 05° Réfléchir à ce que va faire le programme ci-dessous, pas à pas. Activer ensuite le mode DEBUG pour parvenir à exécuter le programme ligne par ligne. Que vaut c à la fin ? En quoi cela est-il lié à la séquentialité de l'exécution ligne par ligne ?

1 2 3 4 5
a = 5 b = 10 c = a + b b = 100 print(c)

2 - Module Turtle

La séquentialité est une notion fondamentale : lorsqu'on fournit un programme comportant plusieurs lignes à l'interpréteur, il ne les exécute pas au hasard. Il les exécute ligne par ligne, en commençant par la première et en passant à la suivante uniquement après avoir correctement exécuté la ligne en cours.

Aujourd'hui, vous allez dessiner un peu, en expliquant à la machine ce qu'elle doit faire, étape par étape, instruction par instruction.

06-A ✔° Utiliser les instructions suivantes une à une pour visualiser leurs effets.

Encart d'instructions n°1

>>> import turtle as trt

✱ On demande d'importer dans l'interpréteur les instructions permettant de dessiner.

✱ On voit que trt est apparu dans la zone des variables : nous allons maintenant avoir le droit d'utiliser le module turtle.

Encart d'instructions n°2

>>> crayon = trt.Turtle()

Notez bien la présence d'un T majuscule et d'un t minuscule, ainsi que de parenthèses ().

✱ On crée une variable crayon à partir du module Turtle. Cette variable contient la référence-mémoire du crayon et elle nous permettra d'agir sur ce crayon.

✱ Visuellement, cela ouvre une fenêtre graphique et y place une flèche orientée vers la droite : la flèche symbolise le crayon.

06-B ✔° Modifier maintenant la disposition des fenêtres d'affichage pour obtenir quelque chose qui ressemble à ceci 

  • Le site à gauche
  • Thonny en haut à droite
  • La fenêtre graphique de Turle en bas à droite

Faire appel à l'enseignant si vous ne parvenez pas à obtenir ce visuel. Sinon, le reste de l'activité n'aura aucun sens.

06-C ✔° Voici la suite des instructions. Tester chaque instruction dans la console :

Encart d'instructions n°3 (orientation relative)

>>> crayon.right(90)

✱ Visuellement : la flèche tourne de 90° vers la droite à partir de son orientation actuelle.

>>> crayon.left(90)

✱ Visuellement : idem, on tourne de 90° vers la gauche à partir de son orientation actuelle.

Encart d'instructions n°4 (déplacement relatif)

>>> crayon.forward(50) >>> crayon.forward(100) >>> crayon.forward(-150)

✱ Visuellement :

  • la flèche avance de 50 pixels dans le sens indiqué et trace un trait noir.
  • la flèche avance de 100 pixels et trace un trait noir.
  • la flèche recule de 150 pixels par rapport au sens indiqué, et trace un trait noir.
>>> crayon.backward(50)
  • la flèche recule de 50 pixels. C'est l'équivalent de dire forward(-50).

Encart d'instructions n°5

Notez bien qu'on utilise "red" et pas juste red. Nous verrons bientôt que ces guillemets indiquent qu'on fournit une chaîne de caractères.

>>> crayon.pencolor("red")

✱ On change la couleur du crayon.

>>> crayon.forward(50)

✱ On avance en traçant en rouge

Encart d'instructions n°6

>>> crayon.penup()

✱ On empêche l'objet de tracer des traits (symboliquement, on lève la pointe du crayon virtuel.

>>> crayon.forward(-200)

✱ On recule sans faire de nouvelle trace puisque le crayon est levé

>>> crayon.pendown()

✱ On permet à nouveau à l'objet de tracer des traits (symboliquement, on abaisse la pointe du crayon virtuel sur la feuille.

>>> crayon.forward(200)

✱ On avance en traçant un trait puisque le crayon est abaissé.

Encart d'instructions n°7

>>> crayon.clear()

✱ On fait disparaître les traits créés par l'objet nommé crayon.

Encart d'instructions n°8

>>> crayon.home()

✱ On ramène le crayon au centre et on le replace en orientation vers la droite. Comme le crayon était 'posé', il a dessiné un trait.

Juste un mot sur ... fonction et méthode

Avec l'apparition des parenthèses entre lesquelles on transmet (ou pas) des données, on voit que forward(), pencolor() ou encore penup() sont des fonctions mais dont la syntaxe d'utilisation est un peu étrange.

Ces fonctions particulières qui agissent sur l'objet placé devant elles se nomment des méthodes.

Quelle est cette syntaxe ? On donne le nom d'un objet sur lequel agir, on place un point et on donne ensuite le nom de la méthode et les données sur lesquelles la méthode devra travailler :

objet.methode(données)

>>> crayon.forward(200)

Traduction : va chercher le crayon, et fait le avancer de 200.

✌ 07° Dans la console, déclarez un crayon puis utilisez le pour dessiner un carré de 200 pixels de côté.

Les couleurs des côtés devront être "red", "pink", "blue" et "orange".

...CORRECTION...

Si vous n'avez plus de crayon en mémoire, ni même le module Turtle, il faut retaper ceci :

>>> import turtle as trt >>> crayon = trt.Turtle()

Ensuite, on part sur la création de la forme elle-même/

>>> crayon.clear() >>> crayon.penup() >>> crayon.home() >>> crayon.pendown() >>> crayon.pencolor('red') >>> crayon.forward(200) >>> crayon.right(90) >>> crayon.pencolor('pink') >>> crayon.forward(200) >>> crayon.right(90) >>> crayon.pencolor('blue') >>> crayon.forward(200) >>> crayon.right(90) >>> crayon.pencolor('orange') >>> crayon.forward(200) >>> crayon.right(90)
08° Le dessin serait-il le même si on traçait les instructions dans un ordre aléatoire ?

...CORRECTION...

Non, nous obtiendrions un dessin différent.

09° Si je vous demande de tracer un nouveau carré, qu'allez-vous devoir faire ? Est-ce que ça a l'air sympa comme idée ? Que constatez-vous si vous placez la souris au dessus de la console et que vous tapez plusieurs fois sur la touche FLECHE DU HAUT ?

...CORRECTION...

Pour tracer un nouveau carré, il faudra retaper toutes les instructions... A part la première (celle où on crée le crayon) si vous n'avez pas encore relancé Thonny.

Et non, l'idée d'avoir à tout retaper à chaque fois qu'on veut tracer un carré n'a rien de réjouissant !

On constate par contre qu'on récupère les dernières choses fournies à la console en utilisant la flèche HAUT.

Pratique.

Mais, on peut faire mieux avec un programme !

3 - Programme et Dessin

Si vous êtes ici, vous avez dû vous rendre compte de la séquentialité : à la moindre erreur, pas possible de repartir en arrière. L'interpréteur a exécuté votre ligne, tant pis...

Nous allons maintenant quitter la console et écrire des programmes qui réalisent directement nos dessins.

Nous allons maintenant revoir comment programmer et enregistrer plutôt que d'exécuter immédiatement dans la console. Nous allons utiliser une nouvelle zone de Thonny.

Nous allons donc maintenant travailler dans la zone du haut, celle qui permet de créer des scripts.

Nous allons créer au début un petit programme qui ne fait que 2 choses :

  1. Créer un crayon
  2. Utiliser le crayon pour dessiner un rectangle

10 ✔° Copier-coller le programme suivant dans la zone du haut de Thonny, celle permettant de créer le script (celle sans les trois chevrons) :

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
import turtle as trt crayon = trt.Turtle() crayon.pencolor("red") crayon.forward(200) crayon.right(90) crayon.pencolor("blue") crayon.forward(200) crayon.right(90) crayon.pencolor("red") crayon.forward(200) crayon.right(90) crayon.pencolor("blue") crayon.forward(200) crayon.right(90)

11 ✔° Utiliser FILE - SAVE AS ou FICHIER - ENREGISTRER SOUS pour enregistrer le fichier (que vous nommerez acti_turtle.py) dans un dossier que vous parviendrez à retrouver facilement. Le mieux est donc d'ouvrir votre dossier personnel sur le réseau, d'y créer un repertoire NSI, puis un répertoire PYTHON3 et de sauvegarder votre programme dans ce sous-répertoire.

Si vous ne savez pas gérer cela, pensez à demander de l'aide !

Vous devriez voir apparaître ceci :

C'est comme si vous aviez tapé ces instructions dans la console SAUF que, si vous voulez tracer un autre rectangle, il suffit de réappuyer sur la flèche verte pour relancer le script.

✌ 12° Modifier le programme pour tracer un rectangle vert :

13 ✔° Nous allons demander à l'interpréteur de l'exécuter ligne par ligne.

  1. Pour lancer le programme en mode DEBUG : appuyez sur le petit insecte (bug), celui à droite de la flèche verte.
  2. L'interpréteur va alors surligner en jaune la prochaine ligne qu'il désire exécuter.
  3. Pour donner l'autorisation d'exécuter la ligne surlignée : appuyez sur le bouton à droite de l'insecte.

A vous de valider progressivement les lignes de façon à tracer la forme en visualisant bien que Python les exécute une à une dans l'ordre prédéfini.

Maintenant que vous savez créer un programme, voyons quelques nouveautés sur Turtle.

14 ✔° Utiliser le programme ci-dessous qui montrent comment utiliser deux nouvelles méthodes de Turtle.

  • goto() permet de déplacer le crayon en fournissant les coordonnées x et y à atteindre (en utilisant le repère cartésien classique).
  • write() d'écrire un texte à l'endroit où se trouve la tortue.

Voici le visuel que provoquera ce nouveau programme :

Système d'axes xy de Turtle
Système d'axes xy de Turtle
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
import turtle as trt crayon = trt.Turtle() crayon.goto(0, 0) crayon.write("x = 0, y = 0") crayon.goto(250, 0) crayon.write("x = 250, y = 0") crayon.goto(250, 250) crayon.write("x = 250, y = 250") crayon.goto(-250, 250) crayon.write("x = -250, y = 250") crayon.goto(-250, -250) crayon.write("x = -250, y = -250") crayon.goto(0, -50) crayon.write("x = 0, y = -50")

✌ 15° Tracer un triangle isocèle dont les coordonnées sont les suivantes :

  • x = 0, y = 0
  • x = 200, y = 0
  • x = 100, y = 50
Triangle isocèle
Triangle isocèle

On peut donc rajouter ces deux nouvelles séries d'instructions :

Encart d'instructions n°9 (déplacement absolu)

>>> crayon.goto(50,100)

✱ On amène le crayon à la position x = 50 et y = 100.

On notera que si le crayon est abaissé, on trace un trait.

Si vous voulez bouger la position sans tracer le trait, il faut agir en 3 temps :

  1. Lever le crayon avec penup()
  2. Bouger le crayon avec goto() en lui fournissant les coordonnées entre les parenthèses
  3. Abaisser le crayon avec pendown()
>>> crayon.penup() >>> crayon.goto(50,100) >>> crayon.pendown()

Encart d'instructions n°10

>>> crayon.write("Bonjour")

✱ Ecrit le message Bonjour sur la localisation actuelle de la tortue.

16 ✔° Lire les encarts 11 et 12, lancer le programme pour vérifier que vous comprennez bien pourquoi le dessin est généré de cette façon :

Encart d'instructions n°11

>>> crayon.dot(45, "red")

✱ Affiche un point de 45 pixels de large et de couleur rouge. La tortue reste au centre du point.

Encart d'instructions n°12

>>> crayon.circle(80, 180)

✱ Trace un arc de cercle de 80 pixels de rayon et s'arrête une fois que le crayon aura tourné de 180° par rapport à son angle actuel. Cela revient donc à tracer un demi-cercle dans le cas de 180°.

Pour faire :

  • Un cercle complet : 360°
  • Un demi-cercle : 180°
  • Un quart de cercile : 90°
>>> crayon.circle(80)

✱ Trace un arc de cercle complet de 80 pixels de rayon. On ne donne pas d'indication d'angle.

1 2 3 4 5 6
import turtle as trt crayon = trt.Turtle() crayon.pencolor("red") crayon.dot(50, "green") crayon.circle(100, 180)
Exemple ronds
Exemple de ronds avec dot() et circle()

✌ 17° Lire l'encart 13 qui explique le rôle de setheading(). MODIFIER le programme pour obtenir un visuel proche de celui qui est proposé ici. Pour l'instant, vous n'avez qu'une partie des cercles.

Encart d'instructions n°13 (orientation absolue)

>>> crayon.setheading(45)

✱ Impose que la tortue soit maintenant orientée à 45° par rapport à l'axe vertical. Comprenez bien qu'il ne s'agit pas de tourner de 45° par rapport à l'angle actuel mais de s'orienter vers l'angle 45° quelque soit l'orientation actuelle de la tortue.

Voici un descriptif visuel des différents angles :

Exemples d'orientation
Les différents angles absolus d'orientation

Il faut également comprendre que :

  • 315° peut s'écrire également -45°
  • 270° peut s'écrire également -90°
  • 245° peut s'écrire également -135°
  • 180° peut s'écrire également -180
1 2 3 4 5 6 7 8 9
import turtle as trt crayon = trt.Turtle() crayon.pencolor("red") crayon.setheading(0) crayon.circle(100) crayon.setheading(45) crayon.circle(100)
Les cercles
Le visuel voulu

L'intérêt fondamental de setheading() est de pouvoir régler la direction de la tortue quelque soit la direction qu'elle avait avant.

On peut ainsi être certain d'orienter la tortue dans la direction voulue.

18 ✔° Lire l'encart 14 qui explique le rôle de pensize(). Utiliser le programme permettant de tester son utilisation.

Encart d'instructions n°14

>>> crayon.pensize(10)

✱ Fixe la largeur du crayon à 10 pixels.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
import turtle as trt crayon = trt.Turtle() crayon.pencolor("red") crayon.pensize(3) crayon.forward(100) crayon.left(90) crayon.pensize(6) crayon.forward(100) crayon.left(90) crayon.pensize(9) crayon.forward(100) crayon.left(90) crayon.pensize(12) crayon.forward(100) crayon.left(90)
exemple_pensize
Le visuel obtenu en modifiant la taille du crayon

19 ✔° Pour colorier l'intérieur d'une forme, c'est un peu plus compliqué. Cela se réalise en 4 temps.

  1. crayon.fillcolor("yellow") : on définit la couleur de remplissage à utiliser.
  2. crayon.begin_fill() : on demande de surveiller la forme qu'on va lui demander de dessiner : c'est le début de la forme à remplir.
  3. Ensuite, on dessine notre forme avec une, deux ou plusieurs instructions.
  4. crayon.end_fill() : on signale qu'on a fini de dessiner la forme et qu'on désire la remplir.

Tester le programme ci-dessous de façon à tracer un carré à fond jaune ayant une bordure rouge puis un cercle à fond orange ayant une bordure bleue.

fond coloré
Le carré jaune et le cercle orange
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
import turtle as trt crayon = trt.Turtle() crayon.pencolor("red") crayon.pensize(10) crayon.fillcolor("yellow") crayon.begin_fill() crayon.forward(100) crayon.left(90) crayon.forward(100) crayon.left(90) crayon.forward(100) crayon.left(90) crayon.forward(100) crayon.left(90) crayon.end_fill() crayon.pencolor("blue") crayon.fillcolor("orange") crayon.begin_fill() crayon.circle(50) crayon.end_fill()

✎ 20 / TRAVAIL PERSONNEL° Utilisez le temps qu'il vous reste pour réaliser le dessin le plus sympa possible. La fiche ci-dessous récapitule les actions vues aujourd'hui. Aller voir la partie Frequently Asked Questions (FAQ) pour voir comment personnaliser les couleurs si vous le voulez.

Vous allez être noté sur l'originalité mais également sur l'utilisation des différentes instructions proposées dans les parties précédentes.

  • Au moins un carré, ou un triangle ou un rectangle
  • Au moins un cercle
  • Au moins deux couleurs de crayon
  • Au moins deux épaisseurs de crayon
  • Au moins deux fonds colorés
  • Au moins deux utilisations de goto() et penup(), pendown().
  • Au moins une boucle
  • Des commentaires expliquant les lignes (placer # derrière l'instruction : le reste ne sera que du texte à destination du lecteur humain)

Impossible d'avoir plus de 06/20 s'il manque l'un des items.

Mémo Turtle
Création du crayon

N'oubliez pas d'importer au préalable le module Turtle avec import turtle as trt par exemple.

Voici quelques méthodes qu'on peut appliquer aux objets de classe Turtle, qu'on crée à l'aide de
crayon = trt.Turtle().

Déplacement relatif

Pour avancer : crayon.forward(50) permet d'avancer de 50 pixels.

Pour reculer : crayon.backward(50) permet de reculer de 50 pixels.

Pour tourner à droite : crayon.right(45) permet de tourner de 45° à droite par rapport à l'orientation actuelle.

Pour tourner à gauche : crayon.left(45) permet de tourner de 45° à gauche par rapport à l'orientation actuelle.

Déplacement absolu

Pour orienter le crayon sur un angle de 45° absolu (0° étant la droite horizontale) : crayon.setheading(45)

Exemples d'orientation
Les différents angles absolus d'orientation

Pour se déplacer jusqu'au point de coordonnées (x=50,y=100), 3 manières de procéder :

  1. crayon.goto(50, 100)
  2. crayon.setposition(50, 100).
  3. crayon.setpos(50, 100)
  4. Système d'axes xy de Turtle
    Système d'axes xy de Turtle

    Dans le cadre de ce site, on utilisera uniquement le goto(). Mais si vous trouvez des programmes sur le Web utilisant les autres, vous savez maintenant que cela réalise la même action.

Pour faire un mouvement horizontal jusqu'à atteindre la valeur donnée en x=50 : crayon.setx(50).

Pour faire un mouvement vertical jusqu'à atteindre la valeur donnée en y=100 : crayon.sety(100).

Pour revenir au point d'origine : crayon.home().

Dessiner des cercles ou d'autres formes encore

Pour dessiner un cercle de rayon x : crayon.circle(x).

Pour dessiner un demi-cercle de rayon 60 pixels : crayon.circle(60, 180).

Pour dessiner un quart de cercle de rayon 60 pixels : crayon.circle(60, 90).

Pour tracer des polygones de "rayon" 60 pixels possèdant 8 côtés : crayon.circle(60, 360, 8).

Pour placer un point de rayon 5 et de couleur rouge : crayon.dot(5, "red").

Tracer ou arrêter de tracer

Pour lever la pointe du crayon : crayon.penup().

Pour abaisser la pointe du crayon : crayon.pendown().

Afficher un texte

Pour écrire un texte : crayon.write("bonjour").

Pour écrire avec une police différente : crayon.write("Bonjour", font=('Arial', 28, 'normal'))

Taille, vitesse et couleur du crayon

Pour modifier la vitesse x, x variant de 1 à 10 : crayon.speed(3), x=0 veut dire pas d'animation.

Pour augmenter la taille du crayon : crayon.pensize(5).

Pour changer la couleur du crayon : crayon.pencolor("red").

Pour obtenir une forme à fond colorée :

  1. crayon.fillcolor("yellow") : on définit la couleur de remplissage à utiliser.
  2. crayon.begin_fill() : on active la surveillance de la forme à remplir.
  3. Ensuite, on dessine la forme avec une, deux ou plusieurs instructions.
  4. crayon.end_fill() : on signale qu'on a fini de dessiner la forme et qu'on désire la remplir.

Cela nous suffira mais vous pouvez aller voir la documentation Python pour voir ce que le module peut faire d'autre : DOCUMENTATION TURTLE PYTHON.

Nous allons réutiliser Turtle un peu plus loin dans le cours car ce module permet de visualiser certaines choses (les boucles par exemple).

Ici, j'espère qu'il vous a permis de visualiser que l'ordre des instructions est important.

Dans la partie FAQ, vous avez un programme plus conséquent mais utilisant beaucoup de choses que nous n'avons pas encore vu. C'est joli mais plus difficile à comprendre, sauf si vous avez déjà vu les boucles.

4 - FAQ

Et si on peut avoir un dessin plus compliqué et plus joli ?

Oui, mais on utilisera beaucoup de choses que nous n'avons pas encore vu pour le moment. Un exemple :

1 2 3 4 5 6 7 8 9 10
import turtle as trt couleurs = ["gold", "white", "blue" ] crayon = trt.Turtle() crayon.speed(0) trt.bgcolor('black') for x in range(800): crayon.pencolor(couleurs[x % 3]) crayon.width(x//100 + 1) crayon.forward(x) crayon.left(59)

Et si on veut une couleur particulière ?

Vous n'êtes pas obligé de fournir un nom de couleur.

Vous pouvez également fournir un code RGB donnant l'intensité de Rouge, de Vert et de Bleu.

L'intensité d'une de ces couleurs doit varier de 00 (rien) à FF (intensité maximale).

Pour l'instant, limitez vous à 00 11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF.

Dans le code transmis, il faudra rajouter un dièse # avec les 3 séquences RGB.

Exemples :

  • "#FF0000" donne   , du rouge intense équivalent à "red"
  • "#AA0000" donne   , du rouge plus foncé
  • "#660000" donne   , du rouge très foncé
  • "#00FF00" donne   , du vert intense équivalent à "green"
  • "#00AA00" donne   , du vert plus foncé
  • "#006600" donne   , du vert très foncé
  • "#0000FF" donne   , du bleu intense équivalent à "blue"
  • "#0000AA" donne   , du bleu plus foncé
  • "#000066" donne   , du blue très foncé
  • "#FFFF00" donne   , du jaune intense équivalent à "yellow"
  • ...

Activité publiée le 01 11 2020
Dernière modification : 13 07 2023
Auteur : ows. h.