Skip to main content
  1. Teaching/
  2. STR1034M/

Quelques outils de programmation en python #

Dans ce tutoriel nous allons apprendre quelques bases de python en écrivant des programmes qui dessinent. Pour dessiner, nous allons utiliser une tortue. Le code ci-dessous permet de charger le nécessaire pour utiliser des tortues. Pour exécuter ce code, cliquez sur la cellule avec le code et appuyez sur Majuscule et Entrée en même temps.

from turtle_base import *

Premiers pas de votre tortue #

Vous pouvez désormais créer une tortue via la commande suivante.

t = Turtle()

et l’afficher simplement en faisant

t
MultiCanvas(height=300, sync_image_data=True, width=600)

Votre tortue est munie d’un stylo et vous pouvez lui donner des ordres (mais elle parle anglais) :

  • move permet de la faire aller en avant. La valeur entre parenthèses est la distance parcourue, une valeur négative fait reculer
  • turn permet de la faire tourner. La valeur entre parenthèses est l’angle du virage vers la gauche, une valeur négative tourne à droite
  • pen_up permet de lever le stylo pour arrêter d’écrire lors des déplacements
  • pen_down permet de rabaisser le stylo
  • hide cache la tortue
  • show montre la tortue
  • clear efface le dessin
  • reset efface le dessin, et ramène la tortue à son point de départ

Dessinons un premier trait, puis réaffichons notre tortue.

t.move(100)
t
MultiCanvas(height=300, sync_image_data=True, width=600)

Maintenant tournons à gauche de 120 degrés. Un tour complet fait 360 degrés, donc 120 degrés fait un tiers de tour.

t.turn(120)
t
MultiCanvas(height=300, sync_image_data=True, width=600)
t.pen_up()
t.move(100)
t
MultiCanvas(height=300, sync_image_data=True, width=600)

Maintenant rabaissons le crayon, et dessinons un petit triangle.

t.pen_down()
t.move(20)
t.turn(-120)
t.move(20)
t.turn(-120)
t.move(20)
t.hide()
t
MultiCanvas(height=300, sync_image_data=True, width=600)

Exercice : carré #

Créez une nouvelle tortue, et faites lui dessiner un carré comme ci-dessous. Indice : pour faire un angle droit il faut tourner de 90 degrés, soit 360 / 4

carre

Créer des variables #

Nous souhaitons désormais changer la taille du triangle. Il suffit pour cela de changer la longueur des côtés. Ce changement doit s’effectuer sur plusieurs lignes du code, ce qui n’est pas très pratique. Pour nous aider, nous allons créer une variable, c’est à dire un nom associé à une donnée, et utiliser ce nom ensuite dans le reste du code.

t = Turtle()
longueur = 60

t.move(longueur)
t.turn(120)
t.move(longueur)
t.turn(120)
t.move(longueur)
t
MultiCanvas(height=300, sync_image_data=True, width=600)

Vous pouvez désormais changer la longueur et relancer le dessin pour constater le résultat.

Exercice #

À l’aide de variables, écrivez le code pour dessiner un rectangle dont on pourra choisir la hauteur et la largeur, comme ci-dessous.

rectangle

Répéter plusieurs fois la même chose #

Mettons que j’aie envie de dessiner plusieurs triangles. Je pourrais utiliser des copier / coller autant de fois que je veux.

t = Turtle()

#variables avec les paramètres
longueur = 40
espacement = 30

#placer la tortue à gauche de l'image regardant vers la droite
t.turn(-90)
t.pen_up()
t.move(-200)
t.pen_down()

#dessiner un premier triangle
t.move(longueur)
t.turn(120)
t.move(longueur)
t.turn(120)
t.move(longueur)

#se décaler pour aller au départ du second triangle
t.pen_up()
t.turn(120)
t.move(longueur + espacement)
t.pen_down()

#dessiner le second triangle
t.move(longueur)
t.turn(120)
t.move(longueur)
t.turn(120)
t.move(longueur)

#se décaler à nouveau
t.pen_up()
t.turn(120)
t.move(longueur + espacement)
t.pen_down()

#dessiner le troisième triangle
t.move(longueur)
t.turn(120)
t.move(longueur)
t.turn(120)
t.move(longueur)

t
MultiCanvas(height=300, sync_image_data=True, width=600)

Le code ci-dessus est néanmoins assez long, alors que je voulais simplement répéter trois fois la même chose. Au passage, remarquez l’usage de commentaires : le caractère # permet d’écrire ensuite n’importe quoi sans que ce soit interprété comme du code. C’est bien pratique pour se mettre des petites notes dans le code, pour le rendre plus clair.

Pour répéter plusieurs fois les mêmes instructions, on peut utiliser une boucle. Je vous laisse observer.

t = Turtle()
longueur = 40
espacement = 30

#placer la tortue à gauche de l'image regardant vers la droite
t.turn(-90)
t.pen_up()
t.move(-200)
t.pen_down()

