import tkinter as tk from Pile import Pile_chaine import random class Expression: """Implémentation d'une expression mathématique dans un arbre binaire""" def __init__(self, valeur, gauche, droit): """Crée un arbre binaire vide""" self.valeur = valeur self.gauche = gauche self.droit = droit def evalue(self): """Calcule l'expression mathématique d'un arbre binaire""" 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): """Affiche l'expression mathématique d'un arbre binaire""" 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): """Convertit une expression en notation polonaise inversée à un arbre binaire""" 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(): """Affiche l'expression ainsi que son résultat dans l'interface Tkinter""" déception = ["Peut mieux faire.", "Va t'entraîner, t'es nul...", "Ah nan, tu pues vraiment.", "Skill issue.", "Je souhaite que tu arrêtes tout.", "Il a eu 0/20", "Apprends à lire.", "Arrête de déconner.", "Abandonne au pire.", "42", "Va faire un tour dehors." ] expression = entry.get() try: resultat = npi2tree(expression).evalue() result_label.config(text="Résultat: " + str(npi2tree(expression)) + " = " + str(resultat)) except: result_label.config(text=random.choice(déception)) 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()