C16 : Exercices

Préconditions

C16.E1 : Somme des valeurs d'un tableau

On considère la fonction ci-dessous.

def somme(T, a, b):
    S = 0
    for i in range(a, b+1) :
        S = S + T[i]
return S

1) Expliquer ce que fait cette fonction.

2) Lister toutes les préconditions sur a et b.

3) Ajouter les lignes de codes à la fonction afin de vérifier que les préconditions sont respectées.

C16.E2 : Liste de nombres aléatoires

1) Écrire une fonction liste_aletaoire(n:int, mini:int, maxi:int) -> list (avec doctstrings) qui renvoie une liste de taille n contenant des entiers tirés au hasard entre mini et maxi.

2) Lister toutes préconditions pour n, mini et maxi.

3) Ajouter, à la fonction, les assertions pour vérifier ces préconditions.

Jeux de tests

C16.E11 : Position dans une liste

Écrire une fonction avec docstring et doctests, indice(e:int, li:list) -> int, qui renvoie l’indice de la première occurrence de l’élément e dans la liste li si e est présent dans li et qui renvoie None sinon.

Exemple en ligne de commande :

>>> indice(4, [1, 0, 2, 0, 0, 4])
5
>>> indice(8, [1, 0, 2, 0, 0, 4])
None

C16.E12 : Une fonction à vérifier...

On considère la fonction codée ci-dessous qui teste l'appartenance de la valeur v à la liste l :

def appartient(v, l):
    i = 0
    while i < len(l) - 1 and l[i] != v:
        i = i + 1
    return i < len(l)

Donner des tests pour cette fonction, et en particulier un test montrant qu'elle est incorrecte.

C16.E13 : Liste de nombres aléatoires

1) Écrire une fonction liste_nb_aleat(n, mini, maxi) dont la docstring est la suivante :

def liste_ne_aleat(n, mini, maxi)
    """
    Renvoie une liste de n nombres entier aléatoires compris entre mini et maxi.
    Paramètres:
        n (int) : nombre d'entiers aléatoires de la liste renvoyée
        mini (int) : valeur minimale des nombres aléatoires
        maxi (int) : valeur maximale des nombres aléatoires
    Return:
        (list) : liste de nombres entiers aléatoires
    """

2) Expliquer pourquoi il n'est pas possible de proposer un jeu de test sous forme de doctests pour cette fonction.

C16.E14 : Repérer les zéros !

1) Écrire une fonction nb_zeros(li:list) -> int qui, à partir d'une liste passée en paramètre, renvoie le nombre de zéros dans la liste. On lui adjoindra une docstring et des doctests.

Exemple en ligne de commande :

>>> nb_zeros([1, 0, 2, 0, 0, 4])
3

2) Écrire la fonction nb_zeros_consecutifs(li:list) -> int qui, étant donnée une liste de nombre entiers, renvoie le nombre maximum de zéros consécutifs de la liste. On lui adjoindra une docstring et des doctests.

>>> nb_zeros_consecutifs(4, [1, 0, 2, 0, 0, 4])
2