NSI (terminale) · Chapitre 9 · Application directe du cours
Problème — Vérification du parenthésage avec une pile
La programmation orientée objet · niveau 3 (difficile)
Énoncé
Problème — Vérification du parenthésage avec une pile.
On souhaite vérifier qu'une expression contenant des parenthèses (), crochets [] et accolades \{\} est correctement parenthésée (chaque ouvrante est refermée par la bonne fermante, dans le bon ordre). Écrire une fonction bien_parenthese utilisant la classe Pile.
Corrigé
L'idée est de parcourir l'expression : on empile chaque symbole ouvrant ; à chaque symbole fermant, on dépile et on vérifie la correspondance. À la fin, la pile doit être vide.
def bien_parenthese(expr):
paires = {')': '(', ']': '[', '}': '{'}
p = Pile()
for c in expr:
if c in "([{":
p.empiler(c)
elif c in ")]}":
if p.est_vide() or p.depiler() != paires[c]:
return False
return p.est_vide()
print(bien_parenthese("([]{})")) # True
print(bien_parenthese("([)]")) # False
print(bien_parenthese("((")) # False
Pour "([)]", lorsqu'on rencontre ), le sommet est [ qui ne correspond pas : la fonction renvoie False. La complexité est en où est la longueur de l'expression.
100 % gratuit
Essaie le suivant avec le tuteur
- L'exercice suivant avec le tuteur, sans compte : il guide pas à pas, sans donner la réponse
- 8 autres exercices corrigés dans ce chapitre
- Les 2 QCM du chapitre, le premier sans compte
- Le podcast et la vidéo du chapitre : 2 minutes d'écoute sans compte
Sans compte : le cours, le premier QCM, 2 minutes de podcast et de vidéo et un exercice avec le tuteur. Pour tout le reste : inscription gratuite en 30 secondes, sans carte bancaire.