From 27ee0e3ff3b3295440a136505267ed9af33b590b Mon Sep 17 00:00:00 2001 From: manu D <> Date: Sun, 27 Mar 2022 21:07:26 +0200 Subject: [PATCH] notation --- calculatrice.py | 65 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 calculatrice.py diff --git a/calculatrice.py b/calculatrice.py new file mode 100644 index 0000000..7554495 --- /dev/null +++ b/calculatrice.py @@ -0,0 +1,65 @@ +# 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() + + + + +