TP2 IPT : Les piles

Proposition pour l'exercice 1-5 :

Python
from classe_pile import *
 
def liste2pile(xs) :
    p = Pile()
    for x in xs :
        p.empile(x)
    return p
 
def nonepop(p) :
    if p.est_vide() :
        return None
    return p.depile()
    
def duplique(p) :
    sommet = p.depile()
    p.empile(sommet)
    p.empile(sommet)
    return None
    
def ecrase(p) :
    while not p.est_vide() :
        p.depile()
    return None
    
def echange(p) :
    som1 = p.depile()
    som2 = p.depile()
    p.empile(som1)
    p.empile(som2)
    return None
    
def copy(p) :
    cp = Pile()
    tmp = Pile()
    while not p.est_vide() :
        tmp.empile(p.depile())
    while not tmp.est_vide() :
        som = tmp.depile()
        cp.empile(som)
        p.empile(som)
    return cp
 
def inverse(p) :
    cp = copy(p)
    ecrase(p)
    while not cp.est_vide() :
        p.empile(cp.depile())
    return None
    
def pile2liste(p) :
    cp = copy(p)
    inverse(cp)
    xs = []
    while not cp.est_vide() :
        xs.append(cp.depile())    
    return xs
    
def longueur(p) :
    cp = copy(p)
    long = 0
    while not cp.est_vide() :
        cp.depile()
        long += 1
    return long
    
def cherche(p,x) :
    cp = copy(p)
    while not cp.est_vide() :
        if cp.depile() == x :
            return True
    return False

Proposition pour l'exercice 1-8

Python
from classe_pile import *
from operator import add, mul, pow, sub, mod, floordiv, truediv
 
operations = { '+': add, '-': sub, '*': mul, '%': mod, '**': pow, '//': floordiv, '/': truediv }
 
def hp(expression) :
    """
    expression ne comporte que des entiers et des opérateurs binaires 
    """
    pile = Pile()
    for val in expression.split(' ') :
        if val in operations :
            op = operations[val]
            n1 = pile.depile()
            n2 = pile.depile()
            pile.empile(op(n2,n1))
        else :
            pile.empile(int(val))
    resultat = pile.depile()
    assert pile.est_vide(), "Expression non valide"
    return resultat