You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

41 lines
1.3 KiB

from Pile import Pile_chaine as Pile
class Expression:
def __init__(self, racine, gauche, droit):
"""initialisation d'un objet 'Expression'"""
self.racine = racine
self.gauche = gauche
self.droit = droit
def evalue(self):
"""renvoie la valeur de l'expression"""
if self.racine == "+":
return self.gauche.evalue() + self.droit.evalue()
if self.racine == "-":
return self.gauche.evalue() - self.droit.evalue()
if self.racine == "*":
return self.gauche.evalue() * self.droit.evalue()
if self.racine == "/":
return self.gauche.evalue() / self.droit.evalue()
return int(self.racine)
def __str__(self):
"""affiche l'expression"""
#temporaire
if self.racine in ["+", "*", "-", "/"]:
return "(" + str(self.gauche) + self.racine + str(self.droit) + ")"
return str(self.racine)
def npi2tree(liste_en_npi):
"""conversion d'une liste en NPI en un arbre"""
pile_expr = Pile()
for element in liste_en_npi:
if element in ["+", "*","-","/"]:
pile_expr.empiler(Expression(element, pile_expr.depiler(),pile_expr.depiler()))
else:
pile_expr.empiler(Expression(element, None, None))
return pile_expr.sommet()