Calculer une année bissextile sans se tromper
Une fonction Python est un petit programme qui porte un nom, reçoit des valeurs et rend un résultat. On l’écrit une fois avec def, puis on l’appelle autant de fois qu’on veut.
Les fonctions évitent de recopier le même calcul vingt fois. Elles découpent aussi un gros programme en morceaux que l’on peut tester un à un.
À la fin de cette leçon
Remarque
Je peux écrire une fonction qui reçoit des valeurs et rend un résultat.
Mots-clés
| Mot | Ce que ça veut dire | Exemple |
|---|---|---|
| Fonction | un bloc de lignes qui porte un nom | prix_tickets |
| Paramètre | un nom pour une valeur que la fonction reçoit | |
| Argument | la valeur donnée à la fonction quand on l’appelle | 3 |
| return | le mot qui rend un résultat et termine la fonction | |
| Portée | l’endroit du programme où une variable existe |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
def crée une fonction, return rend son résultat
Écrivez def, le nom de la fonction, les paramètres entre parenthèses, puis deux-points. Le bloc décalé en dessous est le corps de la fonction.
Le mot return rend la valeur à celui qui a appelé la fonction, et la fonction s’arrête là. Sans return, la fonction rend None, c’est-à-dire rien.
Une fonction qui calcule un prix
# Une fonction qui calcule le prix d'un nombre de tickets.
def prix_tickets(nombre, prix_unitaire):
total = nombre * prix_unitaire
return total
print(prix_tickets(3, 2))
print(prix_tickets(10, 2))
# Appelez la fonction avec 4 tickets à 3 euros.
Exemple travaillé : l’appel prix_tickets(3, 2)
| Étape | nombre | prix_unitaire | total | Ce qui se passe |
|---|---|---|---|---|
| Appel avec 3 et 2 | 3 | 2 | · | Les arguments entrent dans les paramètres |
| total = nombre * prix_unitaire | 3 | 2 | 6 | Le calcul est fait |
| return total | 3 | 2 | 6 | La valeur 6 sort, la fonction finit |
| print(...) | · | · | · | Le programme affiche 6 |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Écrire le fichier carre.py
printf 'def carre(x):\n return x * x\n\nprint(carre(7))\n' > carre.pyAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Appeler la fonction carre avec 7
python3 carre.pyAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Erreur fréquente
Attention
Beaucoup pensent que print et return font la même chose. print écrit à l’écran, mais la fonction ne rend rien. return donne une valeur que le reste du programme peut utiliser. Pour calculer, utilisez return.
Une variable de fonction n’existe que dedans
Une variable créée dans une fonction est locale : elle disparaît quand la fonction finit. Ce lieu où elle existe s’appelle sa portée.
Pour utiliser une valeur à l’extérieur, rendez-la avec return, puis rangez-la dans une variable. Les paramètres sont eux aussi locaux.
Rendre une valeur pour l’utiliser dehors
# total existe seulement dans la fonction.
def doubler(valeur):
total = valeur * 2
return total
resultat = doubler(21)
print(resultat)
# Ajoutez print(total) tout en bas : que dit Python ?
Écrire le fichier portee.py
printf 'def f():\n z = 5\n\nf()\nprint(z)\n' > portee.pyAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Lancer le programme qui échoue
python3 portee.pyAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Un petit test vérifie une fonction
Avant de faire confiance à une fonction, testez-la sur des cas dont vous connaissez la réponse. assert dit « ceci doit être vrai ». Si c’est faux, Python s’arrête avec une erreur.
Prenez au moins un cas ordinaire et un cas limite. Pour une année bissextile : 2024, 1900 et 2000. Les années de siècle sont les pièges.
Tester une fonction avec assert
# Un petit test : assert ne dit rien si tout va bien.
def est_pair(nombre):
return nombre % 2 == 0
assert est_pair(4)
assert not est_pair(7)
print("Les tests passent")
# Changez le deuxième assert en assert est_pair(7) : que se passe-t-il ?
Exemple travaillé : la règle de l’année bissextile
| Année | Divisible par 4 ? | Divisible par 100 ? | Divisible par 400 ? | Bissextile ? |
|---|---|---|---|---|
| 2023 | non | non | non | non |
| 2024 | oui | non | non | oui |
| 1900 | oui | oui | non | non |
| 2000 | oui | oui | oui | oui |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Écrire un test dans verif.py
printf 'def est_pair(n):\n return n % 2 == 0\n\nassert est_pair(4)\nassert not est_pair(7)\nprint("ok")\n' > verif.pyAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Lancer les tests
python3 verif.pyAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Pour aller plus loin
Écrivez une fonction ttc(prix_ht) qui ajoute 20 % de TVA. Réfléchissez : calculez-vous prix_ht * 1.2 ou prix_ht + prix_ht * 20 / 100 ?
Écrivez trois assert avec des prix dont vous connaissez la réponse, comme 100 et 50. Lancez-les.