""" Fonctions non documentées (sauf une !). Beaucoup de choses inutilement compliquées, et hors programme : isinstance, fonctions lambda, affectation conditionnelles, ... Méthode __str__ absente Mauvaise gestion des exceptions (les return None ou return "Expression invalide" n'ont pas de sens) Pas de gestion des erreurs dans l'expression entrée Des noms de variables ou des commentaires en anglais qui semblent peu personnels... Note : 12 """ #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)