La fonction

Avec les 4 fonctions forward, backward, left, right tu peux tout dessiner. Par contre, dès que ton dessin devient un peu plus complexe ton programme

  • comporte beaucoup de répétitions,
  • est difficile à lire (et comprendre).
../_images/flower.png

La solution est d’utiliser une fonction qui permet de

  • mettre un bout du code à part
  • donner un nom à ce code
  • réutiliser ce code autant de fois que tu veux

Les deux fleurs ci-dessus ont été dessinées à l’aide d’une fonction qu’on a appelé flower().

Définir une fonction

Tout d’abord nous devons définir la fonction. Une définition de fonction est constituée :

  • du mot-clé def (qui veut dire définition)
  • du nom de la fonction
  • de parenthèses ()
  • du signe deux-points :
  • du corps de la fonction contenant le code.

Voici, par example, la définition de la fonction triangle:

def triangle():
    forward(100)
    left(120)
    forward(100)
    left(120)
    forward(100)
    left(120)
    forward(100)

Pour indiquer les commandes qui font partie de cette fonction, tu dois les décaler vers la droite. On appelle ça indenter le corps de la fonction.

Cette indentation est un point important qui distingue Python d’autres langages de programmation. L’indentation te montre visuellement ce qui fait partie du corps de la fonction.

Quand une expression en Python se termine avec le signe deux-points, la ligne suivante est automatiquement indenté de 4 espaces.

La définition d’une fonction toute seule ne vas rien dessiner. Tu dois appeler la fonction dans ton programme pour exécuter son code. Pour appeler une fonction dans ton programme tu dois écrire:

  • le nom de la fonction
  • des parenthèses ()

Voici la fonction triangle() appelée trois fois:

triangle()
triangle()
triangle()
../_images/func1.png
from turtle import *

def triangle():
    forward(100)
    left(120)
    forward(100)
    left(120)
    forward(100)
    left(120)
    forward(100)

triangle()
triangle()
triangle()

done()

func1.py

Tu dois d’abord définir une fonction avant que tu puisse l’appeler. C’est pour cela qu’on met les définitions de fonction au début du programme. Une fois définie, tu peux appeler une fonction autant de fois que tu veux.

Appeler une fonction dans une fonction

Une fonction peut appeler une autre fonction. Pour dessiner un carré, nous pouvons d’abord définir une fonction side qui dessine juste un côté et tourne de 90 degrées:

def side():
    forward(100)
    left(90)

Ensuite la fonction square() appelle 4 fois cette fonction:

def square():
    side()
    side()
    side()
    side()
    forward(100)

Et finalement tu peux appeler 3 fois la fonction square:

square()
square()
square()
../_images/func2.png
from turtle import *

def side():
    forward(100)
    left(90)

def square():
    side()
    side()
    side()
    side()
    forward(100)

square()
square()
square()

done()

func2.py

Dessiner des maisons

Tu peux reprendre le dessin de la maison vu dans l’introduction. Nous allons le définir comme fonction. En plus, nous allons ajouter un remplissage. Ceci va nous permettre de dessiner plusieurs maisons à des positions et dans les couleurs que tu veux.

Voici un exemple:

../_images/house.png
from turtle import *

def house():
    begin_fill()
    forward(141)
    left(90)
    forward(100)
    left(45)
    forward(100)
    left(90)
    forward(100)
    left(45)
    forward(100)
    left(90)
    end_fill()

width(4)
house()
goto(-100, -20)
fillcolor('yellow')
house()

done()

house.py

Dessiner des fleurs

Tu peux utiliser deux arcs de cercle de 90 degrés pour dessiner un pétale:

def petal():
    begin_fill()
    circle(50, 90)
    left(90)
    circle(50, 90)
    end_fill()
    left(18)

Ensuite tu peux combiner 5 pétales pour dessiner une fleur.

../_images/flower.png
from turtle import *

def petal():
    begin_fill()
    circle(50, 90)
    left(90)
    circle(50, 90)
    end_fill()
    left(18)
    
def flower():
    petal()
    petal()
    petal()
    petal()
    petal()

width(2)
fillcolor('violet')
flower()
goto(80, 20)
flower()

done()

flower.py