Compare commits

...

2 Commits

Author SHA1 Message Date
Eli fcafb7dfec _ 3 months ago
Eli 4966caf68e Classe Expression 3 months ago
  1. 91
      Pile.py
  2. 40
      expression.py

91
Pile.py

@ -0,0 +1,91 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from listeChaine import ListeChaine
class Pile_lst:
"""Implémentation d'une pile par une liste."""
def __init__(self):
"""Crée une pile vide."""
self.__pile = []
def est_vide(self):
"""Indique si la pile est vide."""
return self.__pile == []
def empiler(self, valeur):
"""Empile la valeur."""
self.__pile.append(valeur)
def depiler(self):
"""Dépile le sommet de la pile et le renvoie."""
return self.__pile.pop()
def taille(self):
"""Renvoie la taille de la pile."""
return len(self.__pile)
def sommet(self):
"""Renvoie le sommet de la pile (sans le dépiler)."""
return self.__pile[-1]
def __str__(self):
s = "|"
for val in self.__pile:
s = str(val) + "->" + s
return s
class Pile_chaine:
"""Implémentation d'une pile par une liste chaînée."""
def __init__(self):
"""Crée une pile vide."""
self.__pile = ListeChaine()
self.__taille = 0
def est_vide(self):
"""Indique si la pile est vide."""
return self.__taille == 0
def empiler(self, valeur):
"""Empile la valeur."""
self.__pile.ajoute(valeur)
self.__taille += 1
def depiler(self):
"""Dépile le sommet de la pile et le renvoie."""
if self.est_vide():
raise IndexError("Impossible de dépiler une pile vide.")
valeur = self.__pile.tete()
self.__pile = self.__pile.queue()
self.__taille -= 1
return valeur
def taille(self):
"""Renvoie la taille de la pile."""
return self.__taille
def sommet(self):
"""Renvoie le sommet de la pile (sans le dépiler)."""
if self.est_vide():
raise IndexError("Une pile vide n'a pas de sommet.")
return self.__pile.tete()
def __str__(self):
return str(self.__pile) + "->|"
if __name__ == "__main__":
p = Pile_lst()
print(p.est_vide())
p.empiler('A')
p.empiler('B')
p.empiler('C')
print(p.est_vide())
print(p.sommet())
print(p)
print(p.taille())
print(p.depiler())
print(p.depiler())
print(p.depiler())
print(p.est_vide())

40
expression.py

@ -1,3 +1,4 @@
from Pile import Pile_lst as p
class Expression :
def __init__ (self, valeur, gauche, droit):
"""Initialise la valeur de la racine (’+’, ’*’ ou un entier) et les fils gauche et
@ -6,26 +7,24 @@ class Expression :
self.gauche = gauche
self.droit = droit
def evalue (self) :
"""Renvoie la valeur de l’expression."""
if self.gauche is None and self.droit is None :
return self.valeur
if self.valeur == "+" :
return self.
return self.gauche.evalue() + self.droit.evalue()
elif self.valeur == "*":
pass
return self.gauche.evalue() * self.droit.evalue()
def __str__ (self) :
"""Affiche l'expression"""
pass
if self.gauche is None and self.droite is None :
return str(self.valeur)
exp = Expression('*',
Expression(6, None, None),
Expression('+',
@ -34,4 +33,21 @@ exp = Expression('*',
)
)
exp.evalue()
exp.evalue()
def npi2tree (liste_npi) :
"""Prends en paramètre une liste correspondant à l’expression en notation
polonaise inversée et renvoyant larbre (de type Expression) correspondant"""
pile = p()
for elem in liste_npi :
if elem == "+" :
exp = Expression("+", Expression(Expression()))
elif elem == "*" :
exp = Expression("*", Expression(Expression()))
else :
pass
return pile[-1]
Loading…
Cancel
Save