Le problème était de pouvoir trouver la plus grand suite croissante dans un tableau.
Avec la suite [5,8,11,0,1,5,7] la fonction renvoie 0,1,5,7 .
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))