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 isinstance(self.valeur, (int, float)): return self.valeur operateurs = { '+': lambda x, y: x + y, '*': lambda x, y: x * y, '/': lambda x, y: x / y if y != 0 else float('inf'), '-': lambda x, y: x - y } return operateurs[self.valeur](self.gauche.evalue(), self.droite.evalue()) class Calculette: def __init__(self): pass def npi2tree(self, lst): pile = [] for element in lst: if element in ['+', '-', '*', '/']: droite = pile.pop() gauche = pile.pop() pile.append(Expression(element, gauche, droite)) else: try: valeur = int(element) if element.isdigit() else float(element) pile.append(Expression(valeur)) except ValueError: return None return pile[0] def calculer(self, expression): try: elements = expression.split() arbre = self.npi2tree(elements) if arbre: return arbre.evalue() return "Expression invalide" except Exception as e: return str(e)