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()

Extensions

Code RGB