classPile:""" Classe définissant une pile """def__init__(self):self.valeurs=[]defest_vide(self):"""Renvoie True si la pile est vide, False sinon"""returnself.valeurs==[]defempiler(self,c):"""Place l’élément c au sommet de la pile"""self.valeurs.append(c)defdepiler(self):"""Supprime l’élément placé au sommet de la pile, à condition qu’elle soit non vide"""ifself.est_vide()==False:self.valeurs.pop()defparenthesage(ch):"""Renvoie True si la chaîne ch est bien parenthésée et False sinon"""p=Pile()forcinch:ifc=="(":#(1)p.empiler(c)elifc==")":#(2)ifp.est_vide():returnFalseelse:p.depiler()returnp.est_vide()#(3)
On suit l'algorithme donné dans l'énonce : si on rencontre une parenthèse ouvrante alors on l'empile
Si c'est une parenthèse fermante, on dépile dans le cas où la pile est vide, l'expression est mal parenthésée.
Si à la fin du parcours la pile n'est pas vide, l'expression est mal parenthésée.
Remarque
L'utilisation d'une pile pour vérifier le bon parenthésage est surtout utile lorsqu'il y a plusieurs types de parenthèses ouvrantes et fermantes : () mais aussi {}, [] ...
Commentaires
L'énoncé précise que la liste est non vide, on peut donc se permettre d'initialiser le maximum courant avec le premier élément de la liste.