Projet suite croissante

But du code:

Le problème était de pouvoir trouver la plus grand suite croissante dans un tableau.

Exemple de fonctionnement:

Avec la suite [5,8,11,0,1,5,7] la fonction renvoie 0,1,5,7 .

Problème rencontré :

Le principal problème que j'ai rencontre était le fait de comparer la valeur k+1 quand j'étais a la fin du tableau.


class PileDyna:

    def __init__(self):
        self.pile = []

    def est_vide(self):
        return len(self.pile) == 0 # ou self.pile == []

    def empiler(self, elt):
        self.pile.append(elt)      # pas de précondition sur cette méthode, cette pile ne peut jamais être pleine !!

    def depiler(self):
        assert not self.est_vide(), "Stack underflow ( la pile est vide )"
        return self.pile.pop()

    def __str__(self):
        result = '\n'
        for i in range(len(self.pile)-1, -1, -1):
            result += "| " + str(self.pile[i]) + " | \n"
        return result + "------ \n "

def suite_croissante(tab):

    pile1=PileDyna()
    pile2=PileDyna()
    pile3=PileDyna()
    k=0
    compt1=0
    compt2=0
    resultat=[]
    # ^^^ initialisation des variables et des piles

    assert tab!=[] ,('il faut au moins 2 valeur !')
    assert len(tab)!=1 ,('il faut au moins 2 valeur !')
    while tab[k+1]>tab[k] and ktab[k-1]:
        pile1.empiler(tab[k])
    compt1+=1
    # ^^^ dans le cas ou il y a une seule et unique suite croissante on empile bien la derniere valeur

    while k!=len(tab)-1:
        while tab[k+1]>tab[k] and ktab[k-1]:
            pile2.empiler(tab[k])
    # ^^^ on mets la deuxieme suite croissante dans la deuxieme pile

        if compt1>compt2:
            while pile2.est_vide() == False:
                pile2.depiler()
                compt2=0
        # ^^^ si la premiere pile a une suite croissante plus grande on depile la deuxieme

        else:
            while not pile1.est_vide():
                pile1.depiler()
            while not pile2.est_vide():
                pile3.empiler(pile2.depiler())
            while not pile3.est_vide():
                pile1.empiler(pile3.depiler())
            # ^^^ si c'est la deuxieme pile qui contient la plus grande pile on depile la premiere puis depile la deuxieme dans la premiere dans le bon sens

    while not pile1.est_vide():
        pile3.empiler(pile1.depiler())
    while not pile3.est_vide():
        resultat.append(pile3.depiler())

    longsuit=len(resultat)
    v='la suite la plus longue dans le tableau est :',resultat, "d'une longueur de" ,longsuit

    return v



vive=[1,2,3,4,5,6,]
la=[1,2,3,4,5,6,0,1,0,1,2,3,4,8,9,11,0]
nsi=[]
MrPerrod_Mr_le_bourg__lesmeilleurs=[1]

print(suite_croissante(vive))
print(suite_croissante(la))
print(suite_croissante(nsi))
print(suite_croissante(MrPerrod_Mr_le_bourg__lesmeilleurs))


			
Chaîne à afficher si l'image ne peut s'afficher
Toute ressemblance avec des personnes ou des situations existantes ne saurait être que fortuite.
merci de votre écoute !(si vous étes bien les meilleurs profs j'ai 20/20😉️)