diff --git a/oui.py b/oui.py index e37a1b8..2f1bc85 100644 --- a/oui.py +++ b/oui.py @@ -4,26 +4,57 @@ class Expression: """représente une expression arithmétique sous forme d'un arbre""" - def __init__ (valeur_racine, fils_gauche, fils_droit): + def __init__ (self, valeur_racine, fils_gauche, fils_droit): self.val_racine = valeur_racine self.gauche = fils_gauche self.droit = fils_droit - def évalue (self) : #pas fini - if fils_gauche == None and fils_droit == None : - return - if self.valeur == '+': + def evalue (self) : + 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.valeur == '-': + elif self.val_racine == '-': return gauche_val - droite_val - elif self.valeur == '*': + elif self.val_racine == '*': return gauche_val * droite_val + else : + raise ValueError ("Cette commande ne peut pas être effectuer") def __str__(self): result = "" - if self.droite: - result = result + str(self.droite) - result = resutl + str(self.valeur) + "\n" """le "/n" c'est pour avoir une nouvelle ligne de l'arbre""" + 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 \ No newline at end of file + return result + + +#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 \ No newline at end of file