Aller au contenu

TP - Programme testé et vérifié

Dans le dossier [NSI], créez le dossier [F03-Finaliser_Programmes].
Dans ce dossier, enregistrez vos fichiers avec le nom donné à la partie (TPF03.21.py, TPF03.22.py, ...). Il faudra créer un nouveau programme pour chaque partie.

TPF03.21 - Factorielle

On considère la fonction factorielle() définie par :

1
2
3
4
5
6
7
8
9
def factorielle(n):
    """
    n – int, entier strictement positif
    Sortie: int – le produit 1×2×3×...×n.
    """
    f = 0
    for i in range(n):
        f = f*i
    return f
  1. Insérez le plan de test travaillé en TD dans le docstring de cette fonction.
  2. Ajoutez une assertion afin que le paramètre n respecte les spécifications.
  3. Exécutez ce code afin qu'il soit testé automatiquement par le module doctest.
    Vérifiez que les tests ne « passent » pas.

    Une piste

    Ne pas oublier le programme principal qui contient l'appel au module doctest :

    11
    12
    13
    14
    ##----- Mise en oeuvre des tests -----##
    if __name__ == "__main__":
        import doctest
        doctest.testmod()
    

  4. Insérez des print() dans ce code pour suivre l'évolution des variables puis corrigez ce code.

TPF03.22 - Plus grande puissance de 2 inférieure

On considère la fonction pgpi() spécifiée par :

1
2
3
4
5
def pgpi(m):
    """
    m – int, entier strictement positif
    Sortie: int – le plus grand entier n tel que 2**n <= m.
    """
  1. Insérez le plan de test travaillé en TD dans le docstring de cette fonction.
  2. Ajoutez une assertion afin que le paramètre m respecte les spécifications.
  3. Complétez ce code puis exécutez-le afin qu'il soit testé automatiquement par le module doctest.

TPF03.23 - Une fonction mystérieuse

Un élève a réalisé le code suivant :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
from random import randint

def mystere(borne_sup):
    m = 0
    n = 1
    while n  0:
        if n > m:
            m = n
        else:
            n = randint(0, borne_sup)
        return m
  1. Exécutez ce code et corrigez les erreurs de logique que vous trouverez.
  2. Une fois ces erreurs corrigées ajoutez les print() nécessaires pour comprendre le rôle de cette fonction.
  3. Modifiez les noms mystere, m et n pour qu'ils soient plus explicites.
  4. Ajoutez un docstring à cette fonction dans lequel les préconditions sur borne_sup et les postconditions sur le résultat renvoyé sont explicites.
  5. Ajoutez une assertion afin que le paramètre borne_sup respecte les spécifications.