Séquence et Turtle
A propos du chapitre
Objectif :
- Dessiner des formes géométriques simples
- Comprendre l'exécution séquentielle des instruction d'un programme
- Connaître les instructions de base de Turtle
- Acquérir un réflexe d'essai-erreur
Modalités :
- Programmation (Basthon)
- Un peu de réflexion
Prérequis : "Programmation/premiers_pas"
Difficulté : facile
Introduction : basthon, turtle, erreur
Un programme en Python est fait d'une séquence d'instructions :
Les instructions sont exécutées de haut en bas, dans l'ordre.
Pour illustrer ce principe, nous allons faire des dessins avec l'outils turtle.
C'est une tortue graphique, c'est à dire une sorte de stylo que l'on peut diriger avec du code pour dessiner.
On appelle celà une tortue, parce que c'est ... lent, pour nous permettre de bien voir le déroulement de l'exécution du programme.
Activité : turtle dans Basthon
Ouvrez Basthon.
Copiez le programme suivant dans la partie éditeur :
Dans la partie console, cliquez sur ce bouton pour afficher la "vue graphique" :

Executez le programme en cliquant sur "executer" :

Normalement, vous devriez voir apparaître une tortue, puis la voir avancer vers la droite.
Quelques explications de ce que fait le programme :
# Si un # est présent sur une ligne,
# tout ce qui est après est ignoré par l'interpréteur.
# Celà permet de commenter le code en langue naturelle (français, anglais)
# pour le rendre plus compréhensible pour nous humains.
from turtle import * # on dit à l'interpréteur de charger Turtle pour pouvoir l'utiliser
forward(200) # on déplace la tortue tout droit de 200 unités
done() # Le dessin est terminé, on peut l'afficher
Activité : erreur
Remplacez le programme dans la partie éditeur par le suivant :
Executez-le.
Vous devriez observer... rien !
C'est parce que le programme comporte une erreur
Dans la partie console, cliquez sur le bouton suivant pour afficher la console :

Normalement, vous devriez voir un message d'erreur :

Décorticons un peu ce message.
File "<basthon-input-2-8c1b484d0e93>" indique le fichier où se trouve l'instruction qui a déclenché l'erreur.
Il a un nom bizarre : c'est celui de l'éditeur en ligne de Basthon.
line 3 indique a quelle ligne du fichier se trouve l'instruction qui a déclenché l'erreur.
Cette ligne est affiché juste en dessous dans le message :
Finalement, SyntaxError: '(' was never closed nous renseigne sur la nature de l'erreur :
C'est une erreur de syntaxe, ce qui veut dire que le code n'est pas bien structuré.
Et plus précisément, une parenthèse n'a pas été refermée avant la fin du fichier.
Corrigez l'erreur, executez bien le programme pour vérifier que tout est bon.
Pro tip : expérimentez !
Plutôt que de réfléchir longtemps pour écrire un programme correct du premier coup,
il vaut mieux :
- Réfléchir un peu pour avoir une idée de ce que le programme doit faire
- Ecrire un programme imparfait à partir de cette idée
- Observer ce que le programme fait bien/pas bien
- Réfléchir un peu pour avoir une idée de comment corriger
- Faire une correction imparfaite à partir de cette idée
- Observer ce que le programme fait bien/pas bien
- etc jusqu'à avoir un programme qui marche !
TODO schéma ici ?
Instructions Turtle de base
Turtle comporte de nombreuses instructions pour contrôler la tortue. En voici quelques unes :
| instruction | description | exemple |
|---|---|---|
forward( DISTANCE ) |
Avancer de la DISTANCE donnée | forward(100) |
left ( ANGLE ) |
Tourner vers la gauche de l'ANGLE donné, en degrés | left(90) |
right ( ANGLE ) |
Tourner vers la droite de l'ANGLE donné, en degrés | right(120) |
goto ( X , Y ) |
Positionner la tortue en (X, Y). La position de départ est (0, 0) | goto(100, 50) |
speed( VITESSE ) |
Modifier la VITESSE de la tortue, de 1 (lent) à 10 (rapide). 0 pour dessin instantané | speed(4) |
Voici quelques activités pour expérimenter.
Activité : carré
Dessinez un carré de côté avec Turtle 100 :

