Jusqu'à présent, pour tester des fonctions, vous exécutiez la fonction et vous vérifiez que le résultat était celui attendu. Pour s'assurer que la fonction marche bien comme comme on l'entend, il faut écrire des tests.
Pour cela, on utilise le mot clé: assert
(affirmer en français).
Par exemple, on peut écrire le test suivant
assert 1+2 == 3
Rien ne se passe, c'est normal, le test est validé.
Par contre, le test
assert 1+1 == 3
ne passe pas(ouf).
Même s'il est difficile de s'astreindre à cette rigueur, il est conseillé d'écrire les tests avant la fonction. Cela permet de se mettre au clair sur ce que l'on attend du fonctionnement de la fonction.
Par exemple, on souhaite ecrire une fonction qui prend en paramètre un score entre 0 et 25 et qui renvoie la qualité de la prestation en fonction du tableau suivant
On décide que la fonction s'appellera prestation
et que l'on ne retournera que le début du texte.
On peut alors écrire les tests suivants
assert prestation(4) == "H"
assert prestation(7) == "M"
assert prestation(12) == "H"
assert prestation(17) == "Exc"
assert prestation(22) == "Ext"
assert prestation(25) == "L"
Pour le moment, ces tests ne passent pas. C'est normal, nous n'avons pas encore écrit la fonction.
A vous de la faire (enlevé le mot clé pass
avant de compléter la fonction).
def prestation():
pass
On souhaite ajouter les deux tests suivants pour éviter de chercher un qualificatif inéxistant.
assert prestation(0) == "Erreur"
assert prestation(27) == "Erreur"
Modifier la fonction prestation
pour que ces tests passent.
Enfin dans la pratique, on regroupe tous les tests dans une ou plusieurs fonctions.
def test_prestation():
assert prestation(4) == "H"
assert prestation(7) == "M"
assert prestation(12) == "H"
assert prestation(17) == "Exc"
assert prestation(22) == "Ext"
assert prestation(25) == "L"
assert prestation(0) == "Erreur"
assert prestation(27) == "Erreur"
Et on fait passer les tests en exécutant.
test_prestation()
Les tests sont passés quand rien ne se passe.
Dans la suite, vous allez écrire des fonctions pour manipuler les dates du calendier.
Pour les programmer, vous aurez besoin de savoir si un nombre est divisible par d'un autre. Pour cela, on utilise l'opérateur %
qui donne le reste de la division eublidienne.
3 % 2
10 % 5
9 % 5
17 % 5
Ainsi pour savoir si un nombre est divisible par un autre, il faut que le reste de la division euclidienne soit égal à 0.
Vérifier si 123456789 est divisible par 3 (on veut avoir True ou False comme réponse - pas besoin d'écrire une fonction pour cela).
Vérifier si 123456789 est divisible par 7
Vérifier si 123456789 est divisible par 3803
On rappelle qu'une année est dites bissextile si elle est divisible par 4. Les siècles ne sont pas pas bissextiles sauf les multiples de 400.
Vous allez devoir écrire une fonction est_bissextile
qui prend en argument une année et qui renvoie True
si elle bissextile et False
sinon.
Tests de la fonction
La fonction
def est_bissextile():
pass
Vous devez écrire une fonction nb_jours_mois
qui prend en argument le numéro du mois (1 pour janvier, 7 pour juillet...) et une année et qui renvoie le nombre de jours que contient le mois.
Tests
La fonction
def nb_jours_mois():
pass
Vous devez écrire une fonction nb_jours_debut_annee
qui prend en argument une date décomposé en jour, mois et année et qui renvoie le nombre de jours depuis le début de l'année jusqu'à cette date.
Test
La fonction
def nb_jours_debut_annee(jour, mois, annee):
pass
On code les jours de la semaine de la manière suivante:
0 -> Lundi, 1 -> Mardi ... 6 -> Dimanche
Vous devez écrire une fonction jour_semaine
qui prend en argument une date (décomposée comme précédement) et le code du premier jour de l'année correspondante et qui renvoie le code de la date indiquée.
Voici quelques tests
def test_jour_semaine():
assert jour_semaine(14, 7, 2022, 5) == 3
assert jour_semaine(1, 3, 1933, 6) == 2
assert jour_semaine(25, 12, 2004, 3) == 5
La fonction
def jour_semaine(jour, mois, annee, jour0):
pass