Adloun

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

Faire l'exercice suivant avec le tuteur

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.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant avec le tuteur →