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() elif self.valeur == '*': return self.gauche.evalue() * self.droite.evalue() elif self.valeur == '/': if self.droite.valeur == 0: raise ValueError ("division par 0 impossible !! ") return self.gauche.evalue() / self.droite.evalue() elif 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) + ")" def __repr__(self): return str(self) if __name__ =="__main__": e = Expression('*',Expression(6, None, None),Expression('+',Expression(4, None, None),Expression(3, None, None))) 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""" exp = [] for ele in lst : if ele in ["+","-","/","*"]: ex = Expression(ele, exp.pop(), exp.pop()) exp.append(ex) else: exp.append(int(ele)) return exp.pop() if __name__ == "__main__": npi2tree(["3","4","+","6","*"])