diff --git a/expression.py b/expression.py new file mode 100644 index 0000000..737fd54 --- /dev/null +++ b/expression.py @@ -0,0 +1,54 @@ +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", "+", "*"])) \ No newline at end of file