Tests et fonctions¶

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

In [ ]:
assert 1+2 == 3

Rien ne se passe, c'est normal, le test est validé.

Par contre, le test

In [ ]:
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

regles

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

In [ ]:
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).

In [ ]:
def prestation():
    pass

On souhaite ajouter les deux tests suivants pour éviter de chercher un qualificatif inéxistant.

In [ ]:
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.

In [ ]:
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.

In [ ]:
test_prestation()

Les tests sont passés quand rien ne se passe.

Fonctions de calendrier¶

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.

In [ ]:
3 % 2
In [ ]:
10 % 5
In [ ]:
9 % 5
In [ ]:
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).

In [ ]:

Vérifier si 123456789 est divisible par 7

In [ ]:

Vérifier si 123456789 est divisible par 3803

In [ ]:

Années bissextiles¶

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

In [ ]:

La fonction

In [ ]:
def est_bissextile():
    pass

Nombre de jours dans le mois¶

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

In [ ]:

La fonction

In [ ]:
def nb_jours_mois():
    pass
In [ ]:

Nombre de jours depuis de début de l'année¶

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

In [ ]:

La fonction

In [ ]:
def nb_jours_debut_annee(jour, mois, annee):
    pass

Jour de la semaine¶

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

In [2]:
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

In [1]:
def jour_semaine(jour, mois, annee, jour0):
    pass
In [ ]: