Clique sur , puis écris Écris le code suivant dans la zone de droite et clique sur !
forward(50)
left(90)
forward(100)
right(45)
Tu as normalement vu une tortue se déplacer vers l'avant d'une distance de 50, puis qui a tourné à gauche de 90 degrés, s'est redéplacée en avant d'une distance de 100 et finalement a tourné à droite de 45 degrés.
En français, on peut traduire forward par avancer, left par gauche et right par droite.
Essaie maintenant le code qui ne contient que la première ligne (supprime les autres), que fait-il ? N'oublie pas de cliquer sur . Essaie ensuite le code avec uniquement les deux premières lignes, même question. Ajoute ensuite la troisième, lance le code, comprends le comportement, ajoute la quatrième ligne, lance et comprends le comportement.
Avec tes expériences précédentes, explique, en français que fais la commande forward
? Et les commandes left
et right
?
Si vous voulez avoir deux fenêtres différentes pour coder et suivre le tutoriel, cliquez sur , et ensuite dans une nouvelle fenêtre, allez sur cette page. Une manière de faire ça est de faire un clic droit sur le lien, puis de choisir ouvrir dans une nouvelle fenêtre dans le menu.
Je conseille de mettre les deux fenêtres côtes à côte, environ ⅓ de l'écran pour cette page et donc ⅔ pour le code et l'affichage de la tortue.
Écrire forward
, c'est fatigant, il existe le raccourci fd
.
De même on a lt
et rt
qui veulent dire Left Turn et Right Turn,
que l'on traduirait par tourner à gauche et tourner à droite.
Que fait ce code ?
fd(100)
lt(120)
fd(100)
lt(120)
fd(100)
Et celui-ci ?
fd(100)
lt(180)
fd(200)
lt(180)
fd(100)
lt(90)
fd(50 + 50) # wow, c'est joli !
lt(90 * 2)
fd(40 + 80 * 2)
Nous voyons que la tortue est une super calculette ! Bien mieux que cet objet des années 80, crois-moi.
Remarque que la dernière ligne fait avancer la tortue de 200 pixels, car dans une calculette, le × se fait avant le +, et donc 40 + 80 * 2 = 40 + 160 = 200
, c'est la priorité des opérations.
Tapper tout ça c'était un peu lent n'est-ce pas ? As-tu pensé à faire Copier-Coller ?
f
),
)
),
Maintenant, tu vas écrire le code ! Essaie de dessiner un carré de côté 80.
Plus difficile, cette maison :
Si tu es un peu perdu, il y a un indice en dessous du dessin 😉
Si tu as du mal avec les angles, voici quelques schémas qui peuvent t'être utiles :
Cliquez sur l'image pour passer à l'image suivante
Tu peux également écrire speed(10)
au début de ton code pour que la tortue aille plus vite.
Petite question, quelles lignes de code doivent changer pour que la porte soit plus haute ?
Sauve ce code dans un nouveau fichier pour pouvoir le réutiliser plus tard !
Attention à bien finir le nom par .py
comme sur l'image.
Et puisque je suis gentil, voici une correction de la maison en vidéo... ah, elle n'est pas encore faite cette vidéo ^^
Voici le code qui a été (qui va être...) produit dans la vidéo :
penup/pendown
La nouvelle commande penup()
(raccourci pu()
ou up()
)
permet de lever le crayon, ainsi la tortue peut bouger sans dessiner.
Ensuite, pendown()
(raccourci pd()
ou down()
) repose le crayon pour plus de dessins.
Que fait ce code ?
fd(25)
penup()
fd(50)
pendown()
fd(25)
color
La nouvelle commande color("red")
(attention aux guillemets dans "red"
!)
permet de changer la couleur du trait en rouge.
D'autres couleurs existent par défaut comme green
, blue
, yellow
et bien d'autres.
Pour pouvoir indiquer toutes les couleurs existantes, on regarde dans Paint :
Pour ce magnifique orange, j'écrirai la commande
color(253, 126, 0)
Pour faire varier les couleurs, on peut tapper color picker
sur google !
Beaucoup d'outils donnent le code hexadécimal (code hexa) d'une couleur, par exemple j'ai un joli rose qui s'écrit #ff0060
qui peut s'insérer en écrivant
color("#ff0060")
ou color(0xff, 0x00, 0x60)
.
fd(30)
color("yellow")
fd(30)
color("red")
fd(30)
color(253, 126, 0)
fd(30)
color("#ff0060") # color(0xff, 0x00, 0x60)
fd(30)
Remarque, si color(253, 126, 0)
fait une erreur, écris colormode(255)
au début de ton programme.
Ainsi, une couleur est un mélange de rouge, vert et bleu et ces composantes sont souvent affichées sous différentes formes. Prenons mon orange favori, il peut être exprimé... ¶
100%, 60%, 0%
, donc 100% rouge, 60% vert et 0% bleu.
1.0, 0.6, 0
, les ratios sont entre 0 et 1 et sont plus mathématiques que les pourcentages.
255, 153, 0
vu que 153 = 60% 255 = 0.6 × 255 = 60 / 100 * 255
.
ff, 99, 0
vu que 255 vaut ff
en hexadécimal , 153 vaut 99
et 0 vaut 0
. On note souvent les trois entiers ff, 99, 0 en attaché sur 6 caractères avec un #
devant, comme ceci : #ff9900
.
#f90
.
Essaie de dessiner ceci :
Le lever de crayon via penup()
sera utile pour séparer les deux formes
Ou bien tu peux colorier ta maison, la porte en rouge et le toit en vert !
Sérieusement, qui a besoin d'une souris quand il édite du texte ? — Robert Vanden Eynde
La souris, c'est lent... Mais le pad ? C'est pire ! — Robert Vanden Eynde
Voici selon moi les raccourcis clavier les plus importants pour éditer du texte, ceux-ci marchent même sur Facebook, vous n'êtes pas obligé de les lire mais ça permet de coder super vite croyez-moi !
Afin de réutiliser du code, on peut le mettre dans une fonction. Par exemple, je vais faire une fonction carre
qui permet de dessiner un carré.
def carre():
fd(80)
lt(90)
fd(80)
lt(90)
fd(80)
lt(90)
fd(80)
lt(90)
Écris le code ci-dessus et puis la nouvelle instruction carre()
sera disponible ! Écris le code ci-dessous ensuite.
carre()
lt(45)
carre()
fd(50)
carre()
On peut également mettre des paramètres à la fonction, grâce à ça on pourra faire varier une certaine partie du code, comme par exemple, la taille du carré.
def carre(t): # t est la taille
fd(t)
lt(90)
fd(t)
lt(90)
fd(t)
lt(90)
fd(t)
lt(90)
Que l'on utilisera comme ceci :
fd(100)
carre(80)
lt(45)
carre(40)
fd(50)
carre(60)
Le paramètre t
peut s'appeler comme on veut,
que ça soit t
, taille
, x
, a
ou taille_cote
.
On peut mettre autant de paramètres que l'on veut, séparés par des virgules, comme def carre(taille, couleur)
.
On peut faire des opérations mathématiques comme 50 + taille * 2 - (taille - 1)
, attention à la priorité des opérations !
Un petit raccourci clavier pour décaler des lignes vers la droite : sélectionnez les lignes en questions et appuyez sur Tab ↹. L'opération inverse est disponible via ⇧Shift+Tab ↹.
Le code de la maison se trouve ici, met le dans une fonction à deux paramètres pour pouvoir effectuer une maison colorée en une ligne :
maison(40, "red")
maison(60, "blue")
Les deux paramètres sont la hauteur et la couleur de la porte.
Dans le code du carré, on avait quatre fois le même code à la suite :
fd(40)
lt(90)
fd(40)
lt(90)
fd(40)
lt(90)
fd(40)
lt(90)
Il existe une instruction qui permet de dire Répète 4 fois ce qui suit, c'est le for
:
for i in range(4):
fd(40)
lt(90)
Attention à ne pas oublier le :
, de passer à la ligne et d'écrire au moins une instruction.
Quelle va être la différence avec le code suivant ? La seule différence est l'absence de quelques caractères espace mais ça change complètement le résultat. Teste le et comprends pourquoi le résultat affiché correspond bien au code.
for i in range(4):
fd(40)
lt(90)
Essaie de dessiner un hexagone, n'hésite pas à utiliser le for
pour simplifier ton code !
Fais une fonction triangles
, qui va dessiner la forme suivante, ajoute les paramètres taille
et couleur
afin de pouvoir l'appeler comme ceci :
triangles(20, "red")
Utilise les boucles et cette figure peut se faire en moins de 10 lignes !
Utilise les boucles et ta fonction maison
pour créer facilement un village à deux rues comme ceci :
Dernier défi pour ce cours, laisse aller ton imagination pour créer un beau dessin !
Voici le mien, il utilise ma fonction triangles
plusieurs fois !
Voilà, nous avons appris à utiliser turtle en programmant en langage python.
Il existe d'autres commandes turtle.
Dès la 3ème secondaire, le parascolaire de programmation de jeux vidéos vous apprendra à faire de petits jeux 2D !
Voici un aperçu d'autres fonctionnalités turtle/python.
On peut créer plusieurs tortues (objets python) :
bob = Turtle() # ou Pen()
bob.shape("turtle")
bob.color("blue")
bob.forward(50)
alice = Turtle()
alice.shape("turtle")
alice.color("green")
alice.fd(100)
Et créer des variables en fonction de la tortue.
bob.deplacement = 5
alice.deplacement = 10
def avancer_en_traits(tortue):
for i in range(3):
tortue.penup()
tortue.fd(tortue.deplacement)
tortue.pendown()
tortue.fd(tortue.deplacement)
bob.lt(90)
alice.lt(90)
avancer_en_traits(bob)
avancer_en_traits(alice)
Ou créer des listes de tortues :
liste = [bob, alice]
charles = Turtle()
charles.shape("turtle")
charles.deplacement = 7
liste.append(charles) # ajouter à la fin
for tortue in liste: # pour chaque tortue dans la liste
ancienne_couleur = tortue.color() # on sauve la couleur
tortue.color("blue")
avancer_en_traits(tortue)
tortue.color(ancienne_couleur) # on réapplique l'ancienne couleur
Ou encore créer des conditions pour changer de logique :
penup()
fd(-100)
n = 0
for i in range(45):
penup()
fd(20)
pendown()
fd(20)
n = n + 1
if n == 4:
right(90)
color("red")
else:
if n == 7:
right(90)
color("blue")
else:
if n == 9:
right(90)
n = 0
Et finalement, on peut faire des fonctions récursives.
def arbre(t): # comment faire un arbre de taille t ?
if t < 10: # si t est plus petit que 10...
return # on ne fait rien
if t < 20:
color("green")
else:
color("brown")
fd(t) # on avance de t
lt(30) # on tourne
arbre(t * 0.7) # on fait un arbre plus petit
rt(60)
arbre(t * 0.7) # on fait un autre arbre plus petit
lt(30)
penup()
fd(-t) # revenons à notre position initiale
pendown()
speed(10)
up()
lt(90)
fd(-200)
down()
arbre(100)
Essaie de faire des tailles variables :
Au revoir et pour toute question, je suis disponible par mail via robertvandeneynde[at]hotmail.com