#répéter trois fois : dessiner un triangle puis se décaler
for i in range(3):
    #dessiner le triangle
    t.move(longueur)
    t.turn(120)
    t.move(longueur)
    t.turn(120)
    t.move(longueur)

    # se décaler
    t.pen_up()
    t.turn(120)
    t.move(longueur + espacement)
    t.pen_down()

t
MultiCanvas(height=300, sync_image_data=True, width=600)

quelques points importants concernant les boucles :

  • n’oubliez pas les deux points à la fin de la ligne qui déclare la boucle
  • le décalage du code en dessous permet de déterminer quelles instructions font partie de la boucle
  • le i est également une variable, vous pouvez lui donner un autre nom. Elle indique combien de fois vous avez répété jusqu’à présent
for plouf in range(5):
    print("valeur de plouf")
    print(plouf)
valeur de plouf
0
valeur de plouf
1
valeur de plouf
2
valeur de plouf
3
valeur de plouf
4

On pourrait par exemple utiliser cette variable pour faire grandir les triangles au fur et à mesure.

t = Turtle()

longueur = 20
espacement = 30

#placer la tortue à gauche de l'image regardant vers la droite
t.turn(-90)
t.pen_up()
t.move(-200)
t.pen_down()

#répéter trois fois : dessiner un triangle puis se décaler
for i in range(3):
    #calcul de la taille des côtés en fonction de i
    taille = (i + 1) * longueur

    #dessin du triangle
    t.move(taille)
    t.turn(120)
    t.move(taille)
    t.turn(120)
    t.move(taille)

    #espacement
    t.pen_up()
    t.turn(120)
    t.move(taille + espacement)
    t.pen_down()

t
MultiCanvas(height=300, sync_image_data=True, width=600)

Exercice : polygone #

Écrivez le code permettant de dessiner un polygone régulier, dont on pourra choisir la longueur et le nombre de côtés. Ci-dessous par exemple avec 7 côtés de longueur 100. Pour un triangle, il fallait tourner de 120 degrés, soit 360 / 3 pour trois côtés. Pour un carré, il fallait tourner de 90 degrés soit 360 / 4. Selon le même principe, pour un pentagone (5 côtés) il faut tourner de 360 / 5 = 72 degrés, pour un hexagone de 360 / 6 = 60 degrés, et ainsi de suite. Pas besoin de sortir votre calculatrice, un langage de programmation n’est jamais qu’une calculatrice un peu compliquée :

360 / 5
72.0

Pour un polygone à 7 côtés par exemple vous devriez obtenir quelque chose comme ci-dessous.

heptagone

Exercice : spirale #

Écrivez le code pour générer une spirale, et ajoutez des paramètres pour pouvoir en choisir la forme et l’espacement. Pour cet exercice, vous aurez probablement besoni de faire évoluer certaines variables au fur et à mesure des itérations de la boucle. C’est tout à fait possible, regardez par exemple le code ci-dessous.

valeur = 1

for i in range(10):
    valeur = valeur * 2
    print(valeur)
2
4
8
16
32
64
128
256
512
1024

Ci-dessous quelques exemples de spirales.

spirale carrée

spirale hexagonale

spirale quasi triangle

Fonctions #

Jusqu’à présent, nous avons dessiné plein de formes différentes. Nous allons maintenant voir comment les réutiliser en utilisant des fonctions. Une fonctions permet de regrouper un ensemble d’instructions. En lui donnant un nom, il est possible ensuite d’utiliser ce nom pour exécuter l’ensemble d’instructions. Par exemple, pour le dessin d’un triangle :

def triangle():
    taille = 30
    for i in range(3):
        t.move(taille)
        t.turn(120)
t = Turtle()

for i in range(12):
    triangle()
    t.pen_up()
    t.move(50)
    t.turn(-30)
    t.pen_down()

t
MultiCanvas(height=300, sync_image_data=True, width=600)

En fait, vous utilisez déjà des fonctions depuis le début ! Lorsque vous faites avancer ou tourner la tortue, vous utilisez les fonctions move ou turn. Pour ces deux fonctions, vous pouvez même fournir des valeurs en paramètre pour choisir de quelle longueur avancer, ou de quel angle tourner. Ajoutons nous-aussi un paramètre à notre triangle pour choisir la taille du triangle.

def triangle(taille):
    for i in range(3):
        t.move(taille)
        t.turn(120)
t = Turtle()

for i in range(12):
    triangle(4*(i+1))
    t.pen_up()
    t.move(50)
    t.turn(-30)
    t.pen_down()

t
MultiCanvas(height=300, sync_image_data=True, width=600)

Exercice : exposition de polygones #

Créez une fonction pour dessiner un polygone quelconque. Cette fonction pourra prendre en paramètre le nombre de côtés et la longueur des côtés du polygone. Écrivez ensuite un programme qui dessine côte à côte les polygones de côté 3 à 8, comme ci-dessous.

exposition polygones

Pour faire une boucle qui va de 3 à 8, vous pouvez utiliser for i in range(3,9):.

Vincent Nivoliers
Author
Vincent Nivoliers
Associate professor — Université Claude Bernard Lyon 1 / LIRIS - Origami