# On ne regarde que les parenthèses
# Si on a une parenthèse ouvrante, on l'empile
# Si on a une parenthèse fermante, on dépile

# La chaine n'est pas bien parenthésée si :
# - Condition 1 : on essaie de dépiler une pile vide (il y a trop de parenthèses fermantes)
# - Condition 2 : La pile n'est pas vide à la fin (il y a trop de parenthèses ouvrantes)

#------------------------------------------------

# On réutilise le code de l'exercice 4
class Pile :
    def __init__(self) :
        self.contenu = []
    
    def empile(self,element) :
        self.contenu.append(element)
    
    def pile_vide(self) :
        return len(self.contenu) == 0

    def depile(self) :
        if self.pile_vide() :
            print("la pile est vide")
        else :
            return self.contenu.pop()
            
    def lire_sommet(self) :
        if self.pile_vide() :
            print("la pile est vide")
        else :
            return self.contenu[-1]

#------------------------------------------------

def bon_parenthesage(chaine : str):
    p = Pile()
    for char in chaine:
        if char == "(":
            p.empile(char)
        elif char == ")":
            if p.pile_vide():
                return False    # Condition 1
            else:
                p.depile()
    
    return p.pile_vide() # Condition 2
    
assert not bon_parenthesage ( "(8(94+5)))-8)*(5(75+(2-56)))")
assert bon_parenthesage ( "(8(94+5)-8)*(5(75+(2-56)))")
