On dispose de chaînes de caractères contenant uniquement des parenthèses ouvrantes et
fermantes.
Un parenthésage est correct si :
le nombre de parenthèses ouvrantes de la chaîne est égal au nombre de parenthèses
fermantes.
en parcourant la chaîne de gauche à droite, le nombre de parenthèses déjà ouvertes doit
être, à tout moment, supérieur ou égal au nombre de parenthèses déjà fermées.
Ainsi, ((()())(())) est un parenthésage correct.
Les parenthésages ())(() et (())(() sont, eux, incorrects.
On dispose du code de la classe Pile suivant :
Python
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()
On souhaite programmer une fonction parenthesage qui prend en paramètre une chaîne de caractères chaine formée de parenthèses et renvoie True si la chaîne est bien parenthésée etFalse sinon.
Cette fonction utilise une pile et suit le principe suivant : en parcourant la chaîne de gauche à droite, si on trouve une parenthèse ouvrante, on l’empile au sommet de la pile et si on trouve une parenthèse fermante, on dépile (si possible) la parenthèse ouvrante stockée au sommet de la pile.
La chaîne est alors bien parenthésée si, à la fin du parcours, la pile est vide.
Elle est, par contre, mal parenthésée :
si dans le parcours, on trouve une parenthèse fermante, alors que la pile est vide ;
ou si, à la fin du parcours, la pile n’est pas vide.
# Tests(insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)