Aller au contenu

TP - Renvoyer un tableau

Téléchargez le fichier « à trous » TPB01.21.py (clic droit -> [Enregistrer sous]) et enregistrez-le dans le dossier [B01_Tableaux].

Consignes communes à chaque partie

Le programme principal contient un appel au module doctest :

##----- Programme principal et tests -----##
if __name__ == '__main__':
    import doctest
    doctest.testmod()
Chacune des fonctions devra passer les tests proposés.
Il faudra aussi ajouter vos propres tests dans le programme principal (le main) afin de vous entraîner à en réaliser.

Enfin, il faudra essayer de réaliser deux versions pour chaque fonction dont une en générant en compréhension le tableau résultat.

Partie 1 : Sélection d'éléments

Complétez le code de la fonction avant_pivot() qui prend en paramètre un tableau d'entiers tab et un entier valeur et qui renvoie un tableau constitué des éléments de tab strictement inférieurs à valeur.

1
2
3
4
5
6
7
8
def avant_pivot(tab, valeur):
    """
    tab – list, tableau d'entiers
    Sortie: list - tableau des éléments de tab strictement inférieurs à valeur
    >>> avant_pivot([2, 6, 3, 9, 4, 42], 7)
    [2, 6, 3, 4]
    """
    pass

Partie 2 : Copier un tableau

Complétez le code de la fonction copier() qui prend en paramètre un tableau tab et qui renvoie un autre tableau ayant les mêmes éléments que tab, dans le même ordre.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
def copier(tab):
    """
    tab – list
    Sortie: list - Tableau contenant les mêmes éléments que tab,
            dans le même ordre 
    >>> A = [42, 666, 1789]
    >>> B = copier(A)
    >>> B
    [42, 666, 1789]
    >>> B is A         # B et A ne sont pas le même objet
    False
    >>> B == A         # B et A ont le même contenu
    True
    """
    pass
Attention

Si l'on dispose d'un tableau A, l'instruction B = A ne copie pas A dans B. Cette instruction consiste à donner un second nom au même tableau. On a ainsi un seul objet en mémoire, qui porte deux noms.

>>> A = [42, 666, 1789]
>>> B = A
>>> B
[42, 666, 1789]
>>> B is A         # B et A sont-ils le même objet
True
>>> B == A         # B et A ont-ils le même contenu
True

Un prochain chapitre permettra de comprendre ce comportement.

Partie 3 : Renverser un tableau

Complétez le code de la fonction renverser() qui prend en paramètre un tableau tab et qui renvoie un autre tableau ayant les mêmes éléments que tab mais dans l'ordre inverse.

1
2
3
4
5
6
7
8
9
def renverser(tab):
    """
    tab – list
    Sortie: list - Tableau contenant les mêmes éléments que tab,
            dans l'ordre inverse 
    >>> renverser([2, 6, 3, 9, 4, 42])
    [42, 4, 9, 3, 6, 2]
    """
    pass

Partie 4 : Trancher un tableau

Complétez le code de la fonction trancher() qui prend en paramètre un tableau tab et deux entiers indice_min et indice_max et qui renvoie un tableau constitué des éléments de tab ayant un indice compris entre indice_min (inclus) et indice_max (inclus).

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
def trancher(tab, indice_min, indice_max):
    """
    tab – list
    indice_min, indice_max - int, entiers strictement positifs tels que
                             0 <= indice_min < indice_max < len(tab)
    Sortie: list - Tableau constitué des éléments de tab
            ayant un indice compris entre indice_min et indice_max.
    >>> trancher([2, 6, 3, 9, 7, 42], 1, 4)
    [6, 3, 9, 7]
    """
    pass

Il faudra que votre programme lève l'erreur suivante :

>>> trancher([2, 6, 3, 9, 7, 42], 4, 1)
AssertionError: Mauvaise plage d'entiers

Partie 5 : Occurrences de chaque élément

Complétez le code de la fonction ranger() qui prend en paramètres un tableau tab d'entiers compris entre 0 et 9. Cette fonction renvoie un tableau de 10 entiers qui correspondent respectivement au nombre de 0 dans tab, au nombre de 1 dans tab, au nombre de 2 dans tab, etc...

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
def ranger(tab):
    """
    tab – list, tableau non vide d'entiers compris entre 0 et 9
    Sortie: list - tableau de 10 éléments qui correspondent au nombre
            d'éléments de tab égaux à 0, égaux à 1, etc., égaux à 9
    >>> T = [0, 3, 4, 6, 6, 6, 9, 6, 8, 9, 6, 6, 0, 7, 6, 4, 8, 7, 8, 9]
    >>> ranger(T)
    [2, 0, 0, 1, 2, 0, 7, 2, 3, 3]
    """
    pass

Il faudra que votre programme lève l'erreur suivante :

>>> ranger([])
AssertionError: Le tableau ne doit pas être vide

Important

Il est inutile de chercher une définition par compréhension pour cet exercice.