TP - Utiliser une interface de Liste☘
Dans le dossier [NSI]
, créez le dossier [A02-Listes]
.
Téléchargez le module TAD_Listes.py qui contient une
implémentation de liste et placez ce module dans le dossier [A02-Listes]
.
L'interface est celle donnée dans le cours :
Méthode/Opérations | Description |
---|---|
L = Liste() |
Initialisation d'une liste vide |
est_vide(L) |
Renvoie True si la liste L est vide, False sinon. |
inserer_en_tete(elt, L) |
« Ajoute » un nouvel élément en tête de la liste, c'est-à-dire renvoie le couple (elt, L) |
tete(L) |
Renvoie la valeur de l'élément en tête (le premier élément du couple) |
queue(L) |
Renvoie la liste située en queue (le second élément du couple) |
Attention
Cette interface n'est pas orientée objet, elle s'utilise de la même manière que dans les exemples du cours et dans le TD.
Préambule☘
Ce TP a pour but de vous faire définir des fonctions (opérations) récursives et usuelles sur la structure de données « Liste ».
Téléchargez le fichier « à trous » TPA02.11.py (clic droit -> [Enregistrer sous]) et enregistrez-le dans ce dossier.
Important
- Dans chaque fonction à programmer, remplacez le mot-clef
pass
par les instructions nécessaires. - Pour gagner du temps, on ne lèvera pas les erreurs sur les types de
données entrées par l'utilisateur. On considèrera que si la spécification
indique un type
int
, alors ce sera bien un typeint
qui sera saisi.
Remplir rapidement☘
Complétez la définition (récursive ou non, c'est vous qui choisissez) de la
fonction tab_to_liste()
qui prend en paramètre un tableau (type list
en
Python) et qui renvoie une liste de ses éléments dans le même ordre.
1 2 3 4 5 |
|
Plan de test
>>> L1 = tab_to_liste([5, 2, 1, 4, 3])
>>> L1
(5, (2, (1, (4, (3, ())))))
>>> from random import randint
>>> L2 = tab_to_liste([randint(1, 20) for _ in range(10)])
>>> L2
(7, (19, (5, (6, (5, (17, (17, (3, (16, (9, ()))))))))))
Nombre d'éléments☘
Complétez la définition récursive (ici, vous n'avez pas le choix !) de
la fonction taille()
qui prend en paramètre une liste et qui renvoie le
nombre d'éléments de cette liste.
1 2 3 4 5 |
|
Plan de test
>>> taille(L1)
5
>>> taille(L2)
10
Somme des éléments☘
Complétez la définition récursive (ici, vous n'avez pas le choix !) de
la fonction somme()
qui prend en paramètre une liste d'entiers et qui
renvoie la somme des éléments de cette liste.
1 2 3 4 5 |
|
Plan de test
>>> somme(L1)
15
>>> somme(L2)
104
Plus grand élément☘
Complétez la définition récursive (ici, vous n'avez pas le choix !) de
la fonction maximum()
qui prend en paramètre une liste non vide
d'entiers et qui renvoie le plus grand des éléments de cette liste.
Il faudra lever une erreur si la liste est vide.
1 2 3 4 5 |
|
Plan de test
>>> maximum(L1)
5
>>> maximum(L2)
19
>>> maximum(Liste())
AssertionError: La liste est vide
Appartenance☘
Complétez la définition récursive (ici, vous n'avez pas le choix !) de
la fonction appartient()
qui prend en paramètre une liste d'éléments et un
élément de même type et qui renvoie True
si cet élément fait partie de la
liste.
1 2 3 4 5 6 |
|
Plan de test
>>> appartient(4, L1)
True
>>> appartient(15, L2)
False
N-ième élément☘
Complétez la définition récursive (ici, vous n'avez pas le choix !) de la
fonction element_indice()
qui prend en paramètre un entier k
et une liste
d'éléments et qui renvoie l'élément d'indice k
(s'il existe - on numérote
à partir de 0) de la liste.
Il faudra lever une erreur si l'indice est trop élevé.
1 2 3 4 5 6 |
|
Plan de test
>>> element_indice(3, L1)
4
>>> element_indice(8, L2)
16
>>> element_indice(5, L1)
AssertionError: Indice trop élevé
Supprimer un élément☘
Complétez la définition récursive (ici, vous n'avez pas le choix !) de
la fonction supprimer_elt_indice()
qui prend en paramètre un entier k
et
une liste d'éléments et qui supprime l'élément d'indice k
(s'il existe -
on numérote à partir de 0) de la liste.
Il faudra lever une erreur si l'indice est trop élevé.
1 2 3 4 5 6 |
|
Plan de test
>>> L1 = supprimer_elt_indice(3, L1)
>>> L1
(5, (2, (1, (3, ()))))
>>> L2 = supprimer_elt_indice(6, L2)
>>> L2
(7, (19, (5, (6, (5, (17, (3, (16, (9, ())))))))))
>>> L1 = supprimer_elt_indice(5, L1)
AssertionError: Indice trop élevé