|
@ -4,26 +4,57 @@ |
|
|
|
|
|
|
|
|
class Expression: |
|
|
class Expression: |
|
|
"""représente une expression arithmétique sous forme d'un arbre""" |
|
|
"""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.val_racine = valeur_racine |
|
|
self.gauche = fils_gauche |
|
|
self.gauche = fils_gauche |
|
|
self.droit = fils_droit |
|
|
self.droit = fils_droit |
|
|
|
|
|
|
|
|
def évalue (self) : #pas fini |
|
|
def evalue (self) : |
|
|
if fils_gauche == None and fils_droit == None : |
|
|
if self.gauche == None and self.droit == None : |
|
|
return |
|
|
return self.val_racine |
|
|
if self.valeur == '+': |
|
|
|
|
|
|
|
|
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 |
|
|
return gauche_val + droite_val |
|
|
elif self.valeur == '-': |
|
|
elif self.val_racine == '-': |
|
|
return gauche_val - droite_val |
|
|
return gauche_val - droite_val |
|
|
elif self.valeur == '*': |
|
|
elif self.val_racine == '*': |
|
|
return gauche_val * droite_val |
|
|
return gauche_val * droite_val |
|
|
|
|
|
else : |
|
|
|
|
|
raise ValueError ("Cette commande ne peut pas être effectuer") |
|
|
|
|
|
|
|
|
def __str__(self): |
|
|
def __str__(self): |
|
|
result = "" |
|
|
result = "" |
|
|
if self.droite: |
|
|
if self.droit: |
|
|
result = result + str(self.droite) |
|
|
result = result + str(self.droit) |
|
|
result = resutl + str(self.valeur) + "\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: |
|
|
if self.gauche: |
|
|
result += str(self.gauche) |
|
|
result += str(self.gauche) |
|
|
return result |
|
|
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 |