Fiche méthode 1ère NSI – Les fonctions 1/5
Objectifs :
✓ Introduire la notion de fonctions en programmation
✓ Savoir définir une fonction en Python
✓ Comprendre l’intérêt de définir des fonctions
✓ Ajouter de nouvelles instructions au langage de programmation sous la forme de fonctions originales
Il arrive très souvent en programmation qu’une instruction un peu complexe reviennent régulièrement, qu’un traitement de données nécessite plusieurs fois le même algorithme… les fonctions sont là pour nous aider dans ces tâches !
Ada Lovelace a été la première à formaliser le principe de programmation en expliquant comment réaliser un calcul mathématique complexe en le fractionnant.
Les principes
Les fonctions permettent de décomposer un programme complexe en une série de sous-programmes plus simples. De plus, les fonctions sont réutilisables : si nous disposons d'une fonction capable de calculer une racine carrée, par exemple, nous pouvons l'utiliser un peu partout dans notre programme sans avoir à la réécrire à chaque fois (on parle de factorisation du code)
Une fonction est définie par un nom, par ses arguments qui porteront les valeurs communiquées par le programme principal à la fonction au moment de son appel et éventuellement d’une valeur de retour communiquée au programme par la fonction en fin d’exécution
La notion de fonction en informatique est comparable à la notion de fonction en mathématiques.
Si nous avons la fonction y = f(x) = 1,5.x + 6, pour une valeur donnée de x, nous aurons une valeur de y.
Exemple : x = 12 ➔ y = f(12) = 24
Les fonctions
Valeur de x
Valeur de y
Fiche méthode 1ère NSI – Les fonctions 2/5
La fonction en informatique est basée sur la même idée :
Intérêts des fonctions :
✓ Evite la duplication du code (factorisation du code)
✓ Améliore la conception : décompose un problème initial complexe en sous problèmes plus simples
✓ Met en relief les entrées et les sorties
✓ Permet la réutilisation ultérieur (avec l’instruction import)
En Python
Syntaxe employée en Python pour définir une fonction :
def nom_de_la_fonction(parametres):
instruction_1 instruction_2 return y
suite du programme
La fonction renvoie la valeur contenue dans la variable y.
Problème initial complexe = programme principal
Sous problème complexe
Sous problème 1 fonction1
Sous problème 2 fonction2
Sous problème 3 fonction3
Sous problème 4 fonction4
Valeur(s) de départ =
paramètre(s) Valeur renvoyée par la
fonction = retour
Fiche méthode 1ère NSI – Les fonctions 3/5
Attention :
✓
Bien noter la présence du décalage entre la première ligne et les lignes suivantes. Ce décalage est appelé indentation, l'indentation permet de définir un bloc de code. Dans l'exemple ci-dessus, l'indentation nous permet de savoir que "instruction_1", "instruction_2" et "return y" constituent un bloc de code, ce bloc correspond au contenu de la fonction. "suite programme" ne fait pas partie de la fonction, car il n'est pas indenté. Pour indenter du code, il y a 2 solutions : mettre 4 espaces ou utiliser une tabulation. Ne pas changer de méthode au cours d'un même programme !
✓
Une fonction doit être déclarée avant d’être appelée par le programme principal (ou par une autre fonction)
Codons l’exemple f(x) = 1,5.x + 6 en créant une fonction ma_fonction :
def ma_fonction(x):
y = 1,5 * x + 6 return y
Pour "utiliser" la fonction ma_fonction, il suffit d'écrire :
ma_fonction (12)(dans ce cas précis, la fonction renverra le nombre 24).
Les fonctions récursives
Les fonctions peuvent s’appeler elles-mêmes, on parle alors de fonctions récursives.
Attention : dans le cas de fonctions récursives, il est impératif de prévoir un cas de base dans lequel la fonction ne s’appelle pas elle-même afin qu’elle ne s’appelle pas indéfiniment et que le programme boucle à l’infinie.
Exemple : fonction permettant de calculer la puissance n de 2.
def puissance2(n):
if n == 0:
return 1 # cas de base else :
return (2 * puissance2 (n – 1)) # le résultat est 2 * 2n - 1
Quelques exemples
A tester avec le fichier d’exemples et d’activités fourni sous Jupyter.
Fonction donnant la table de multiplication par 12.
def table12() :
’’’ fonction affichant les 10 premiers éléments de la table de 12 ’’’
for n in range (11) :
print (n, ’ x 12 = ’, n * 12)
Fonction renvoyant une phrase d’accueil def accueil(nom, age) :
’’’ fonction renvoyant une phrase accueil - paramètres nom et âge ’’’
phrase = "Bonjour {}, vous avez {} ans.". format(nom, age) return phrase
Fiche méthode 1ère NSI – Les fonctions 4/5
Fonction renvoyant le périmètre et l’aire d’un rectange sous forme de tuple def rectange(longueur, largeur) :
’’’ fonction renvoyant le périmètre et l’aire d’un rectange’’’
perimetre = 2 * (longueur + largeur) aire = longueur * largeur
return perimetre, aire
Activités pour vous entraîner
✓ Activité 1 : Réaliser une fonction table_multiplication ayant pour paramètre nb, permettant d’afficher les 11 premiers éléments de la table de multiplication de nb.
✓ Activité 2 : Coder en Python la fonction y = x2 + 2x + 10
✓ Activité 3 : Réaliser une fonction cube(n) qui renvoie le cube de la valeur de n.
✓ Activité 4 : Utiliser la fonction précédente dans une nouvelle fonction volumeSphere(r) renvoyant le volume de sphère de rayon r (rappel : le volume d’une sphère de rayon r est donné par V = 4/3 ..r3
✓ Activité 5 : Ecrire une fonction qui renvoie la plus grande de deux valeurs entières.
✓ Activité 6 : Ecrire une fonction qui prend un argument une chaîne de caractère s et deux entiers i et j et renvoie la sous-chaîne de s comprise entre le caractère numéro i inclus et le caractère numéro j exclus.
✓ Activité 7 : Ecrire une fonction récursive quotient qui calcule le quotient de la division d’un entier par un autre entier (sans utiliser l’opérateur // du langage…)
✓ Activité 8 : Ecrire une fonction récursive reste qui calcule le reste de la division d’un entier par un autre entier (sans utiliser l’opérateur % du langage…)
✓ Activité 9 : Ecrire une fonction récursive qui calcule la factorielle d’un nombre. On rappelle de la factorielle est définie par n ! = 1 x 2 x 3 … x (n-1) x n
✓ Activité 10 : Ecrire une fonction récursive permettant d'afficher un dessin fractal (on utilisera le module turtle). Vous trouverez ci-dessous quelques exemples de réalisation
Fiche méthode 1ère NSI – Les fonctions 5/5
Zoom sur les variables globales et locales
Lorsque vous définissez des variables à l’intérieur d’une fonction, ces variables ne sont accessibles qu’à la fonction elle-même : on parle de variables locales.
A chaque appel de la fonction, Python va allouer un espace mémoire et un espace de noms pour ces variables.
Les variables définies à l’extérieure d’une fonction sont des variables globales. Leur contenu est visible depuis l’intérieur d’une fonction mais cette dernière ne peut pas le modifier. Python considère alors qu’il s’agit d’une nouvelle variable (même si visuellement vous lui avez donné le même nom !)
Attention : vous pouvez toutefois modifier cette règle que s’est fixée Python. Pour réaliser cela, il vous suffit d’utiliser l’instruction global suivi du nom de la variable à l’intérieur de la fonction.
Tester les exemples présents dans le cours sur les fonctions sous Jupyter dans la rubrique « Variables globales – Variables locales ».