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", "+", "*"]))