Turtle

Avancer et tourner

English here!

Exercice 1 : Avancer, tourner

Clique sur , puis écris Écris le code suivant dans la zone de droite et clique sur Run !


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

Exercice 2 : Raccourcis turtle

É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 ?

  1. Sélectionne le texte :
    1. Met ta souris à gauche du premier caractère (f),
    2. Maintient le clic enfoncé,
    3. Déplace ta souris jusqu'à droite du dernier caractère (la parenthèse fermante )),
    4. relâche le clic.
  2. Clic droit (clic de droite, en utilisant ton majeur)
  3. Sélectione Copier dans le menu (raccourci Ctrl+C).
  4. Clique dans la zone de texte à droite.
  5. Clic droit → Coller (raccourci Ctrl+V).

Formes complexes

English here!

Exercice 3 : Le carré

Maintenant, tu vas écrire le code ! Essaie de dessiner un carré de côté 80.

Un carré de côté 80

Exercice 4 : La maison

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

Quelques calculs d'angles et de longueur — 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 :

Crayon et couleurs

English here!

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 :

Les composantes Rouge, Vert, Bleu d'une couleur, de 0 à 255.

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

Exercice 5 : Deux carrés colorés

Essaie de dessiner ceci :

Le lever de crayon via penup() sera utile pour séparer les deux formes

Exercice 6 : La maison en couleurs

Ou bien tu peux colorier ta maison, la porte en rouge et le toit en vert !

Raccourcis claviers

English here!

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 !

Fonctions

English here!

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

Exercice 8 : Modèles de maison

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.

Boucles

English here!

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)
        

Exercice 9 : L'hexagone

Essaie de dessiner un hexagone, n'hésite pas à utiliser le for pour simplifier ton code !

Géométrie d'un hexagone

Exercice 10 : Des triangles

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 !

Des triangles dans un hexagone

Exercice 11 : Le village

Utilise les boucles et ta fonction maison pour créer facilement un village à deux rues comme ceci :

Un village à deux rues

Œuvre d'art

English here!

Exercice 12 : Votre œuvre d'art

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 !

Un dessin avec un vélo, un arbre et des nuages

Voilà, nous avons appris à utiliser turtle en programmant en langage python.

Il existe d'autres commandes turtle.

Programmation de jeux vidéos

Dès la 3ème secondaire, le parascolaire de programmation de jeux vidéos vous apprendra à faire de petits jeux 2D !

Pour en savoir plus

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)
            

Exercice 13 : Le village variable

Essaie de faire des tailles variables :

Un village avec des maisons de toutes les tailles

Au revoir et pour toute question, je suis disponible par mail via robertvandeneynde[at]hotmail.com