SNT / Programmation Python / Séance 2

Les fonctions (en programmation)

Introduction

Dans un langage de programmation, on utilise ce qu'on appelle des fonctions. Une fonction est un ensemble d'instructions qui peut recevoir des paramètres (qui sont des valeurs ou des variables) et qui peut renvoyer le contenu d'une ou plusieurs variables.

Pourquoi utilise-t-on le mot fonction ?
Par analogie, on utilise le même terme qu'en mathématiques car le principe est identique puisqu'une fonction mathématique reçoit aussi des paramètres et renvoie des valeurs.

Premier exemple

Exemple 1 : Prenons la fonction mathématique $f$ définie par $f(x) = 2x +1$. Celle-ci reçoit un paramètre (ici $x$) et renvoie une valeur (ici $2x+1$). Cette fonction mathématique $f$ s'écrirait en la fonction Python suivante.

def f(x):
    return 2 * x + 1

Les fonctions (en programmation) ne servent pas qu'à faire des mathématiques, loin de là, et sont énormément utilisées, partout, tout le temps.

Syntaxe d'une fonction Python

Une fonction Python a la syntaxe suivante :

def nom_fonction(parametre1, parametre2, etc.):
    bloc_instructions
    return valeur_renvoyée_1, valeur_renvoyée_2, etc.

Analyse :

Pour fixer les idées, prenons un exemple concret.

Deuxième exemple

Exemple 2

illustration

Sur un site de vente en ligne, il est possible de modifier la quantité du produit que l'on souhaite acheter (souvent avec des boutons "+" et "-"). Prenons l'exemple d'un paquet de farine bio coûtant 1,15 €. A chaque clic sur un des boutons "+" ou "-", une fonction est chargée de calculer le prix à afficher à l'écran en fonction de la quantité sélectionnée par l'acheteur. Cette fonction pourrait être définie en Python de la façon suivante.

def prix_a_afficher(quantite):
    prix = 1.15 * quantite
    return prix

À faire vous-même n°1

✍️ Inspectez le code de la fonction ci-dessus pour repérer :

À faire vous-même n°2

Vous allez maintenant écrire le code de la fonction prix_a_afficher vous-même avec un éditeur de code.

Appeler une fonction

Vous avez peut-être essayé d'exécuter le code de la fonction précédente... Vous avez alors constaté que rien ne se passe, c'est normal ! En effet, une fois qu'une fonction est écrite, le bouton "Exécuter" ne permet que de mémoriser la fonction, autrement dit d'enregistrer en mémoire ce que doit faire la fonction.

Pour utiliser une fonction et exécuter son bloc d'instructions, il faut l'appeler pour connaître la valeur qu'elle renvoie, cet appel se fait dans la zone de droite de l'éditeur que l'on appelle la console : suivez ce qui suit pour le faire :

À faire vous-même n°3

Vous allez désormais appeler la fonction précédente pour l'utiliser. Voici comment procéder :

Activités

A faire vous-même n°4

Regardez la vidéo suivante qui vous montre comment écrire une fonction avec un éditeur Python et comment l'appeler pour connaître les valeurs qu'elle renvoie. C'est l'éditeur replit qui est utilisé dans la vidéo mais le principe est exactement le même.

A faire vous-même n°5

image d'une calculatrice

On veut écrire une fonction Python qui permet de renvoyer la différence (= la soustraction) de deux nombres.

  1. ✍️ Quel nom peut-on donner à cette fonction ?
  2. ✍️ Combien doit-elle avoir de paramètres ?
  3. 💻 Allez sur console.basthon.fr et écrivez cette fonction en vous inspirant de la vidéo précédente.
  4. 💻 Quel appel à la fonction faut-il faire pour obtenir la différence entre $5$ et $2$ ? Faites-le. Faites une capture d'écran et intégrez-là à votre fichier de réponses.

A faire vous-même n°6

pixel art

Crédit : Pixabay

La définition d'une image numérique est le nombre de pixels qui composent l'image. Par exemple, une image de 800 pixels en largeur et 600 pixels en hauteur a une définition égale à 800 x 600 = 480 000 pixels.

  1. ✍️ Calculez à la main la définition d'une image de 500 pixels en largeur et 800 pixels en hauteur.
  2. 💻 Allez sur console.basthon.fr et recopiez la fonction suivante dans l'éditeur et complétez-la pour qu'elle calcule et renvoie la définition d'une image de L pixels en largeur et H pixels en hauteur.
  3. def definition_image(L, H):
        # à compléter
  4. 💻 Appelez cette fonction pour obtenir la définition d'une image de 800*600 pixels puis celle d'une image de 500*800 pixels. Faites une capture d'écran et intégrez-là à votre fichier de réponses.

