Python en mathématiques - Niveau 1

La notion de fonction

Le programme 2019 insiste particulièrement sur la notion de fonction :

La démarche algorithmique est, depuis les origines, une composante essentielle de l’activité mathématique. Au cycle 4, en mathématiques et en technologie, les élèves ont appris à écrire, mettre au point et exécuter un programme simple. Une consolidation des acquis du cycle 4 est proposée autour de deux idées essentielles :

  • la notion de fonction ;
  • la programmation comme production d’un texte dans un langage informatique.

En programmation, le rôle principal des fonctions est d'organiser le code en petites unités logiques, en petites unités de traitement aux rôles bien distincts. Ce découpage facilite la lecture d'un programme (et en facilite la maintenance).
Un autre rôle essentiel est de factoriser le code, c'est-à-dire d'éviter d'avoir à écrire à plusieurs endroits du programme des bouts de code similaires.

En classe de seconde, le rôle essentiel des fonctions pourra être de coder une fonction mathématique ou un algorithme de recherche.

Définir une fonction en langage Python

Prenons l'exemple d'une fonction prenant en entrée un nombre x (c'est-à-dire une variable de type float ou de type int) et renvoyant en sortie le carré de x.

Au collège, avec le langage Scratch, les élèves définissaient cette fonction ainsi :

Fonction carré en Scratch

En Python, la même fonction sera définie comme ci-dessous :


def carre(x):
    return x*x
  • Le mot clef def annonce que le nom qui suit (ici carre) sera une fonction.
  • On indique ensuite entre parenthèses le ou les paramètres (il peut ne pas y avoir de paramètre).
  • Les deux points « : » permettent de déclarer le début du bloc d'instructions qui composent cette fonction. Ce bloc doit obligatoirement être indenté.
  • On indique l'image (ce que renvoie la fonction) grâce au mot-clef return (en l'absence d'un return explicite, Python renvoie systématiquement l'objet None).

Entrée, sortie et fonction

Les notions d'entrée et de sortie sont naturellement attachées à la notion de fonction.

Dans le cas des fonctions, on précisera souvent en parlant des paramètres d'entrée (on parle aussi d'«arguments» de la fonction dans la littérature informatique) et des valeurs renvoyées (on trouve aussi « valeurs retournées » dans la littérature informatique, il s'agit a priori d'une mauvaise traduction de l'anglais return).

Il est important de bien distinguer entre :

  • la valeur renvoyée par un algorithme (la sortie de l'algorithme);
  • et un affichage à l'écran d'un résultat.

Dans l'exemple trivial de la fonction carre() :


def carre(x):
    return x*x
  • Le paramètre d'entrée est x (il pourrait y en avoir d'autres, il pourrait ne pas y en avoir).
  • La valeur renvoyée est x*x, c'est-à-dire .

Spécifier une fonction

Dans la suite de ces pages, nous utiliserons l'expression spécifier une fonction. Il s'agira :

  • de préciser quelles sont les données (paramètres) d'entrée,
  • de préciser quel est le résultat (la/les valeurs) renvoyé,
  • d'indiquer quelles sont les propriétés qui relient les données et le résultat.

Par exemple, voici une spécification de la fonction carre() :

Paramètre Un flottant x
Valeur renvoyée Le carré de x

Compléments sur la spécification d'une fonction Plus tard !

Spécifier une fonction, c'est donc donner le cahier des charges de cette fonction : que calcule-t-elle et à partir de quelles entrées ?
Par contre, la spécification ne s'occupe pas de dire comment se fait ce calcul (notamment la spécification n'explicite pas d'algorithme).

La phase de spécification est donc suivie d'une phase d'implantation (on trouve aussi le mot « implémentation »). En informatique, on parle en général à ce stade de définir la fonction : c'est le comment. Une même spécification peut donc donner lieu à plusieurs implantations.

Dans un travail informatique, si l'on veut que les élèves utilisent une fonction sans la définir eux-mêmes (par exemple parce que ce serait trop difficile ou trop long, ou déjà réalisé quelques semaines auparavant...), il sera nécessaire de préciser la spécification de cette fonction aux élèves (la spécification peut alors être considérée comme un mode d'emploi de la fonction), mais il n'est pas besoin d'en préciser la définition (c'est-à-dire le détail de l'algorithme permettant de transformer les entrées en sortie).

Exemple

Voici la spécification d'une fonction nommée est_racine() :

Paramètre Un entier relatif n.
Valeur renvoyée True si n est racine du trinôme $ x \longmapsto x^2 - x - 6 $, False sinon.

Deux codes différents peuvent satisfaire la spécification de cette fonction :


def est_racine(n):
    return n*n - n - 6 == 0

et


def est_racine(n):
    return n == -2 or n == 3