# Classe Pile de l'exerice 3

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")
            return None
        else :
            return self.contenu.pop()

    def getSommet(self) :
        if self.pile_vide() :
            print("la pile est vide")
            return None
        else :
            return self.contenu[-1]

    def __repr__(self):
        s = ''
        for e in self.contenu:
            s += '|' + str(e) + '|\n'
        return s
        
# Exercice 6
        
def bon_parenthesage(s):
    p = Pile()
    for e in s:
        if e == '(':
            p.empile(0)     # On y empile ce que l'on veut, cela n'a pas d'importance
        elif e == ')':
            if p.pile_vide():
                return False
            else:
                p.depile()
    return p.pile_vide()

assert bon_parenthesage( "(1+1)" ) == True
assert bon_parenthesage( "((1+1)" ) == False
assert bon_parenthesage( ")(1+1" ) == False
assert bon_parenthesage( "(8(94+5)))-8)*(5(75+(2-56)))" ) == False
assert bon_parenthesage( "(8(94+5)-8)*(5(75+(2-56)))" ) == True
