Définir une Fonction
Nous allons commencer avec un exemple. Vous rappelez-vous de la fonction abs
? Elle prend seulement un argument (un nombre x), et retourne sa valeur absolue (qui devient x quand x ≥ 0 et -x quand x < 0). La façon de définir cette fonction dans Python est :
Nous pourrions coder la même fonction différemment, sans que cela ne fasse aucune différence dans la façon de l'utiliser.
Dans cette seconde version nous introduisons 2 fois l'instruction return. Ne perdez pas de vue que, dès lors qu'une instruction return est exécutée, la fonction s'arrête (et on reprend le programme appelant là ou on l'avait arrêté).
Notez que dans cette version nous n'initialisons pas la variable valeur absolue, c'est inutile, on n'utilise aucune variable, on renvoie simplement un résultat.
Exercices
Bonnes pratiques de programmation
Le langage Python est plus aisé pour démarrer la programmation pour la concision des codes écrits et pour la gestion automatique du typage par l'interpréteur. Cependant, le but est que vous puissiez à terme être capable de faire basculer vos compétences acquises en NSI sur Python vers d'autres langages de programmation.
Comme la plupart des langages de programmation nécessitent la spécification du typage des variables, on vous demandera d'écrire en Python, une fonction en précisant le type de chaque entrée et sortie en suivant le même formalisme ci-dessous :
def nomFonction(argument: type) -> typeRetour:
blocs des instructions
return résultat
La convention PEP8 donne l'habitude de nommer les fonctions (comme les variables) avec des lettres minuscules et des tirets bas (celui du "8") _
.
Exemples : lire_fichier
, resoudre_equation
, creer_grille_vide
etc...
Comme pour les noms de variables, il est absolument recommandé de ne pas utiliser de caractères accentués dans les noms des fonctions. |
On préfère toutefois parfois (ou souvent suivant les personnes) la convention dite camelCase qui consiste a écrire en minuscules, mais si le nom est constitué de plusieurs mots, on met une majuscules à tous les mots sauf le premier.
Exemples : lireFichier
, resoudreEquation
, creerGrilleVide
etc...
Pour clarifier la fonction, il est conseillé d'utiliser un verbe dans son nom (obtenir, donner, get, set, ...).
Il est important de documenter vos fonctions, c'est-à-dire de décrire en quelques phrases le rôle de la fonction, de donner des informations sur la fonction, le lien entre les entrées et la sortie.
Pour cela, juste en dessous de la première ligne définissant la fonction, il suffit de mettre ses informations de préférence entre """ """
ou entre'''
'''
et '''
; c'est ce que l'on appelle en franglais le docstring de la fonction).
Dans la docstring vous indiquerez ce que sont les paramètres et ce que renvoi la fonction, sous cette forme :
L'intérêt de l'auto-documentation d'une fonction par un texte est double :
- Pour vous : le faire vous oblige à réfléchir au contenu de votre fonction avant de la programmer ; c'est un gain d'efficacité,
- Pour les utilisateurs de votre code (ou pour vous longtemps après avoir programmé la fonction) : Quand on saisit dans la console, après l'exécution de la fonction, l'instruction
help(nom de la fonction)
, Python affiche le docstring de la fonction ce qui nous permet d'avoir des informations sur la fonction en cas d'oubli.
A faire seulement après avoir étudié les listes : fonctions traitant des listes
Utiliser un compteur ou un accumulateur
Dans de nombreux cas, on doit :
- compter le nombre d'occurrences d'une condition
- sommer une quantité
- faire un produit de façon répétée
Dans ces cas, on utilisera un compteur ou un accumulateur.
Un compteur en action
Ecrire une fonction qui prend en argument une liste de nombres entiers et renvoie le nombre de multiples de 3 dans cette liste
Déterminer la médiane d'une série statistique
Rappel de l'algorithme de la médiane
Soit lst=[x1, x1, ...xN] une série de nombres (la série contient N éléments) ordonnée dans l'ordre croissant.
- Si N est pair la médiane est la moyenne des valeurs de rang N/2 et N/2 + 1
- Si N est impair, la médiane est la valeur de rang (N+1)/2