import tkinter as tk class Expression: def __init__(self, valeur, gauche, droite): self.valeur = valeur self.gauche = gauche self.droite = droite def evalue(self): # si c'est un entier on le renvoie if isinstance(self.valeur, int): return self.valeur # sinon c’est un opérateur if self.valeur == '+': return self.gauche.evalue() + self.droite.evalue() if self.valeur == '*': return self.gauche.evalue() * self.droite.evalue() def __str__(self): # si c’est un nombre if isinstance(self.valeur, int): return str(self.valeur) # sinon on affiche avec parenthèses return "(" + str(self.gauche) + self.valeur + str(self.droite) + ")" def npi2tree(liste): pile = [] for element in liste: if element == '+' or element == '*': droite = pile.pop() gauche = pile.pop() exp = Expression(element, gauche, droite) pile.append(exp) else: nombre = int(element) pile.append(Expression(nombre, None, None)) return pile.pop() def ajouter(valeur): entree.insert(tk.END, valeur) def effacer(): entree.delete(0, tk.END) label_resultat.config(text="Résultat :") def calculer(): try: expression = entree.get() liste = expression.split() arbre = npi2tree(liste) resultat = arbre.evalue() label_resultat.config(text="Résultat : " + str(resultat)) except: label_resultat.config(text="Erreur") fenetre = tk.Tk() fenetre.title("Calculatrice NPI") fenetre.geometry("320x450") fenetre.resizable(False, False) entree = tk.Entry(fenetre, font=("Arial", 16), justify="right") entree.pack(padx=10, pady=10, fill="x") frame = tk.Frame(fenetre) frame.pack() # boutons chiffres 1 à 9 for i in range(1, 10): tk.Button(frame, text=str(i), width=5, height=2, command=lambda x=str(i): ajouter(x) ).grid(row=(i-1)//3, column=(i-1)%3, padx=5, pady=5) # bouton 0 tk.Button(frame, text="0", width=5, height=2, command=lambda: ajouter("0") ).grid(row=3, column=1, padx=5, pady=5) tk.Button(frame, text="+", width=5, height=2, command=lambda: ajouter(" + ")).grid(row=4, column=0, padx=5, pady=5) tk.Button(frame, text="*", width=5, height=2, command=lambda: ajouter(" * ")).grid(row=4, column=1, padx=5, pady=5) tk.Button(frame, text="Espace", width=5, height=2, command=lambda: ajouter(" ")).grid(row=4, column=2, padx=5, pady=5) # bouton clear tk.Button(frame, text="C", width=5, height=2, command=effacer).grid(row=5, column=0, padx=5, pady=5) # bouton égal tk.Button(frame, text="=", width=12, height=2, command=calculer).grid(row=5, column=1, columnspan=2, padx=5, pady=5) # resultat label_resultat = tk.Label(fenetre, text="Résultat :", font=("Arial", 14)) label_resultat.pack(pady=20) fenetre.mainloop() #exp = "6 4 3 + *" #calcule = (npi2tree(exp)) #print(calcule) #print(calcule.evalue())