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.

54 lines
1.7 KiB

from Pile import Pile_chaine as Pile
class Expression:
"permet de représenter et manipuler une expression arithmpétique sous forme d'un arbre"
def __init__(self, racine, gauche, droit):
self.racine = racine
self.gauche = gauche
self.droit = droit
def evalue(self):
"renvoie la valeur de l'expression"
if self.gauche == None and self.droit == None:
return self.racine
if self.racine == '*':
return self.gauche.evalue() * self.droit.evalue()
if self.racine == '+':
return self.gauche.evalue() + self.droit.evalue()
def __str__(self):
"affiche l'expression"
exp = ""
if self.racine != '*' or self.racine != '+':
if self.gauche != None:
exp = "(" + exp + str(self.gauche)
exp = exp + str(self.racine)
if self.droit != None:
exp = exp + str(self.droit) +")"
return exp
def npi2tree(lst):
p = Pile()
for elem in lst:
if elem == '+' or elem =='*':
racine = elem
fils_d = p.depiler()
fils_g = p.depiler()
exp = Expression(racine, fils_g, fils_d)
p.empiler(exp)
else :
if elem != None:
p.empiler(int(elem))
return p.sommet()
if __name__ == "__main__":
exp = Expression('*',
Expression('+',
Expression(4, None, None),
Expression(3, None, None)),
Expression(6, None, None))
print(exp.evalue())
print(exp)
print(npi2tree(["6", "4", "3", "+", "*"]))