Browse Source

Transférer les fichiers vers ''

master
OUEDRAGO Seyba 2 months ago
parent
commit
69f62dfb77
  1. 120
      calculatrice.py

120
calculatrice.py

@ -0,0 +1,120 @@
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())
Loading…
Cancel
Save