|
|
@ -11,44 +11,44 @@ class Expression: |
|
|
|
self.droit = droit |
|
|
|
|
|
|
|
def evalue(self): |
|
|
|
"""Calcule l'expression mathématique d'un arbre binaire""" |
|
|
|
"""Renvoie le résultat de l'expression mathématique d'un arbre binaire""" |
|
|
|
if self.valeur == '+': |
|
|
|
self.valeur = self.gauche.evalue() + self.droit.evalue() |
|
|
|
if self.valeur == '*': |
|
|
|
elif self.valeur == '*': |
|
|
|
self.valeur = self.gauche.evalue() * self.droit.evalue() |
|
|
|
elif self.valeur == '/': |
|
|
|
self.valeur = self.gauche.evalue() / self.droit.evalue() |
|
|
|
elif self.valeur == '-': |
|
|
|
self.valeur = self.gauche.evalue() - self.droit.evalue() |
|
|
|
elif self.valeur == '^': |
|
|
|
self.valeur = self.gauche.evalue() ** self.droit.evalue() |
|
|
|
return self.valeur |
|
|
|
|
|
|
|
def __str__(self): |
|
|
|
"""Affiche l'expression mathématique d'un arbre binaire""" |
|
|
|
if self.gauche is None and self.droit is None: |
|
|
|
return str(self.valeur) |
|
|
|
expr = "" |
|
|
|
if self.gauche is not None: |
|
|
|
if self.gauche.valeur in ['+', '*']: |
|
|
|
expr += "(" + str(self.gauche) + ")" |
|
|
|
else: |
|
|
|
expr += str(self.gauche) |
|
|
|
expr += " " + str(self.valeur) + " " |
|
|
|
if self.droit is not None: |
|
|
|
if self.droit.valeur in ['+', '*']: |
|
|
|
expr += "(" + str(self.droit) + ")" |
|
|
|
else: |
|
|
|
expr += str(self.droit) |
|
|
|
return expr |
|
|
|
"""Renvoie l'expression mathématique d'un arbre binaire""" |
|
|
|
if self.valeur != '+' and self.valeur != '*' and self.valeur != '/' and self.valeur != '-' and self.valeur != '^': |
|
|
|
return self.valeur |
|
|
|
else: |
|
|
|
return "(" + str(self.gauche.__str__()) + str(self.valeur) + str(self.droit.__str__()) + ")" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def npi2tree(ch): |
|
|
|
"""Convertit une expression en notation polonaise inversée à un arbre binaire""" |
|
|
|
"""Renvoie un arbre binaire contenant une expression mathématique |
|
|
|
via une expression en notation polonaise inversée""" |
|
|
|
ch = ch.split() |
|
|
|
Expr = Pile_chaine() |
|
|
|
for elmt in ch: |
|
|
|
if elmt == '*' or elmt == '+': |
|
|
|
if elmt == '*' or elmt == '+' or elmt == '/' or elmt == '-' or elmt == '^': |
|
|
|
exp = Expression(elmt, Expr.depiler(), Expr.depiler()) |
|
|
|
Expr.empiler(exp) |
|
|
|
else: |
|
|
|
Expr.empiler(Expression(int(elmt), None, None)) |
|
|
|
return Expr.sommet() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def calculer(): |
|
|
|
"""Affiche l'expression ainsi que son résultat dans l'interface Tkinter""" |
|
|
|
déception = ["Peut mieux faire.", |
|
|
|