You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

86 lines
2.3 KiB

"""
Mauvaise utilisation du bloc try except.
Utilisation trop compliquée de fonctions lambda.
Avant de vouloir vous lancer dans des choses compliquées, il aurait été intéressant de
faire uniquement ce qui était demandé dans le cahier des charges ! Par exemple, comment
taper 10 avec votre clavier ? Que se passe-t-il si je tapes 2 2 calculer ?
Pourquoi vous acharnez-vous à faire faire votre travail
par une IA sans chercher à comprendre le résultat ?!?
Note : 5 / 10
"""
import tkinter as tk
from tkinter import messagebox
from expression import npi2tree
def ajouter(val):
entree.insert(tk.END, val + " ")
def calculer():
try:
texte = entree.get()
liste = texte.split()
arbre = npi2tree(liste)
resultat.config(text="Résultat : " + str(arbre.evalue()))
except:
messagebox.showerror("Erreur", "Expression invalide")
def effacer():
entree.delete(0, tk.END)
resultat.config(text="")
fenetre = tk.Tk()
fenetre.title("Calculatrice NPI")
fenetre.geometry("500x600")
entree = tk.Entry(fenetre, width=35, font=("Arial", 18))
entree.pack(pady=20)
frame = tk.Frame(fenetre)
frame.pack()
chiffres = ["7", "8", "9",
"4", "5", "6",
"1", "2", "3",
"0"]
i = 0
for c in chiffres:
b = tk.Button(frame,
text=c,
width=6,
height=2,
font=("Arial", 16),
command=lambda x=c: ajouter(x))
b.grid(row=i//3, column=i%3, padx=5, pady=5)
i += 1
plus = tk.Button(frame, text="+", width=6, height=2,
font=("Arial", 16),
command=lambda: ajouter("+"))
plus.grid(row=0, column=3, padx=5, pady=5)
fois = tk.Button(frame, text="*", width=6, height=2,
font=("Arial", 16),
command=lambda: ajouter("*"))
fois.grid(row=1, column=3, padx=5, pady=5)
btn_calc = tk.Button(fenetre, text="Calculer",
font=("Arial", 16), height=2,
command=calculer)
btn_calc.pack(pady=10)
btn_clear = tk.Button(fenetre, text="Effacer",
font=("Arial", 16), height=2,
command=effacer)
btn_clear.pack(pady=5)
resultat = tk.Label(fenetre, text="", font=("Arial", 16), fg="red")
resultat.pack(pady=20)
fenetre.mainloop()