2. Définir¶
Dans ce chapitre, nous allons découvrir comment augmenter le vocabulaire de notre langage de programmation en définissant de nouvelles instructions, qu’on appelle aussi fonctions. Ceci permet de rendre le code plus compact, mais surtout plus lisible. Nous allons voir que :
le mot-clé
def
permet de nommer (définir) une séquence d’instructions,le bloc qui suit doit être en indentation (décalé à droite),
les fonctions
up()/down()
permettent de lever et baisser le stylo.
Nommer une séquence¶
Dessiner un rectangle est assez utile. C’est une forme qui se retrouve souvent dans les dessins. Mais à chaque rectangle dessiné, nous devons réécrire ces 8 lignes de code…
forward(160)
left(90)
forward(100)
left(90)
forward(160)
left(90)
forward(100)
left(90)
Serait-il possible de nommer cette séquence d’instructions afin qu’on puisse la réutiliser autant que l’on veut ?
Oui ! Avec le mot-clé def
, nous pouvons définir une nouvelle fonction que nous pouvons par exemple appeler rectangle()
.
C’est une sorte de raccourci pour ne pas avoir à réécrire tout le temps des séquences identiques.
Le code à exécuter se trouve après l’expression def rectangle():
et se trouve en indentation (décalé vers la droite).
def rectangle():
forward(160)
left(90)
forward(100)
left(90)
forward(160)
left(90)
forward(100)
left(90)
Une fois que la fonction a été définie, il suffit d’écrire rectangle()
pour dessiner un rectangle. On appelle ceci appeler une fonction.
Rappelez-vous ceci:
on définit une fonction une seule fois,
on appelle une fonction autant de fois que l’on veut,
si on ne l’appelle pas, elle n’est pas exécutée et il ne se passe rien.
Définir une fonction nous permet de réduire le nombre de lignes de code nécessaires.
Chaque fois que nous utilisons rectangle()
, au lieu d’écrire 8 lignes, nous écrivons seulement une ligne de code.
Exercice
Dessinez encore d’autres rectangles en appelant la nouvelle fonction rectangle()
.
Solution
...
rectangle() # 1er appel de la fonction rectangle
left(90)
rectangle() # 2ème appel de la fonction rectangle
left(45)
rectangle() # Encore un appel à la fonction
Donner du sens¶
Une fonction ne permet pas seulement d’économiser des lignes de code. Elle permet aussi de structurer le code et de lui donner un sens. Considérez par exemple le code ci-dessous. Il est presque impossible de comprendre ce que fait le programme en regardant les 17 lignes de code.
Si nous observons la tortue, nous comprenons finalement qu’elle dessine deux fois un rectangle. Nous pouvons même interpréter cette image et donner le sens de bâtiment au premier rectangle, et de porte au second.
Essayons maintenant de découper le code en sous-programmes en utilisant deux fonctions batiment()
et porte()
.
En regardant ces 3 lignes de code, on comprend immédiatement le sens du programme.
batiment()
forward(30) # repositionner la tortue
porte()
La définition d’une fonction permet d’ajouter de nouveaux mots à un langage de programmation. Contrairement aux commandes natives de Python qui sont toutes en anglais, nous sommes libres de les choisir en français.
Attention
Ecrivez les fonctions sans accents, sans circonflexes et sans espaces: batiment()
, carre()
, boite()
, arc_en_ciel()
.
Exercice
Ajoutez une deuxième porte au bâtiment.
Solution
...
batiment()
forward(30)
porte()
forward(120)
porte()
Définir une fonction¶
Le fait de donner un nom à une séquence d’instructions est appelé définir une fonction. Une définition de fonction comporte :
le mot-clé
def
(définir),le nom de la fonction (
batiment/porte/etc
),les parenthèses
()
,le deux-points
:
,un bloc en indentation.
A retenir
Qu’est-ce qu’un bloc en indentation ?
C’est un bloc de texte qui comporte des espaces vides à gauche. En Python, ces espaces apparaissent en multiples de 4.
L’indentation est très importante en Python. C’est l’indentation qui indique quelles sont les instructions qui font partie de la fonction.
Indenter avec un raccourci¶
Comme l’indentation est tellement importante en Python, il en existe un raccourci.
Il faut d’abord sélectionner les lignes de code dont vous voulez changer l’indentation.
Ensuite, vous appuyez sur:
la touche tab pour augmenter l’indentation
la touche maj+tab pour diminuer l’indentation
Exercice
Essayez ces raccourcis dans le code ci-dessous. Transformez le code en deux fonctions batiment()
et porte()
, que vous appelez ensuite.
Solution
def batiment():
forward(200)
left(90)
forward(100)
left(90)
forward(200)
left(90)
forward(100)
left(90)
def porte():
forward(30)
left(90)
forward(50)
left(90)
forward(30)
left(90)
forward(50)
left(90)
batiment()
forward(30)
porte()
Maison avec porte¶
Une fois qu’une fonction est définie, elle peut être utilisée partout, même dans la définition d’une autre fonction.
Ici, nous avons une fonction porte()
, qui est utilisée à l’intérieur d’une deuxième fonction maison()
. Pour que ceci soit possible, la définition de porte doit être placée avant la définition de maison()
.
Exercice
Déplacez la porte vers le milieu de la maison, et dessinez une deuxième maison.
Solution
...
def maison():
forward(100)
left(90)
forward(60)
left(45)
forward(71)
left(90)
forward(71)
left(45)
forward(60)
left(90)
forward(40) # Décalage de la porte
porte()
maison()
forward(100)
maison()
Variable globale¶
Une variable permet d’associer un nom à une valeur.
Avant de pouvoir utiliser une variable, elle doit être créée.
On appelle ce processus une affectation et on dit qu’on associe une valeur à une variable.
La forme générale est var = valeur
ou var
est le nom de la variable et valeur
est sa valeur.
Attention, le =
ici ne représente pas l’égalité au sens mathématique.
Exercice
Dans cet exemple, nous créons une variable d
pour “distance” et lui affectons la valeur 80
. Python remplacera donc chaque d
par 80
au cours du programme. La commande forward(d)
va donc prendre le sens de forward(80)
et faire avancer la tortue de 80
pas.
Modifiez la valeur de la variable globale d
et exécutez le programme.
Une variable globale apparait au début du programme et sert à configurer une propriété générale d’un programme. Ici nous choisissons une variable globale d
pour indiquer une distance de base.
Cette distance est utilisée pour pouvoir dessiner des formes d’une hauteur standard.
Attention
Utilisez les variables globales avec beaucoup de modération ! Si vous en mettez trop, votre programme deviendra vite compliqué à comprendre.
Nous verrons plus tard qu’il est plus judicieux d’utiliser des variables locales (au lieu de globales).
Le point dot()
¶
La fonction dot()
dessine un point à la position actuelle de la tortue.
Exercice
Ajoutez un point (dot
) au sommet du triangle.
Solution
...
def triangle():
dot()
forward(d)
left(120)
dot()
forward(d)
left(120)
dot() # Ajout ici
forward(d)
triangle()
Lever le stylo¶
Les deux commandes up()
et down()
permettent de lever et de baisser le stylo.
Ceci nous permet de dessiner des formes séparées, comme ici le petit i avec son point.
Prudence
Contrairement aux fonctions forward(d)
et backward(d)
qui nécessitent un argument dans les parenthèses, les fonctions up()
et down()
ne nécessitent pas d’argument.
Exercice récapitulatif¶
Exercice
Définissez une fonction drapeau()
permettant de dessiner un drapeau suisse.
Pour vous aider, définissez une fonction pour le carré et une autre pour la croix. Vous n’avez pas à vous préoccuper des couleurs pour le moment mais, si vous le souhaitez, cherchez les fonction begin_fill()
et end_fill()
sur Internet.

Pour vous aider, la séquence d’instructions permettant de dessiner la croix vous est donnée.
Téléchargez le fichier .py
, faites une capture d’écran et déposez les fichiers sur Moodle à l’endroit prévu.
Et à part le dessin ?¶
Une fonction ne sert pas qu’à regrouper des instructions de dessin. Vous pouvez définir une fonction qui va afficher un texte en particulier.
Rappel
La fonction print()
permet d’afficher du texte.
Exercice
Définissez une fonction presentations()
qui affiche du texte vous présentant en plusieurs lignes (nom, age, hobbies, etc).
Exécutez la fonction.
Solution
def presentations():
print("Salut, je m'appelle Roger")
print("J'ai 58 ans")
print("J'aime nourrir les canards")
presentations()