« Programmation Python/Turtle » : différence entre les versions

Contenu supprimé Contenu ajouté
Silanoc (discussion | contributions)
mAucun résumé des modifications
Silanoc (discussion | contributions)
ajout d'un exemple de message caché
Balise : Révoqué
Ligne 1 :
<noinclude>{{Programmation Python}}</noinclude>
 
== Un peu de détente avec le module turtle ==
 
'''{{w|Turtle}}''' est un module graphique du langage de programmation Python. Il est inspiré de la [[programmation Logo]] et permet de déplacer une tortue sur l’écran.
 
Comme nous venons de le voir, l'une des grandes qualités de Python est qu'il est extrêmement facile de lui ajouter de nombreuses fonctionnalités par importation de divers ''modules''.
 
Pour illustrer cela, et nous amuser un peu avec d'autres objets que des nombres, nous allons explorer un module Python qui permet de réaliser des « graphiques tortue », c'est-à-dire des dessins géométriques correspondant à la piste laissée derrière elle par une petite « tortue » virtuelle, dont nous contrôlons les déplacements sur l'écran de l'ordinateur à l'aide d'instructions simples.
 
Activer cette tortue est un vrai jeu d'enfant. Plutôt que de vous donner de longues explications, nous vous invitons à essayer tout de suite :
 
<syntaxhighlight lang="python">
>>> from turtle import *
>>> forward(120)
>>> left(90)
>>> color('red')
>>> forward(80)
</syntaxhighlight >
 
L'exercice est évidemment plus riche si l'on utilise des boucles :
 
<syntaxhighlight lang="python">
>>> reset()
>>> a = 0
>>> while a <12:
a+=1
forward(150)
left(150)
</syntaxhighlight >
 
[[Image:Apprendre à programmer avec Python 8.png|center]]
 
