From eb0330adc22e248e09c98e63844d0585f3caf8e2 Mon Sep 17 00:00:00 2001 From: ambre Date: Sun, 16 Mar 2025 17:20:42 +0100 Subject: [PATCH] petit commit de l'interface graphique --- temp.py | 87 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 temp.py diff --git a/temp.py b/temp.py new file mode 100644 index 0000000..1a68deb --- /dev/null +++ b/temp.py @@ -0,0 +1,87 @@ +# 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""" + def __init__ (self, valeur_racine, fils_gauche, fils_droit): + self.val_racine = valeur_racine + self.gauche = fils_gauche + self.droit = fils_droit + + def evalue (self) : + """ Permet de renvoyer la valeur de l’expression""" + if self.gauche == None and self.droit == None : + return self.val_racine + + if self.gauche != None: #on ne met pas elif car les cas sont indépendants" + gauche_val = self.gauche.evalue() + else: + gauche_val = 0 + + if self.droit != None: + droite_val = self.droit.evalue() + else: + droite_val = 0 + + if self.val_racine == '+': + return gauche_val + droite_val + elif self.val_racine == '-': + 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 + if self.gauche: + result += str(self.gauche) + return result + + def npi2tree(lst): + """Convertit une liste représentant une expression en notation polonaise inversée en un arbre d'expression.""" + 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.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.empiler(Expression(int(element), None, None)) + + return pille.depiler() # Retourne l'arbre complet + + + + +#test: + +exp = Expression(5,None,None) +assert exp.evalue() == 5 + +exp = Expression('+', Expression(8,None,None), Expression(3,None,None))#ça marche comme ça +assert exp.evalue() == 11 + +#exp = Expression('+', 8, 3)#mais ça marche pas comme ça, je sais pas trop comment régler ça +#assert exp.evalue() == 11 + +exp = Expression('*', Expression(8,None,None), Expression(3,None,None))#ça marche comme ça +assert exp.evalue() == 24 + +exp = Expression('-', Expression(45,None,None), Expression(3,None,None))#ça marche comme ça +assert exp.evalue() == 42 + +liste_npi = ["6", "4", "3", "+", "*"] # Correspond à 6 * (4 + 3) +arbre = Expression.npi2tree(liste_npi) # Convertit la liste en un arbre + +print(arbre.evalue()) # Affiche : 42 \ No newline at end of file