#!/usr/bin/env python # coding: utf-8 # # Découverte des fonctions # 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. # # La notion de fonction en informatique est comparable à la notion de fonction en mathématiques. # ![](http://informatiquelycee.fr/img/fct_1.jpg) # Si nous avons $f(x) = 3x+2$, pour une valeur donnée de x, nous aurons une valeur de $f(x)$. # # **Exemple** : Si $x=4$, $f(x)=14$ ($3\times 4+2=14$). # # Voici comment, avec Python, répondre à ce problème. Exécutez et analysez la cellule suivante. # In[ ]: def f(x): y=3*x+2 return y print(f(4)) # Arrêtons-nous un moment sur ce code : # # - La fonction en informatique est basée sur la même idée qu'en mathématiques : # ![](http://informatiquelycee.fr/img/fct_2.jpg) # - On reconnaît le mot clé `def` dont on vient de parler. On le fait suivre du nom de la fonction - ici **f** - suivi par les *paramètres* que cette fonction prend en entrée entre parenthèse - ici un seul *paramètre¨* est passé : `x`. # - Pour savoir ou commence et ou finit la fonction, python utilise la notion de bloc. Un bloc # - commence par `:` # - est décalé par rapport au début de la marge # Ainsi notre fonction commence à la ligne `y=`et se finit après le `return`. # # On retrouve encore les fameux blocs qui commencent par `:` et qui sont **décalés par rapport à la marge** que nous avons déjà rencontré dans les tests, les boucles for, while etc... # # - La ligne `y=3*x-2` est assez explicite... # - La ligne `return y` est importante : c'est elle qui indique ce que doit renvoyer la fonction. # Il est très facile, une fois une fonction définie d'afficher des valeurs. On tape simplement sur la ligne de saisie ce que l'on écrirait sur notre cahier de maths : # In[ ]: f(5) # La fonction *f* est ici un moyen rapide d'exécuter le calcul `y=3*x-2` sans avoir à retaper la formule # ## Généralisation de la notion de fonction # Une fonction au sens Python généralise l'exemple que nous avons vu ci-dessus au sens ou une fonction en programmation est un morceau de code auquel on peut faire appel par un nom. # - Une fonction peut prendre un ou plusieurs paramètres # - Une fonction, contrairement à ce qu'on voit en maths, ne retourne pas forcément de valeur. Elle effectue une tâche précise. # - Une fonction permet de rendre le code plus facile à lire en séparant un problème complexe en plusieurs taches plus simples pouvant être traitées séparément. # Observez l'exemple ci-dessous et répondez aux questions posées ensuite : # In[ ]: def table(n,limite): print("Table de multiplication de ",n) for i in range(1,limite+1): print(i,"x",n,"=",i*n) # Comment s'appelle la fonction ? # # ... # # Quel(s) paramètres prend-elle ? # # ... # # Que retourne t-elle ? # # ... # # Que fait-elle ? # # ... # # Appelez cette fonction pour sortir la table de 7 pour des facteurs allant de 1 à 9. # In[ ]: # ## A vous de jouer # En mathématiques, on utilise la fonction ***factorielle*** d'un nombre pour calculer le produit de tous les entiers non nuls entre 1 et ce nombre. Par exemple : # # Factorielle 5 (que l'on note 5!) se calcule par la formule : $5!=1\times 2\times 3\times 4\times 5=120$ # # Voici un programme qui calcule 10! (factorielle 10). # Exécutez et analyser la cellule suivante: # In[ ]: factor=1 for i in range(1,11): factor = factor * i print(factor) # ## A vous de jouer # # Ecrire une fonction ***Factorielle*** prenant en ***paramètre*** un entier ***n*** et ***retournant*** la factorielle de ce nombre. # # Testez cette fonction en calculant ***Factorielle(5)*** # In[ ]: # Definition de la fonction Factorielle # Appel de la fonction # ## Conclusion # Les fonctions jouent un rôle fondamental en informatique. Aucun programme n'est écrit d'un bloc. Imaginez un programme comme OpenOffice qui contient plusieurs centaines de milliers de lignes de codes écrites bout à bout sans structure... # # Vous devrez prendre l'habitude de concevoir vos propres fonctions pour répondre à un problème donné. # In[ ]: