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