Aller au contenu principal

TP5 - Fonctions

Objectifs
  1. Comprendre le concept de variable ;
  2. Effectuer des affectations ;
  3. Gérer des cas dans des programmes ;
  4. Répéter des instructions ;
  5. Factoriser à l'aide de fonctions.
Au préalable
  1. Se créer un dossier SNT sur votre ordinateur ou clé USB
  2. Dans ce dossier, créer un dossier T3 - Programmation

Sur EduPython ou autre instance python, faire :

  1. Créer un nouveau fichier en cliquant sur l'icône 📄, ou en appuyant sur CTRL+N
  2. Enregistrer le fichier sous le nom TP5_Fonctions en cliquant sur l'icône 💾, ou en appuyant sur CTRL+S

Rappels

Pour afficher le contenu d’une variable ou du texte, on utilise la fonction print().

a = 5
print(a)
print("Afficher un texte")
print("La variable a contient :", a)

Fonctionnalités de Turtle

Turtle dispose d’un ensemble de fonctionnalités pour dessiner. Voici un tableau récapitulatif avec un exemple pour chaque fonction :

FonctionSignification
forward(distance)Avance le crayon de distance pixels
backward(distance)Recule le crayon de distance pixels
right(degre)Tourne le crayon vers la droite de degre degrés
left(degre)Tourne le crayon vers la gauche de degre degrés
up()Lève le crayon (ne dessine plus lors des déplacements)
down()Baisse le crayon pour dessiner
pencolor(couleur)Change la couleur du trait (en anglais)
speed(vitesse)Change la vitesse de dessin (0=instantané, 1-10 croissant)
hideturtle()Cache le curseur (tortue)
showturtle()Affiche le curseur
from turtle import *

# Paramètres de base
speed(5)
pencolor("blue")
hideturtle()

# Dessin simple
forward(100)
right(90)
forward(50)
left(45)
backward(30)

mainloop()
code minimal pour dessiner
from turtle import * #Import de la bibliothèque

#Écriture des instructions ici
speed(0) #On accélère le dessin
bgcolor("midnight blue") #On va créer un fond bleu nuit


mainloop() #Doit être en tout dernier

Carte de vacances

Travail à faire

On souhaite faire une carte pour les vacances de façon optimale, à l'aide de fonctions.

Des étoiles

Une première étoile

On va dessiner dans un premier temps une seule étoile. Une étoile est une figure à 5 branches, ayant un angle de 144 degré.

  1. Définir la couleur du crayon à gold.
  2. À l'aide de l'énoncé, dessiner une étoile dont les branches font 30 pixels.
  3. En vous servant du tableau des fonctionnalités, remplir la couleur de l'étoile. Il faudra faire attention à bien placer ces instructions en dehors de la boucle.

Plusieurs étoiles

Les fonctions

Imaginons que nous voudrions placer plusieurs étoiles (un peu plus joli !) sur notre dessin. Une solution consisterait à :

  • Lever le crayon
  • Se déplacer
  • Poser le crayon
  • Copier-coller les instructions permettant de dessiner l'étoile
from turtle import * #Import de la bibliothèque

speed(0) #Vitesse maximale du dessin
bgcolor("midnight blue") #On va créer un fond bleu nuit

#---------- Dessin d'une étoile -----------------#

color("gold") #Couleur de remplissage
begin_fill() #Commencer le remplissage
for i in range(5):
forward(30) #Avancer de 30 pixels
right(144) #Tourner de 144 degrés vers la droite
end_fill() #Terminer le remplissage

#---------- Déplacement pour en dessiner une autre -----------------#

up() #On lève le crayon
goto(50,50) #On se déplace au point de coordonnée x = 50, y = 50
down() #On pose le crayon

#---------- Dessin d'une étoile -----------------#

color("gold") #Couleur de remplissage
begin_fill() #Commencer le remplissage
for i in range(5):
forward(30) #Avancer de 30 pixels
right(144) #Tourner de 144 degrés vers la droite
end_fill() #Terminer le remplissage


mainloop() #Doit être en tout dernier

Le code serait illisible si on souhaite dessiner plusieurs étoiles !

Une solution consisterait à "ranger" les instructions permettant de dessiner une étoile dans une boite, un mot, qui exécuterait le tout, lorsqu'on l'écrirait.

#---------- Fonction permettant de dessiner une étoile -----------------#
def etoile():
color("gold") #Couleur de remplissage
begin_fill() #Commencer le remplissage
for i in range(5):
forward(30) #Avancer de 30 pixels
right(144) #Tourner de 144 degrés vers la droite
end_fill() #Terminer le remplissage

Dans ce code, on définit qu'une étoile se crée avec l'ensemble des instructions qu'on lui donne.

Ainsi, notre code pourrait ressembler à ça maintenant :

from turtle import * #Import de la bibliothèque

speed(0) #Vitesse maximale du dessin
bgcolor("midnight blue") #On va créer un fond bleu nuit

#---------- Fonction permettant de dessiner une étoile -----------------#
def etoile():
color("gold") #Couleur de remplissage
begin_fill() #Commencer le remplissage
for i in range(5):
forward(30) #Avancer de 30 pixels
right(144) #Tourner de 144 degrés vers la droite
end_fill() #Terminer le remplissage

#---------- Dessin d'une étoile -----------------#

etoile()

#---------- Déplacement pour en dessiner une autre -----------------#

up() #On lève le crayon
goto(50,50) #On se déplace au point de coordonnée x = 50, y = 50
down() #On pose le crayon

#---------- Dessin d'une autre étoile -----------------#

etoile()


mainloop() #Doit être en tout dernier