Activité : triangle équilatéral
Dessinez un triangle équilatéral de côté 100 :

Rappels :
- Un demi tour complet, c'est 180 degrés.
- Un triangle équilatéral a des angles de 60 degrés.
Solution
TODO vérifier la terminologie avec prof math. Ajouter schéma L'angle intérieur d'un triangle équilatéral fait 60 degrés. Comme on tourne par "l'extérieur", il faut prendre l'angle complémentaire :
180 - 60 = 120.
Activité : triangle rectangle
Dessinez un triangle rectangle

Couleur du trait
L'instruction color permet de changer la couleur appliquée aux tracés suivants.
| instruction | description | exemple |
|---|---|---|
color( NOM ) |
choisit une couleur de trait à partir de son NOM | color( "blue" ) |
**Le nom de la couleur doit être entre guillemets ! "comme ça" ou 'comme ça'
Les noms des couleurs

source : https://wiki.mchobby.be/index.php?title=Fichier:Python-Turtle-Exemple2-11a.png
Activité : trait coloré
Dessinez un trait d'une couleur différente du noir (gris, rose, ...)
Choisissez bien entendu une couleur que vous arrivez à percevoir.
Dans l'exemple ci-dessous, j'ai pris "gray"

Activité : carré coloré
Dessinez un carré avec un trait d'une couleur différente du noir (gris, rose, ...)
Choisissez bien entendu une couleur que vous arrivez à percevoir.
Dans l'exemple ci-dessous, j'ai pris "gray"

Activité : petite réflexion
Avez-vous eu plus de difficultés à dessiner le carré dans la section précédente, ou le carré coloré à la question précédente ?
Expliquez pourquoi à votre prof
Couleur de remplissage
Turtle permet aussi de remplir une forme, pour peu qu'elle soit "fermée".
Par exemple :
from turtle import *
fillcolor("gray")
begin_fill()
forward(100)
left(120)
forward(100)
left(120)
forward(100)
end_fill()
done()
Activité : testons !
Executez le code ci-dessus. Que fait-il ?
Voici quelques explications :
| instruction | description | exemple |
|---|---|---|
fillcolor( NOM ) |
choisit une couleur de remplissage à partir de son NOM | color( "blue" ) |
begin_fill( ) |
démarre le remplissage | begin_fill() |
end_fill( ) |
termine le remplissage et remplit la forme dessinée depuis begin_fill() |
end_fill() |
Activité : carré rempli
Dessinez un carré rempli d'une couleur différente du noir (gris, rose, ...)
Choisissez bien entendu une couleur que vous arrivez à percevoir.
Dans l'exemple ci-dessous, j'ai pris "gray":

Activité : ça se complique
Ecrivez un programme qui reproduit le dessin ci-dessous :

