import tkinter as tk from Pile import Pile_chaine class Expression: def __init__(self, valeur, gauche, droit): self.valeur = valeur self.gauche = gauche self.droit = droit def evalue(self): if self.valeur == '+': self.valeur = self.gauche.evalue() + self.droit.evalue() if self.valeur == '*': self.valeur = self.gauche.evalue() * self.droit.evalue() return self.valeur def __str__(self): if self.gauche is None and self.droit is None: return str(self.valeur) expr = "" if self.gauche is not None: if self.gauche.valeur in ['+', '*']: expr += "(" + str(self.gauche) + ")" else: expr += str(self.gauche) expr += " " + str(self.valeur) + " " if self.droit is not None: if self.droit.valeur in ['+', '*']: expr += "(" + str(self.droit) + ")" else: expr += str(self.droit) return expr def npi2tree(ch): ch = ch.split() Expr = Pile_chaine() for elmt in ch: if elmt == '*' or elmt == '+': exp = Expression(elmt, Expr.depiler(), Expr.depiler()) Expr.empiler(exp) else: Expr.empiler(Expression(int(elmt), None, None)) return Expr.sommet() def calculer(): expression = entry.get() try: resultat = npi2tree(expression).evalue() result_label.config(text="Résultat: " + str(resultat)) except Exception as erreur: result_label.config(text="Erreur: " + str(erreur)) root = tk.Tk() root.title("Calculatrice rudimentaire") message_label = tk.Label(root, text="Le calcul doit être écrit en notation polonaise inversée") message_label.pack() entry = tk.Entry(root, width=30) entry.pack(pady=10) evaluate_button = tk.Button(root, text="Calculer", command=calculer) evaluate_button.pack() result_label = tk.Label(root, text="") result_label.pack(pady=10) root.mainloop()