A faire vous-même n°7

image d'un smartphone

Crédit : Pixabay

La couleur d'un pixel est définie par 3 composantes : une composante de rouge (R), une composante de vert (V) et une composante de bleu (B). Chacune de ces composantes est un nombre entier comprise entre 0 et 255.

Un des filtres disponibles sur les smartphones consiste à transformer une photo couleur en une photo en nuances de gris. Pour cela, un algorithme est chargé de calculer la nuance de gris $G$ de chaque pixel à partir des nuances $R$, $V$ et $B$. La formule permettant de faire ce calcul est la suivante :

$$G = 0,11 \times R + 0,83 \times V + 0,06 \times B$$

Par exemple, un pixel rouge pur a pour composantes : $R=255$, $V=0$ et $B=0$. La nuance de gris de ce pixel se calcule alors ainsi : $G=0,11 \times 255+0,82 \times 0 + 0,06 \times 0 = 28,05$. On prend alors la valeur entière la plus proche, c'est-à-dire $28$.

  1. ✍️ Utilisez l'application proposée par ce site pour trouver les valeurs décimales des composantes R, V et B de la couleur appelée "blueviolet". On pourra chercher cette couleur dans la liste déroulante appelée "Couleur nommée".
  2. ✍️ Calculez à la main alors la nuance de gris de ce pixel à l'aide de la formule donnée précédemment. On arrondira à l'entier le plus proche.
  3. On veut écrire une fonction Python appelée gris qui possède trois paramètres R, V et B correspondant aux composantes RVB d'un pixel, et qui renvoie la nuance de gris correspondante du pixel.
    • ✍️ Combien de paramètres possède cette fonction ?
    • ✍️ Combien de valeurs sont renvoyées par cette fonction ?
    • 💻 Écrivez cette fonction Python. Appelez le professeur pour vérification.
    • 💻 Appelez la fonction pour connaître la nuance de gris d'un pixel de couleur "blueviolet". Faites une capture d'écran et intégrez-là à votre fichier de réponses.

Pour les curieux : on peut utiliser cette fonction gris et l'appliquer à chaque pixel d'une image pour la convertir en une image en niveaux de gris. Pour tester cela, suivez ce lien. Le programme Python a pour but de convertir l'image ci-dessous (le fichier girl.jpg) en niveaux de gris. Pour cela, vous n'avez qu'à copier votre fonction gris en début de programme. Cliquez ensuite sur le bouton "Afficher la vue graphique" et exécutez le code. Vous devriez voir, après quelques secondes, l'image convertie en niveaux de gris.

image de fille en couleurs

Crédit : Pixabay

A faire vous-même n°8

illustration

Crédit : Cormullion, CC BY-SA 4.0, via Wikimedia Commons

Le module turtle (tortue) permet de dessiner avec Python. Vous allez en particulier écrire des fonctions permettant de dessiner des carrés et des triangles.

Cliquez sur ce lien pour ouvrir un programme Python avec Basthon.

  1. 👀 Lisez et analysez le code (incomplet) proposé. Vous remarquerez particulièrement que l'on a appelé la fonction carre dans la fenêtre de gauche (éditeur) car on va utiliser celle de droite pour voir le dessin produit (à la place de la console).
  2. 💻 Cliquez sur le bouton "Afficher la vue graphique" comme indiqué sur l'image ci-dessous. La fenêtre de droite devrait passer sur fond blanc.
  3. illustration
  4. 💻 Exécutez le code (en cliquant sur le bouton "Exécuter") et observez le résultat de l'appel à la fonction carre.
  5. 💻 Complétez le code de la fonction pour qu'elle dessine le carré en entier. Vérifiez en exécutant à nouveau le code.
  6. 💻 Modifiez ensuite le code pour que la fonction carre dessine des carrés rouges de côté 50 pixels. Vérifiez en exécutant à nouveau le code.
  7. 💻 Écrivez dans la fenêtre de gauche une deuxième fonction appelée triangle qui dessine un triangle équilatéral de côté 100 de la couleur de votre choix. Appelez cette nouvelle fonction pour la tester.
  8. 💻 Modifiez les deux fonctions carre et triangle pour qu'elles aient chacune un paramètre cote qui détermine la taille des côtés du carré ou du triangle. Par exemple, carre(70) doit dessiner un carré de côté 70 pixels, triangle(100) doit dessiner un triangle équilatéral de côté 100 pixels.
    Appelez les deux fonctions modifiées pour tester.

Bilan