# Note: 12/20 # impossible à tester : pas de programme principal et pile non défini # Pas d'interface graphique # Le choix fait pour l'évaluation n'est pas très logique : normalement on fait # plutôt gauche op droit que droit op gauche. Mais il faudrait modifier npi2tree # pour dépiler d'abord le fils droit puis le fils gauche. # Incohérence sur la division : il faudrait utiliser // puisque tu ne gères que les entiers # La gestions des parenthèses dans __str__ va poser problème si un nœud n'a qu'un fils # Dans npi2tree, quel sens donnes-tu à if valeur or ope ????? class Expression(): def __init__(self,valeur,g,d): """"initialisation de la racine et de ses deux fils(gauche et droit)""" self.valeur = valeur self.g = g self.d = d def evalue(self): """"Mise en place des différents moyens de calculs de manière récursive""" ope = ["+","-","*","**","/"] if self.g is None and self.d is None: return int(self.valeur) if self.valeur in ope: if self.valeur == "+": return self.d.evalue() + self.g.evalue() elif self.valeur == "-": return self.d.evalue() - self.g.evalue() elif self.valeur == "*": return self.d.evalue() * self.g.evalue() elif self.valeur == "**": return self.d.evalue() ** self.g.evalue() elif self.valeur == "/": return self.d.evalue() / self.g.evalue() def __str__(self): """Fonction qui permet d'afficher l'expression""" s = "" if self.g is not None: s = '(' + s + self.g.__str__() s = s + str(self.valeur) if self.d is not None: s = s + self.d.__str__() + ')' return s def npi2tree(lst): """Fonction prenant en paramètre une liste correspondant à l'expression en notation polonaise inversée""" Pi = pile() ope = ["+","-","*","**","/"] for valeur in lst : if valeur or ope : Pi.empiler(Expression(valeur,Pi.depiler(),Pi.depiler())) else: Pi.empiler(Expression(int(valeur),None,None)) return Pi.sommet()