1 changed files with 54 additions and 0 deletions
@ -0,0 +1,54 @@ |
|||
from Pile import Pile_chaine as Pile |
|||
|
|||
class Expression: |
|||
"permet de représenter et manipuler une expression arithmpétique sous forme d'un arbre" |
|||
def __init__(self, racine, gauche, droit): |
|||
self.racine = racine |
|||
self.gauche = gauche |
|||
self.droit = droit |
|||
|
|||
def evalue(self): |
|||
"renvoie la valeur de l'expression" |
|||
if self.gauche == None and self.droit == None: |
|||
return self.racine |
|||
if self.racine == '*': |
|||
return self.gauche.evalue() * self.droit.evalue() |
|||
if self.racine == '+': |
|||
return self.gauche.evalue() + self.droit.evalue() |
|||
|
|||
def __str__(self): |
|||
"affiche l'expression" |
|||
exp = "" |
|||
if self.racine != '*' or self.racine != '+': |
|||
if self.gauche != None: |
|||
exp = "(" + exp + str(self.gauche) |
|||
exp = exp + str(self.racine) |
|||
if self.droit != None: |
|||
exp = exp + str(self.droit) +")" |
|||
return exp |
|||
|
|||
|
|||
def npi2tree(lst): |
|||
p = Pile() |
|||
for elem in lst: |
|||
if elem == '+' or elem =='*': |
|||
racine = elem |
|||
fils_d = p.depiler() |
|||
fils_g = p.depiler() |
|||
exp = Expression(racine, fils_g, fils_d) |
|||
p.empiler(exp) |
|||
else : |
|||
if elem != None: |
|||
p.empiler(int(elem)) |
|||
return p.sommet() |
|||
|
|||
|
|||
if __name__ == "__main__": |
|||
exp = Expression('*', |
|||
Expression('+', |
|||
Expression(4, None, None), |
|||
Expression(3, None, None)), |
|||
Expression(6, None, None)) |
|||
print(exp.evalue()) |
|||
print(exp) |
|||
print(npi2tree(["6", "4", "3", "+", "*"])) |
|||
Loading…
Reference in new issue