Ici, utiliser le mot etoile() (avec les parenthèses) va permettre d'exécuter l'ensemble des instructions qui ont été définies.

  1. En utilisant les explications données, dessiner 5 étoiles un peu partout.
Paramètres

Maintenant que nous savons créer une fonction etoile(), nous allons la rendre plus flexible grâce aux paramètres.

Un paramètre est une information que l’on donne à la fonction, pour qu’elle adapte son comportement. Par exemple, on pourrait créer des étoiles avec des tailles différentes.
Pour ce faire, on pourrait écrire ce code :

#---------- Fonction permettant de dessiner une étoile avec une taille donnée -----------------#
def etoile(taille):
color("gold") #Couleur de remplissage
begin_fill() #Commencer le remplissage
for i in range(5):
forward(taille) #Avancer d'autant de pixels que vaut "taille"
right(144) #Tourner de 144 degrés vers la droite
end_fill() #Terminer le remplissage

On précise taille dans les parenthèses, cela signifie que certaines instructions vont fonctionner différemment suivant ce que contiendra taille :

from turtle import * #Import de la bibliothèque

speed(0) #Vitesse maximale du dessin
bgcolor("midnight blue") #On va créer un fond bleu nuit

#---------- Fonction permettant de dessiner une étoile avec une taille donnée -----------------#
def etoile(taille):
color("gold") #Couleur de remplissage
begin_fill() #Commencer le remplissage
for i in range(5):
forward(taille) #Avancer d'autant de pixels que vaut "taille"
right(144) #Tourner de 144 degrés vers la droite
end_fill() #Terminer le remplissage

#---------- Dessin d'une étoile de 20px -----------------#

etoile(20)

#---------- Déplacement pour en dessiner une autre -----------------#

up() #On lève le crayon
goto(50,50) #On se déplace au point de coordonnée x = 50, y = 50
down() #On pose le crayon

#---------- Dessin d'une étoile de 30px-----------------#

etoile(30)


mainloop() #Doit être en tout dernier
  1. Adapter votre code pour qu'il puisse prendre en compte une taille, et modifier les étoiles pour avoir des tailles différentes.

On veut maintenant réduire encore plus le code, et pouvoir dessiner des étoiles partout, sans avoir à répéter les instructions up(), down(), goto(...,...), et faire en sorte de dessiner une étoile d'une taille donnée à un emplacement donné.

  1. Mettre les 3 lignes de déplacement dans la fonction etoile, juste avant le color("gold").

  2. Rajouter dans les paramètres (parenthèses) après taille les lettres x et y. Elles signifient qu'on créera une étoile au point de coordonnées x et y.

  3. Sur la ligne goto(50,50), remplacer le premier 50 par x, et le second par y. Cela signifie qu'on va déplacer la flèche au point de coordonnées x et y (ils auront n'importe quelle valeur).

Maintenant pour créer des étoiles, il ne reste plus qu'à avoir cette ligne dans le programme :

etoile(30,50,50)

Pour dessiner une étoile de taille 30, au point de coordonnée x = 50 et y = 50

  1. Faire les modifications dans votre programme pour n'avoir que des lignes etoile, en placant des étoiles où vous voulez.

Dessiner un sapin de Noël 🎄

On souhaite maintenant dessiner un sapin de Noël pour compléter notre carte de vacances.

Un sapin est un dessin composé de plusieurs parties :

  • un tronc ;
  • des branches (les parties vertes) ;
  • un sapin complet, qui regroupe le tronc et les branches.

👉 Nous allons donc créer trois fonctions :

  1. tronc()
  2. branches()
  3. sapin()

Le tronc du sapin

Le tronc est un rectangle de couleur marron.

  1. Créer une fonction appelée tronc().
  2. Changer la couleur du crayon en saddlebrown.
  3. Dessiner un rectangle de :
    • largeur : 30 pixels
    • hauteur : 50 pixels
  4. Remplir de couleur le tronc.

💡 Rappel : un rectangle se dessine avec 2 côtés longs et 2 côtés courts.


Les branches du sapin

Les branches seront représentées par plusieurs triangles verts, placés les uns au-dessus des autres.

  1. Créer une fonction appelée branches().
  2. Changer la couleur du crayon en green.
  3. Dessiner un premier triangle de taille 120 pixels.
  4. Avancer légèrement vers le haut.
  5. Dessiner un deuxième triangle plus petit (100 pixels).
  6. Avancer à nouveau vers le haut.
  7. Dessiner un troisième triangle encore plus petit (80 pixels).

💡 Rappel : un triangle équilatéral se dessine avec un angle de 120 degrés.


Regrouper le tout : la fonction sapin()

Nous allons maintenant créer une fonction qui regroupe les deux précédentes.

  1. Créer une fonction appelée sapin().
  2. Dans cette fonction :
    • dessiner les branches ;
    • puis dessiner le tronc au bon endroit.
  3. Utiliser up() et down() pour placer correctement le tronc sous les branches.

Tester le sapin

Dans le programme principal :

  1. Placer le crayon au centre de l’écran.
  2. Appeler la fonction sapin() une seule fois.
  3. Vérifier que le sapin apparaît correctement à l’écran.

Questions de réflexion

  1. Pourquoi est-il préférable de séparer le dessin en plusieurs fonctions ?
  2. Que se passerait-il si on voulait modifier uniquement la taille du tronc ?
  3. Quelle fonction faut-il modifier pour changer la forme des branches ?

Pour aller plus loin

  • Ajouter une étoile au sommet du sapin
  • Ajouter des boules de Noël
  • Modifier la taille des triangles pour créer un sapin plus grand
  • Dessiner plusieurs sapins à différents endroits