From 191eb5029f36d14ab9ed52d033d8aa4d3ada8908 Mon Sep 17 00:00:00 2001 From: manon Date: Sun, 16 Mar 2025 15:04:25 +0100 Subject: [PATCH] ajout de npi2tree et quelque modifications --- oui.py | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/oui.py b/oui.py index a7a5bdd..b37d3e7 100644 --- a/oui.py +++ b/oui.py @@ -1,6 +1,7 @@ # BELLYNCK Manon # GUILLAUMIN-TORRES Ambre # COVIN Clara +from Pile import Pile_lst as Pile class Expression: """représente une expression arithmétique sous forme d'un arbre""" @@ -9,7 +10,8 @@ class Expression: self.gauche = fils_gauche self.droit = fils_droit - def evalue (self) : + def evalue (self) : + """ Permet de renvoyer la valeur de l’expression""" if self.gauche == None and self.droit == None : return self.val_racine @@ -29,32 +31,35 @@ class Expression: return gauche_val - droite_val elif self.val_racine == '*': return gauche_val * droite_val + elif self.val_racine == '/': + return gauche_val / droite_val else : raise ValueError ("Cette commande ne peut pas être effectuer") def __str__(self): + """Permet d'afficher une expression en ligne, représenter par un arbre""" result = "" if self.droit: result = result + str(self.droit) - result = result + str(self.val_racine) + "\n" """le "/n" c'est pour avoir une nouvelle ligne de l'arbre""" + result = result + str(self.val_racine) + "\n" #le "/n" c'est pour avoir une nouvelle ligne de l'arbre if self.gauche: result += str(self.gauche) return result - def npi2tree(liste_npi): + def npi2tree(lst): """Convertit une liste représentant une expression en notation polonaise inversée en un arbre d'expression.""" - pille = [] - for element in liste_npi: + pille = Pile () + for element in lst: # Si c'est un opérateur (+, -, * ou /), on crée un nœud opérateur if element in ('+', '-', '*', '/'): - droit = pille.pop() - gauche = pille.pop() - pille.append(Expression(element, gauche, droit)) # Créer un nouvel arbre et empiler + droit = pille.depiler() + gauche = pille.depiler() + pille.empiler(Expression(element, gauche, droit)) # Créer un nouvel arbre et empiler else: # Sinon, ça veut dire que c'est un nombre donc on le convertit et on l'empile. - pille.append(Expression(int(element), None, None)) + pille.empiler(Expression(int(element), None, None)) - return pille[0] # Retourne l'arbre complet + return pille.depiler() # Retourne l'arbre complet @@ -74,4 +79,9 @@ exp = Expression('*', Expression(8,None,None), Expression(3,None,None))#ça marc assert exp.evalue() == 24 exp = Expression('-', Expression(45,None,None), Expression(3,None,None))#ça marche comme ça -assert exp.evalue() == 42 \ No newline at end of file +assert exp.evalue() == 42 + +liste_npi = ["6", "4", "3", "+", "*"] # Correspond à 6 * (4 + 3) +arbre = npi2tree(liste_npi) # Convertit la liste en un arbre + +print(arbre.evalue()) # Affiche : 42 \ No newline at end of file