La couleur utilisée est du `"gray"', mais vous pouvez en utiliser une autre
Solution
Levée de stylo
Turtle nous permet de déplacer la tortue sans dessiner, avec les instructions suivantes.
| instruction | description | exemple |
|---|---|---|
penup( ) |
Lève le stylo. Les commandes de déplacement ne dessinent plus. | penup() |
pendown( ) |
Baisse le stylo. Les commandes de déplacement dessinent. | pendown() |
Activité : un peu d'expérimentation
Reproduisez la figure suivante :

Les deux carrés font 100 de côté et son espacés de 100.
Récap
Récap
Un programme en python est une séquence d'instructions :
- 1 instruction par ligne
- Les instructions sont exécutées de haut en bas
Pour dessiner avec Turtle, on a un programme avec cette structure :
Les instructions de dessin vues dans le chapitre sont :
# mouvements
forward( DISTANCE ) #fait avancer la tortue de DISTANCE
left( ANGLE ) # tourne de ANGLE degrés vers la gauche
right( ANGLE ) # tourne de ANGLE degrés vers la droite
goto( X, Y) # va en position X, Y directement
# couleurs
color( COULEUR ) #choisit la COULEUR du trait
fillcolor( COULEUR ) #choisit la COULEUR de remplissage
# remarque : les couleurs sont choisies avec un nom, entre "" !
color( "blue" )
# Modalités de dessin
penup() # lève le stylo, arrête de dessiner
pendown() # baisse le stylo, reprend le dessin
begin_fill() # démarre le remplissage
end_fill() # conclut le remplissage,
# remplis la forme dessinée depuis begin_fill()
# Vitesse de tortue
speed( VITESSE ) # change la VITESSE de la tortue
# de 1 = lent à 10 = rapide
# 0 = instantané
Parfois, le programme est erronné, et dans ce cas là l'erreur apparaît (généralement en rouge) dans la console.
L'erreur donne des renseignement sur ce qui ne va pas, et sur la localisation (ligne et colonne) de l'erreur dans le programme.
N'oubliez pas de vérifier la console si votre programme semble ne rien dessiner !
Extensions
Code RGB
A propos de l'extension
Objectif :
- Comprendre le principe du codage RBG des couleurs
- Comprendre un peu les caractéristiques d'une couleur
- Utiliser le code couleur dans Turtle
Modalités :
- Un peu de réflexion
- Expérimenter avec le codage RGB sur un site de palette
- Un peu de programmation
Prérequis : "ce chapitre"
Difficulté : facile
Pour le moment, vous avez manipulé des couleurs avec Turtle en utilisant leur nom. Mais ça vous donne accès à un nombre assez limité de couleur.
Pour pouvoir dessiner presque n'importe quelle couleur, il faut passer par leur codage RGB pour Red Green Blue (en français RVB pour Rouge Vert Bleu, mais presque personne n'utilise cette traduction).
Activité : codage RGB
Accédez au site colorpicker.fr
Vous devriez avoir une fenêtre colorée, avec en bas à gauche, trois sliders :

Remarque : la couleur du fond n'est sans doute pas la même que sur la capture ci dessus. Ca n'a pas d'importance.
Modifiez la position des sliders.
Que se passe-t-il ?
Essayez d'obtenir différentes couleurs : bleu, jaune, orange, gris, noir, blanc, violet.
Essayez d'expliquer précisement le rôle de chaque slider.
Solution
Modifier les sliders modifie la couleur du fond du site.
Chaque slider correspond à une couleur primaire :
- Le rouge
- Le vert
- Le bleu
Faire varier les sliders fait varier la quantité de la couleur correspondante dans le fond.
C'est la représentation RGB des couleurs.
Activité : caractéristiques des couleurs
La représentation RGB des couleurs est très pratique à manipuler avec un ordinateur, mais assez peu intuitive pour l'humain. Pour cette raison, les logiciels de graphismes utilisent souvent d'autres représentations, comme HSL.
En allant sur le site colorpicker.dev, vous pouvez manipuler des couleurs à la fois en HSL et en RGB.
Sélectionnez les deux représentation :

La représentation HSL, décrit une couleur selon trois caractéristiques :
sa teinte (Hue), premier slider, qui est une couleur de base : orange, violet, bleu, vert, rouge, ...

Sa saturation (Saturation), second slider : une couleur peu saturée tends vers le gris, alors qu'une couleur fortement saturée tends vers la couleur de base.

Sa luminosité (Lightness), troisème slider : une couleur avec une faible luminosité est sombre, alors qu'une couleur avec une forte luminosité est claire. La luminosité maximale crée du blanc, peu importe la couleur de base.

Décrivez comment bougent les slider RGB quand vous faites les déplacement HSL suivants :
- Augmenter / diminuer la luminosité
- Augmenter / diminuer la saturation
- Changer la teinte
Solution
- Augmenter / diminuer la luminosité -> les sliders RGB vont vers le max / le min
- Augmenter / diminuer la saturation -> les sliders RGB s'éloignent / se rapprochent
- Changer la teinte -> les sliders font une sorte de rotation de position.
Activité : code RGB dans turtle
Dans le site colorpicker.dev vous pouvez voir sous le carré qui montre la couleur, un code de la forme #XXXXXX. Par exemple #f77cc8.
C'est le code RGB qui corresponds à la couleur affichée.
Vous pouvez le copier-coller et le mettre en lieu et place d'une couleur dans Turtle, toujours entre guillements :
Dessinez un carré d'une belle couleur que vous aurez choisi dans le colorpicker !
par exemple :

Solution
Activité : Euh ... f77cc8 ? WTF ?
TODO ajouter activité, pour celles et ceux qui aiment les maths