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 arguments ou 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 arguments 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 argument (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(argument1, argument2, etc.):
    bloc_instructions
    return valeur_renvoyée_1, valeur_renvoyée_2, etc.

Analyse :

Pour fixer les idées, prenons un exemple.

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

A faire vous-même n°1

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

Appeler une fonction

Une fois qu'une fonction est écrite et mémorisée, on peut l'appeler pour connaître la valeur qu'elle renvoie.

Exemple 1 : Avec la fonction f précédente, pour connaître la valeur renvoyée dans le cas où l'argument x vaut 3, il suffit de taper f(3) dans la console et de valider. On dit dans ce cas que l'on effectue un appel à la fonction f (pour la valeur 3). On peut faire autant d'appel que l'on souhaite avec d'autres valeurs.

illustration

Pour cet exemple, chaque appel permet de connaître l'image par la fonction f de l'argument choisi (l'image de 3 par f vaut 7, etc.)

Exemple 2 : La fonction prix_a_afficher est appelée à chaque fois qu'un client modifie la quantité souhaitée.

illustration

Selon la quantité sélectionnée par le client sur le site, c'est la fonction prix_a_afficher qui est appelée. Pour une quantité choisie égale à 2, c'est l'appel prix_a_afficher(2) qui est fait, tandis que si la quantité choisie est égale à 5, c'est l'appel prix_a_afficher(5) qui est effectué. Les valeurs renvoyées peuvent ensuite être affichées à l'écran.

A faire vous-même n°2

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.

Activités

A faire vous-même n°3

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 d'arguments ?
  3. Écrivez cette fonction.
  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°4

pixel art

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 définition d'une image de 500 pixels en largeur et 800 pixels en hauteur.
  2. Recopiez la fonction suivante dans un é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°5

image d'un smartphone

Crédit : Pixabay

La couleur d'un pixel est définie par 3 valeurs : une valeur de rouge (R), une valeur de vert (V) et une valeur de bleu (B). Chacune de ces valeurs 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$$

  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".
  2. Calculez 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 renvoie la nuance de gris d'un pixel à partir de ses composantes R, V et B.
    • 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 puis cliquez sur "Fork". Regardez l'image "girl.jpg" dans les fichiers sur la fenêtre de gauche. Le programme Python a pour but de la convertir en niveaux de gris. Pour cela, vous n'avez qu'à copier votre fonction gris en début de programme et l'exécutez. Regardez la nouvelle image créée par ce programme Python (elle se situe dans le fichiers à gauche et s'appelle "grey_girl.jpg").

A faire vous-même n°6

iPhone11

Les dimensions des écrans (d'ordinateur, de smartphone, de TV, ...) sont très souvent données en pouces (notés "), qui est une unité de longueur anglo-saxonne. On sait que 1 " $\simeq$ 2,54 cm.

On souhaite écrire une fonction permettant de convertir en cm une valeur donnée en pouce.

  1. Quel nom peut-on donner à cette fonction ?
  2. Combien de paramètres possède cette fonction ?
  3. Combien de valeurs sont renvoyées par cette fonction ?
  4. Écrivez cette fonction Python.
  5. Quel appel faut-il faire pour connaître la longueur en cm de la diagonale de l'iPhone 11 ? Faites une capture d'écran et intégrez-là à votre fichier de réponses.

A faire vous-même n°7

illustration

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

Le module turtle (tortue) permet de dessiner avec Python.

Cliquez sur le lien suivant pour ouvrir un programme Python : https://repl.it/@beckerg/turtle. Cliquez ensuite sur le bouton "Fork" pour copier ce programme sur votre compte.

  1. Appelez la fonction carre dans la console (on laisse les parenthèses vides car elle n'a pas d'argument) et observez ce qu'elle fait.
  2. Complétez le code de la fonction pour qu'elle dessine le carré en entier.
    Appelez la fonction pour tester (n'oubliez pas d'appuyer au préalable sur Run pour mémoriser les modifications).
  3. Modifiez ensuite le code pour que la fonction carre dessine des carrés rouges de côté 50 pixels.
    Appelez la fonction pour tester (n'oubliez pas d'appuyer au préalable sur Run pour mémoriser les modifications).
  4. Ecrivez une fonction triangle qui dessine un triangle équilatéral de côté 100 de la couleur de votre choix.
    Appelez la fonction pour tester (n'oubliez pas d'appuyer au préalable sur Run pour mémoriser les modifications).
  5. Modifiez les deux fonctions carre et triangle pour qu'elles aient chacune un paramètre c 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 (n'oubliez pas d'appuyer au préalable sur Run pour mémoriser les modifications).

Bilan