Par transformation des fonctions du document 1 dans ce chapitre en méthodes, écrire le code de la classe Liste qui définit le type abstrait « Liste chaînée ».
from__future__importannotationsclassMaillon:"""
Un maillon de la liste.
"""def__init__(self:Maillon,valeur:int,suivant:Maillon=None)->None:self.valeur=valeurself.suivant=suivantclassListe:"""
Implémentation de la classe liste.
"""def__init__(self:Liste,valeur:int=None)->None:"""
Initialisation de l'objet. Il est possible de créer une liste
vide ou une liste contenant un élément.
Il est possible de créer directemnt une liste contenant plusieurs
éléments il faut utiliser une fonctionnalité de Python que vous
ne connaissez pas forcément et qui n'est pas au programme.
"""ifvaleurisNone:self.maillons=Noneelse:self.maillons=Maillon(valeur)defest_vide(self:Liste)->bool:""" Détermine si la liste est vide. """returnself.maillonsisNonedef__len__(self:Liste)->int:""" Retourne le nombre d'éléments dans la liste. """ifself.est_vide():return0else:nbre=0maillon=self.maillonswhilemaillonisnotNone:nbre+=1maillon=maillon.suivantreturnnbredefappend(self:Liste,valeur:int)->None:"""
Ajoute valeur à la fin de la liste.
"""ifself.est_vide():self.maillons=Maillon(valeur)else:maillon=self.maillonswhilemaillon.suivantisnotNone:maillon=maillon.suivantmaillon.suivant=Maillon(valeur)defappend_first(self:Liste,valeur:int)->None:"""
Ajoute valeur au début de la liste.
"""maillon=Maillon(valeur)maillon.suivant=self.maillonsself.maillons=maillondefpop(self:Liste)->int:"""
Retire le dernier élément de la liste et le retourne.
Lève une erreur si la liste est vide.
"""ifself.est_vide():# Liste videraiseException("La liste est vide !")maillon=self.maillonsifmaillon.suivantisNone:# Cas d'une liste à un élémentvaleur=maillon.valeurself.maillons=Nonereturnvaleurelse:whilemaillon.suivant.suivantisnotNone:# Cas généralmaillon=maillon.suivantvaleur=maillon.suivant.valeurmaillon.suivant=Nonereturnvaleurdefpop_first(self:Liste)->int:"""
Retire le premier élément de la liste et le retourne.
Lève une erreur si la liste est vide.
"""ifself.est_vide():# Liste videraiseException("La liste est vide !")valeur=self.maillons.valeurself.maillons=self.maillons.suivantreturnvaleurdef__getitem__(self:Liste,i:int)->int:"""
Redéfinition de la fonction d'accès à l'élément d'indice i.
"""ifself.est_vide():raiseException("La liste est vide !")maillon=self.maillonsj=0whilej<i:ifmaillonisNone:raiseIndexError("Indice hors des limites !")maillon=maillon.suivantj+=1returnmaillon.valeurdef__str__(self:Liste)->str:"""
Représentation de la liste sous-forme d'une chaîne de caractères.
"""rep="["maillon=self.maillonswhilemaillonisnotNone:rep+=str(maillon.valeur)ifmaillon.suivantisnotNone:rep+=", "maillon=maillon.suivantrep+="]"returnrep