Intermédiaire
🧠 Fondamentaux
20 XP
0 personnes ont réussi
Pile pour vérifier les parentheses
C'est un exercice classique qui montre l'utilite des piles dans un cas concret.
Quand un compilateur ou un interpreteur lit du code, il doit vérifier que les parentheses, crochets et accolades sont correctement apparies. Par exemple, ({)} est invalide car la parenthese fermante arrive avant l'accolade fermante.
L'algorithme utilise une pile : - Quand tu rencontres une ouvrante ( [ ou {, tu l'empiles - Quand tu rencontres une fermante ) ] ou }, tu regardes le sommet de la pile. Si c'est l'ouvrante correspondante, tu depiles. Sinon, c'est une erreur. - A la fin, la pile doit etre vide. Si elle ne l'est pas, des ouvrantes n'ont pas ete fermees.
Écris une fonction parentheses_equilibrees(s) qui retourne True si les parentheses/crochets/accolades sont correctement equilibres.
Exemple : parentheses_equilibrees('(a + b) * [c - d]') renvoie True parentheses_equilibrees('({)}') renvoie False parentheses_equilibrees('((())') renvoie False
Tests (3/4)
Equilibre
assert parentheses_equilibrees('(a + b) * [c - d]') == True
Mal ordonne
assert parentheses_equilibrees('({)}') == False
Non ferme
assert parentheses_equilibrees('(((') == False
+ 0 tests cachés
Indices (3 disponibles)
Solution officielle
def parentheses_equilibrees(s):
pile = []
ouvrantes = '([{'
correspondance = {')': '(', ']': '[', '}': '{'}
for c in s:
if c in ouvrantes:
pile.append(c)
elif c in correspondance:
if not pile or pile[-1] != correspondance[c]:
return False
pile.pop()
return len(pile) == 0