Aller au contenu

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 :

instruction1
instruction2
instruction3

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 :

from turtle import *

forward(200)

done()

Dans la partie console, cliquez sur ce bouton pour afficher la "vue graphique" :

basthon_graphique

Executez le programme en cliquant sur "executer" :

basthon_ex

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 :

from turtle import *

forward(200

done()

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 :

basthon console

Normalement, vous devriez voir un message d'erreur :

basthon erreur

Décorticons un peu ce message.

File "<basthon-input-2-8c1b484d0e93>", line 3
    forward(200
        ^
SyntaxError: '(' was never closed

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 :

forward(200

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 :

turtle carré

Solution

On avance, on fait un angle droit, on avance... etc, 4 fois.

from turtle import *

forward(100)
left(90)
forward(100)
left(90)
forward(100)
left(90)
forward(100)

done()

Activité : triangle équilatéral

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

triangle eq

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.

from turtle import *

forward(100)
left(120)
forward(100)
left(120)
forward(100)

done()

Activité : triangle rectangle

Dessinez un triangle rectangle

tri rectangle

Solution

On avance dans n'importe quelle direction

On tourne de 90

On avance

On retourne au point de départ

from turtle import *

forward(100)
left(90)
forward(100)
goto(0, 0)

done()

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

alt text

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"

example

Solution
from turtle import *

color("gray")
forward(100)

done()

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"

example

Solution
from turtle import *

color("gray")
forward(100)
left(90)
forward(100)
left(90)
forward(100)
left(90)
forward(100)

done()

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":

turtle_carre_rempli

Solution
from turtle import *

# on choisir une couleur de remplissage
fillcolor("gray")

# on commence le remplissage
begin_fill()

# on trace une forme
forward(100)
left(90)
forward(100)
left(90)
forward(100)
left(90)
forward(100)

# on termine le remplissage
end_fill()

done()

Activité : ça se complique

Ecrivez un programme qui reproduit le dessin ci-dessous :

double carre

La couleur utilisée est du `"gray"', mais vous pouvez en utiliser une autre

Solution
from turtle import *

# On dessine un carré rempli
fillcolor("gray")

begin_fill()

forward(100)
left(90)
forward(100)
left(90)
forward(100)
left(90)
forward(100)

end_fill()

#on dessine un autre carré, pas rempli
forward(100)
right(90)
forward(100)
right(90)
forward(100)
right(90)
forward(100)

done()

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 :

turtle_carres_separes

Les deux carrés font 100 de côté et son espacés de 100.

Solution

Remarque : il y a vraiment des tas de manières de faire !

from turtle import *

forward(100)
left(90)
forward(100)
left(90)
forward(100)
left(90)
forward(100)

penup()

goto(200, 0)

pendown()

left(90)
forward(100)
left(90)
forward(100)
left(90)
forward(100)
left(90)
forward(100)

done()

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 :

from turtle import *

#ici les instructions de dessin

done()

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 :

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 :

colorpicker

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, ...

teinte

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.

saturation

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.

light

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 :

color("#f77cc8")

Dessinez un carré d'une belle couleur que vous aurez choisi dans le colorpicker !

par exemple :

color carre

Solution

Activité : Euh ... f77cc8 ? WTF ?

TODO ajouter activité, pour celles et ceux qui aiment les maths