Problème de compréhension avec les piles
Résolu/Fermé
futura2015
Messages postés
40
Date d'inscription
lundi 2 août 2010
Statut
Membre
Dernière intervention
2 avril 2020
-
Modifié le 6 mai 2017 à 15:53
futura2015 Messages postés 40 Date d'inscription lundi 2 août 2010 Statut Membre Dernière intervention 2 avril 2020 - 10 mai 2017 à 14:50
futura2015 Messages postés 40 Date d'inscription lundi 2 août 2010 Statut Membre Dernière intervention 2 avril 2020 - 10 mai 2017 à 14:50
A voir également:
- Problème de compréhension avec les piles
- Faut il mettre des piles rechargeables dans un téléphone fixe - Forum telephonie fixe
- Piles manettes wii - Forum Wii
- Impossible de créer une nouvelle page de garde pour la pile - Forum Windows 10
- Lampe torche energizer changer les piles - Forum Windows 10
- Pile bios durée de vie - Guide
13 réponses
Arya Dröttningu
Messages postés
581
Date d'inscription
mardi 12 janvier 2010
Statut
Membre
Dernière intervention
3 janvier 2019
157
6 mai 2017 à 17:49
6 mai 2017 à 17:49
Bonjour,
La fonction pop retire le dernier élément de la pile.
Pour retirer les éléments un par un jusqu'à ce qu'il n'en reste que deux, tu dois faire une boucle :
tant que la taille de ta pile est strictement supérieure à 2, tu enlèves un élément
Enfin la taille maximum de la pile est définie dans ton exemple par "StackSize" donc si tu veux que ta pile puisse contenir 5 éléments, tu dois mettre cette valeur à 5 :-)
La fonction pop retire le dernier élément de la pile.
Pour retirer les éléments un par un jusqu'à ce qu'il n'en reste que deux, tu dois faire une boucle :
tant que la taille de ta pile est strictement supérieure à 2, tu enlèves un élément
Enfin la taille maximum de la pile est définie dans ton exemple par "StackSize" donc si tu veux que ta pile puisse contenir 5 éléments, tu dois mettre cette valeur à 5 :-)
futura2015
Messages postés
40
Date d'inscription
lundi 2 août 2010
Statut
Membre
Dernière intervention
2 avril 2020
6 mai 2017 à 18:09
6 mai 2017 à 18:09
Bonjour Arya,
Merci pour ta réponse, par contre je ne vois pas ce que ça donne en code tu peux me montrer ?
Merci pour ta réponse, par contre je ne vois pas ce que ça donne en code tu peux me montrer ?
Arya Dröttningu
Messages postés
581
Date d'inscription
mardi 12 janvier 2010
Statut
Membre
Dernière intervention
3 janvier 2019
157
Modifié le 6 mai 2017 à 18:19
Modifié le 6 mai 2017 à 18:19
Pour augmenter la taille de la pile (en gardant 5 comme exemple) :
Pour retirer les éléments sauf 2 :
StackSize = 5
Pour retirer les éléments sauf 2 :
def RetirerElements () :
if len(MyStack) < 3 : #on verifie que la pile contient assez d'elements, au moins 3
print ("la pile ne contient pas assez d'elements")
else :
while len (MyStack) > 2 :
MyStack.pop()
futura2015
Messages postés
40
Date d'inscription
lundi 2 août 2010
Statut
Membre
Dernière intervention
2 avril 2020
7 mai 2017 à 09:17
7 mai 2017 à 09:17
J'ai essayé d'insérer le code que tu m'as donné mais ça n'a pas marché.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Arya Dröttningu
Messages postés
581
Date d'inscription
mardi 12 janvier 2010
Statut
Membre
Dernière intervention
3 janvier 2019
157
Modifié le 7 mai 2017 à 09:43
Modifié le 7 mai 2017 à 09:43
Essaye comme ça moi ça fonctionne
MyStack = [] StackSize = 5 def DisplayStack(): print("État courant de la pile :") for Item in MyStack: print(Item) def Push(Value): if len(MyStack) < StackSize: MyStack.append(Value) else: print("La pile est pleine !") def Pop(): if len(MyStack) > 0: MyStack.pop() else: print("La pile est vide.") def RetirerElements () : if len(MyStack) < 3 : print ("la pile ne contient pas assez d'elements") else : while len (MyStack) > 2 : MyStack.pop() Push(1) Push(2) DisplayStack() RetirerElements () Push(3) Push(4) DisplayStack() RetirerElements () DisplayStack()
futura2015
Messages postés
40
Date d'inscription
lundi 2 août 2010
Statut
Membre
Dernière intervention
2 avril 2020
7 mai 2017 à 10:01
7 mai 2017 à 10:01
Non et puis du coup ca ne marche plus en tapant une touche
État courant de la pile :
1
2
la pile ne contient pas assez d'elements
État courant de la pile :
1
2
3
4
État courant de la pile :
1
2
>>>
Arya Dröttningu
Messages postés
581
Date d'inscription
mardi 12 janvier 2010
Statut
Membre
Dernière intervention
3 janvier 2019
157
7 mai 2017 à 10:06
7 mai 2017 à 10:06
ah il faut rajouter les input :
MyStack = [] StackSize = 5 def DisplayStack(): print("État courant de la pile :") for Item in MyStack: print(Item) def Push(Value): if len(MyStack) < StackSize: MyStack.append(Value) else: print("La pile est pleine !") def Pop(): if len(MyStack) > 0: MyStack.pop() else: print("La pile est vide.") def RetirerElements () : if len(MyStack) < 3 : print ("la pile ne contient pas assez d'elements") else : while len (MyStack) > 2 : MyStack.pop() Push(1) Push(2) DisplayStack() input("Appuyez sur une touche quand vous êtes prêt...") RetirerElements () input("Appuyez sur une touche quand vous êtes prêt...") Push(3) Push(4) DisplayStack() input("Appuyez sur une touche quand vous êtes prêt...") RetirerElements () DisplayStack()
futura2015
Messages postés
40
Date d'inscription
lundi 2 août 2010
Statut
Membre
Dernière intervention
2 avril 2020
7 mai 2017 à 17:59
7 mai 2017 à 17:59
Non ça ne marche pas comme le 1er.
Arya Dröttningu
Messages postés
581
Date d'inscription
mardi 12 janvier 2010
Statut
Membre
Dernière intervention
3 janvier 2019
157
8 mai 2017 à 00:28
8 mai 2017 à 00:28
Explique exactement ce que tu veux alors parce que je dois pas avoir tout compris....
Le programme retire tous les éléments de la pile sauf 2 et ce quel que soit la taille de la pile
Le programme retire tous les éléments de la pile sauf 2 et ce quel que soit la taille de la pile
futura2015
Messages postés
40
Date d'inscription
lundi 2 août 2010
Statut
Membre
Dernière intervention
2 avril 2020
Modifié le 9 mai 2017 à 12:27
Modifié le 9 mai 2017 à 12:27
Alors je vais essayer d'être plus clair.
L'exemple d'origine c'est
qui donne ça
Je souhaiterais qu'en augmentant la taille de la pile, le programme se termine de la même façon,
soit
quelle que soit la taille de la pile.
Hors je n'ai pas réussi à obtenir ce résultat. J'ai augmenté la taille, ajouté des valeurs, modifié le nombre de pop() de la fin, rien n'y fait. Je n'arrive pas à obtenir (exemple avec 4)
Une idée ?
L'exemple d'origine c'est
MyStack = []
StackSize = 3
def DisplayStack():
print("État courant de la pile :")
for Item in MyStack:
print(Item)
def Push(Value):
if len(MyStack) < StackSize:
MyStack.append(Value)
else:
print("La pile est pleine !")
def Pop():
if len(MyStack) > 0:
MyStack.pop()
else:
print("La pile est vide.")
Push(1)
Push(2)
Push(3)
DisplayStack()
input("Appuyez sur une touche quand vous êtes prêt...")
Push(4)
DisplayStack()
input("Appuyez sur une touche quand vous êtes prêt...")
Pop()
DisplayStack()
input("Appuyez sur une touche quand vous êtes prêt...")
Pop()
Pop()
Pop()
DisplayStack()
qui donne ça
État courant de la pile :
1
2
3
Appuyez sur une touche quand vous êtes prêt...
La pile est pleine !
État courant de la pile :
1
2
3
Appuyez sur une touche quand vous êtes prêt...
État courant de la pile :
1
2
Appuyez sur une touche quand vous êtes prêt...
La pile est vide.
État courant de la pile :
>>>
Je souhaiterais qu'en augmentant la taille de la pile, le programme se termine de la même façon,
soit
Appuyez sur une touche quand vous êtes prêt...
État courant de la pile :
1
2
Appuyez sur une touche quand vous êtes prêt...
La pile est vide.
État courant de la pile :
>>>
quelle que soit la taille de la pile.
Hors je n'ai pas réussi à obtenir ce résultat. J'ai augmenté la taille, ajouté des valeurs, modifié le nombre de pop() de la fin, rien n'y fait. Je n'arrive pas à obtenir (exemple avec 4)
État courant de la pile :
1
2
3
4
Appuyez sur une touche quand vous êtes prêt...
La pile est pleine !
État courant de la pile :
1
2
3
4
Appuyez sur une touche quand vous êtes prêt...
État courant de la pile :
1
2
3
Appuyez sur une touche quand vous êtes prêt...
État courant de la pile :
1
2
Appuyez sur une touche quand vous êtes prêt...
La pile est vide.
État courant de la pile :
>>>
Une idée ?
Arya Dröttningu
Messages postés
581
Date d'inscription
mardi 12 janvier 2010
Statut
Membre
Dernière intervention
3 janvier 2019
157
Modifié le 9 mai 2017 à 17:13
Modifié le 9 mai 2017 à 17:13
J'ai mieux compris je crois... Et comme ça ?
MyStack = [] StackSize = 5 def DisplayStack(): print("État courant de la pile :") for Item in MyStack: print(Item) def Push(Value): if len(MyStack) < StackSize: MyStack.append(Value) else: print("La pile est pleine !") def Pop(): if len(MyStack) > 0: MyStack.pop() else: print("La pile est vide.") def RetirerElements () : while len (MyStack) > 2 : MyStack.pop() DisplayStack() input("Appuyez sur une touche quand vous êtes prêt...") Pop() Pop() Pop() DisplayStack() for i in range (1,StackSize+1) : Push(i) DisplayStack() input("Appuyez sur une touche quand vous êtes prêt...") Push(StackSize+1) DisplayStack() input("Appuyez sur une touche quand vous êtes prêt...") RetirerElements () input("Appuyez sur une touche quand vous êtes prêt...") Push(3) Push(4) DisplayStack() input("Appuyez sur une touche quand vous êtes prêt...") RetirerElements () DisplayStack()
Une autre version.
class Fifo(list) : def __init__(self, tmin, tmax, *elements) : self._tmax = tmax self._tmin = tmin super().__init__(elements) self._compteur = super().__len__() if not tmin <= self._compteur <= tmax : raise ValueError("nombre éléments ({}) non compris entre {} et {}".format(self._compteur, tmin, tmax)) def __str__(self) : return super().__str__().replace('\'', '').replace('"', '').strip('[]') def append(self, value) : if self._compteur + 1 > self._tmax : raise RuntimeError("Ne peut ajouter d'élément, la pile est pleine") super().append(value) self._compteur += 1 def pop(self) : if self._compteur - 1 < self._tmin : raise RuntimeError("Ne peut supprimer d'élément, la pile est trop basse") self._compteur -= 1 super().pop(0) @property def compteur(self) : return self._compteur pile = Fifo(0, 4, 'a', 'b', 'c', 'd') print('Première pile') i = 0 while pile.compteur : if i : input('Appuyez sur entrée quand vous êtes prêt...') print('État courant de la pile :') print(pile) pile.pop() i += 1 print('La première pile est vide') print('Seconde pile') pile = Fifo(0, 6) for i in range(1, 7) : pile.append(i) i = 0 while pile.compteur : if i : input('Appuyez sur entrée quand vous êtes prêt...') print('État courant de la pile :') print(pile) pile.pop() i += 1 print('la seconde pile est vide')
futura2015
Messages postés
40
Date d'inscription
lundi 2 août 2010
Statut
Membre
Dernière intervention
2 avril 2020
10 mai 2017 à 14:50
10 mai 2017 à 14:50
Merci j'ai eu la réponse ! :)
c'est :
Il faut rajouter des Pop() dans le code moi je pensais que c'était à la fin alors qu'effectivement c'est logique que ce soit comme ça.
c'est :
MyStack = []
StackSize = 4
def DisplayStack():
print("État courant de la pile :")
for Item in MyStack:
print(Item)
def Push(Value):
if len(MyStack) < StackSize:
MyStack.append(Value)
else:
print("La pile est pleine !")
def Pop():
if len(MyStack) > 0:
MyStack.pop()
else:
print("La pile est vide.")
Push(1)
Push(2)
Push(3)
Push(4)
DisplayStack()
input("Appuyez sur une touche quand vous êtes prêt...")
Push(5)
Push(6)
DisplayStack()
input("Appuyez sur une touche quand vous êtes prêt...")
Pop()
DisplayStack()
input("Appuyez sur une touche quand vous êtes prêt...")
Pop()
DisplayStack()
Pop()
Pop()
Pop()
DisplayStack()
Il faut rajouter des Pop() dans le code moi je pensais que c'était à la fin alors qu'effectivement c'est logique que ce soit comme ça.