from numpy.random import randint

m = 101 # Taille L
n = 10 # Taille p

L = [i for i in range(101)]


## Fonctions pour les piles
def estvide(p):
    return(p==[])

def newpile():
    return([])

def depile(p):
    return(p.pop())

def empile(x,p):
    p.append(x)

def sommet(p):
    return(p[-1])
##

def pilealea(n,L):
    p = newpile()
    m = len(L)
    for i in range(n):
        empile(L[randint(0,m)],p)
    return(p)

p1 = pilealea(n,L)


def hauteur(p):
    if estvide(p):
        return(0)
    else :
        x = depile(p)
        b = hauteur(p)+1
        empile(x,p)
        return(b)

print(p1,hauteur(p1),p1)

def imprime(p):
    if not estvide(p):
        x = depile(p)
        imprime(p)
        print(x)
        empile(x,p)

print(p1,imprime(p1),p1)

def estdans(x,p):
    if estvide(p):
        return False
    else :
        k = depile(p)
        if k == x:
            B =  True
        else :
            B = estdans(x,p)
        empile(k,p)
        return(B)

print(p1,estdans(50,p1),p1)

def copypile(p):
    if estvide(p):
        q = newpile()
    else :
        x = depile(p)
        q = copypile(p)
        empile(x,q)
        empile(x,p)
    return(q)

def retourne(p):#Dans une nouvelle pile ou p = retourne(p) pour inverser sur place
    q = newpile()
    p2 = copypile(p)
    while not estvide(p2):
        empile(depile(p2),q)
    return(q)



