Attention cependant : avant de lancer un tel script, assurez-vous toujours qu'il ne comporte pas de boucle sans fin, car si c'est le cas vous risquez de ne plus pouvoir reprendre le contrôle des opérations (en cas de boucle infinie, pressez CTRL + C, ou alors arrêter Python dans le gestionnaire de tâches sous ''Windows'' ou le moniteur d'activité sur Mac et Linux).
 
{{Autres projets
|wikt=turtle
|w=Turtle}}
 
== Fonctions disponibles ==
Pour utiliser une fonction il faut inscrire son nom et lui donner une valeur dans les parenthèses.
 
Les principales fonctions mises à votre disposition dans le module ''turtle'' sont les suivantes :
 
=== Déplacement ===
 
* <code>forward(distance)</code> : Avance d’une distance donnée. Type de donnée : pixel.
* <code>backward(distance)</code> : Recule d’une distance donnée. Type de donnée : pixel.
* <code>left(angle)</code> : Pivote vers la gauche. Type de donnée : angle.
* <code>right(angle)</code> : Pivote vers la droite. Type de donnée : angle.
* <code>goto(x, y)</code> : Va à l’endroit de coordonnées (x, y) - Type de donnée : pixel /!\ Ne pas oublier d'utiliser la fonction <code>up()</code> avant d'utiliser <code>goto()</code> car sinon il tracera le parcours effectué.
 
=== Gestion de l'écran, de l'affichage ===
 
* <code>reset()</code> : Efface l’écran, recentre la tortue et remet les variables à zéro.
* <code>up()</code> : Relève le crayon (pour pouvoir avancer sans dessiner).
* <code>down()</code> : Abaisse le crayon (pour recommencer à dessiner).
* <code>ht()</code> : Masque la tortue.
* <code>st()</code> : Afficher la tortue.
* <code>title(titre)</code> : Donne un titre à la fenêtre (par défaut le titre est "Turtle Graphics"). Type de donnée : chaîne de caractère.
* <code>width(épaisseur)</code> : Choisit l’épaisseur du tracé. Type de donnée : pixel.
* <code>speed(vitesse)</code> : Choisit la vitesse à laquelle se déplace le curseur. Type de donnée : chaîne de caractère. Vitesses proposées :
** <code>"slowest"</code> => Le plus lent
** <code>"slow"</code> => Lent
** <code>"normal"</code> => Normal
** <code>"fast"</code> => Rapide
** <code>"fastest"</code> => Le plus rapide
 
=== Gestion de la couleur ===
 
* <code>color("couleur")</code> : Détermine la couleur du tracé (noir par défaut). Type de donnée : chaîne de caractère
*bgcolor("couleur") : Préciser la couleur de l'arrière plan de la scène.
*<code>fill(1)</code> : Remplit un contour fermé à l’aide de la couleur sélectionnée.
La couleur peut être :
* une couleur prédéfinie précisé entre apostrophes droites (exemples : 'red', 'yellow', 'green', 'blue', 'brown', 'violet', 'purple', etc.),
* une [[w:Rouge vert bleu|couleur RVB]] avec trois variables r, v, et b comprises entre 0 et 1 (exemple : 1,0,0 pour le rouge).
 
Couleurs proposées :
 
* "blue" => Bleu
* "red" => Rouge
* "green" => Vert
* "yellow" => Jaune
* "brown" => Marron
* "black" => Noir
* "white" => Blanc
* "pink" => Rose
* "orange" => Orange
* "purple" => Violet
* "grey" => Gris
 
 
Le remplissage peut se faire de deux manières. Par exemple pour remplir un carré :
{|
|
<syntaxhighlight lang="python">
begin_fill()
forward(100)
left(90)
forward(100)
left(90)
forward(100)
left(90)
forward(100)
end_fill()
</syntaxhighlight >
|
<syntaxhighlight lang="python">
fill(1)
forward(100)
left(90)
forward(100)
left(90)
forward(100)
left(90)
forward(100)
fill(0)
</syntaxhighlight >
|}
 
=== Objets utiles ===
* <code>circle(rayon, angle)</code> : Trace un cercle de rayon donné. L’argument facultatif ''angle'' indique l’angle de l’arc de cercle (par défaut 360, soit un cercle complet). Type de donnée : rayon en pixel, angle un angle en degré.
* <code>write(texte)</code> : Écrit du texte. Type de donnée : chaîne de caractère.
 
== Compléments ==
* Le module '''turtle''' s'appuie sur le module '''tkinter''' ('''Tkinter''' pour les versions de python antérieures à 3), ça permet d'en utiliser les fonctionnalités. Par exemple pour enregistrer sa production au format postscript :
 
<syntaxhighlight lang="python">
import turtle
 
#......
#.......
 
turtle.getcanvas().postscript(file="monoeuvre.eps")
</syntaxhighlight>
* Le module '''turtle''' permet de manipuler plusieurs tortues.
 
<syntaxhighlight lang="python">
fred = turtle.Turtle()
martha = turtle.Turtle()
 
fred.forward(100)
martha.left(45)
</syntaxhighlight>
 
 
Si les méthodes associées aux tortues sont utilisées sans référence à une tortue particulière, elles s'appliquent à une tortue "anonyme". Celle-ci est automatiquement créée pour être l'objet de la méthode.
 
De même, si aucune fenêtre d'affichage n'existe, une telle fenêtre est automatiquement créée.
 
Ces automatismes, permettent avec simplicité, le lancement de l'environnement de dessin, dès l'utilisation d'une méthode tortue.
Ils sont réellement pratiques, pour faciliter l'initiation au ''langage'' algorithmique, ce qui est la fonction d'origine des langages à géométries tortues.
 
Cependant ces automatismes peuvent ensuite nuire à la compréhension de l'aspect ''objet'' du langage, en devenant une source de confusion quant aux instanciations d'objets, ''tortue'' (anonyme) ou ''écran'', réalisées ainsi ''implicitement''.
 
C'est pour cela qu'il vaut donc mieux, ensuite, les ''expliciter''.
 
<syntaxhighlight lang="python">
scene = turtle.Screen()
 
scene.setup(width=0.5, height=1.0, startx=-1, starty=0)
# width vraie dimension si entier, proportion de l'écran si décimal
# startx entier, position par rapport à la gauche de l'écran si positif, par rapport à la droite si négatif
</syntaxhighlight>
 
== Exemples ==
 
Ligne 277 ⟶ 112 :
</syntaxhighlight>
 
=== Tracer un parcours/message ===
== Sources ==
 
Les traces laissées par la tortue peuvent aussi servir à afficher des messages secrets, des itinéraires... à partir d'éléments simples. On peut attribuer, par exemple aux 4 lettres A, R, D et G les fonctions Avancer, Reculer, tourner à Droite et tourner à Gauche. La tortue pourra ainsi se déplacer selon un ordre compact tel que "ADADADAD" pour tracer un carré.
* [https://docs.python.org/fr/3/library/turtle.html Documentation de la bibliothèque]
 
Exemple permettant de tracer un mot mystère (ici un pseudonyme).
 
<syntaxhighlight lang="python">
from turtle import *
 
def parcours(instruction, pas):
""" fonction gérant l'affichage.
arguments :
- instruction : une chaîne de caractère composée de A, R, D ou G
- pas : un entier, donnant en pixel le déplacement de chaque instruction Avancer ou Reculer
"""
for iteration in range(len(instruction)):
if instruction[iteration] == "A" :
forward(pas)
elif instruction[iteration] == "R":
backward(pas)
elif instruction[iteration] == "D":
right(90)
elif instruction[iteration] == "G":
left(90)
else: #pour gérer tout ce qui n'est pas A, G, D, R
pass
 
# Variable avec le mot mystère
pseudo = "RRDAAGAADAADAADDAAAGAAAARRRRDAGAAAAARRRRRDAAGAADAARRGAADAADAAAAGAGAAAADADAAAAGAGAAAARRRRDAGAAAADAADAAAADAADDAAAAARRGAAAADAA"
 
#Appel de la fonction pour afficher pseudo avec un pas de 10
parcours(pseudo, 10)
 
 
</syntaxhighlight>