from File import File_chaine as File from Pile import Pile_chaine as Pile class Expression: def __init__(self, valeur, gauche=None, droite=None): self.valeur = valeur self.gauche = gauche self.droite = droite def evalue(self): if type(self.valeur) == int: return self.valeur if self.valeur == '+': return self.gauche.evalue() + self.droite.evalue() if self.valeur == '*': return self.gauche.evalue() * self.droite.evalue() if self.valeur == '/': return self.gauche.evalue() / self.droite.evalue() if self.valeur == '-': return self.gauche.evalue() - self.droite.evalue() def __str__(self): if type(self.valeur) == int: return str(self.valeur) if self.valeur == '+': return "("+ str (self.gauche) + "+" + str (self.droite) + ")" if self.valeur == '*': return "("+ str (self.gauche) + "*" + str (self.droite) + ")" if self.valeur == '/': return "("+ str (self.gauche) + "/" + str (self.droite) + ")" if self.valeur == '-': return "("+ str (self.gauche) + "-" + str (self.droite) + ")" if __name__ =="__main__": e = Expression('*', Expression(6, None, None), Expression('+', Expression(4, None, None), Expression(3, None, None) ) ) class Conversion: def npi2tree (lst): """fonction npi2tree prenant en paramètre une liste correspondant l’expression en notation polonaise inversée et renvoyant l’arbre (de type Expression) correspondant""" p = Pile(Expression) lst = [] for ele in lst : if ele == '+' or ele == '*': exp = Expression(ele, Expression()) p.empiler(exp) else: p.empiler ... return exp