Browse Source

Notation

master
Professeur 2 months ago
parent
commit
8c5f77a5a6
  1. 260
      calculatrice.py

260
calculatrice.py

@ -1,120 +1,142 @@
import tkinter as tk """
Mauvaise utilisation de git (un seul véritable commit !)
class Expression: Fonctions non documentées (un commentaire n'est pas une documentation)
def __init__(self, valeur, gauche, droite):
self.valeur = valeur Dans npi2tree, vous ne gérez pas le cas ou la liste ne correspond pas à une expression valide.
self.gauche = gauche
self.droite = droite Pour la partie tkintter :
def evalue(self): Vous avez testé votre code ?? Vous n''avez pas remarqué qu'on ne voit pas le résultat ?!?!
# si c'est un entier on le renvoie
if isinstance(self.valeur, int): Mauvaise utilisation du bloc try except.
return self.valeur Utilisation trop compliquée de fonctions lambda.
Avant de vouloir vous lancer dans des choses compliquées, il aurait été intéressant de
# sinon c’est un opérateur faire uniquement ce qui était demandé dans le cahier des charges ! Par exemple, que se
if self.valeur == '+': passe-t-il si je tapes 2 2 = ?
return self.gauche.evalue() + self.droite.evalue() Pourquoi vous acharnez-vous à faire faire votre travail
par une IA sans chercher à comprendre le résultat ?!?
if self.valeur == '*':
return self.gauche.evalue() * self.droite.evalue() Note : 5 / 10
"""
def __str__(self):
# si c’est un nombre
if isinstance(self.valeur, int): import tkinter as tk
return str(self.valeur)
class Expression:
# sinon on affiche avec parenthèses def __init__(self, valeur, gauche, droite):
return "(" + str(self.gauche) + self.valeur + str(self.droite) + ")" self.valeur = valeur
self.gauche = gauche
def npi2tree(liste): self.droite = droite
pile = []
def evalue(self):
for element in liste: # si c'est un entier on le renvoie
if element == '+' or element == '*': if isinstance(self.valeur, int):
droite = pile.pop() return self.valeur
gauche = pile.pop()
# sinon c’est un opérateur
exp = Expression(element, gauche, droite) if self.valeur == '+':
return self.gauche.evalue() + self.droite.evalue()
pile.append(exp)
if self.valeur == '*':
else: return self.gauche.evalue() * self.droite.evalue()
nombre = int(element) def __str__(self):
pile.append(Expression(nombre, None, None)) # si c’est un nombre
if isinstance(self.valeur, int):
return pile.pop() return str(self.valeur)
def ajouter(valeur): # sinon on affiche avec parenthèses
entree.insert(tk.END, valeur) return "(" + str(self.gauche) + self.valeur + str(self.droite) + ")"
def effacer(): def npi2tree(liste):
entree.delete(0, tk.END) pile = []
label_resultat.config(text="Résultat :")
for element in liste:
def calculer(): if element == '+' or element == '*':
try: droite = pile.pop()
expression = entree.get() gauche = pile.pop()
liste = expression.split()
arbre = npi2tree(liste) exp = Expression(element, gauche, droite)
resultat = arbre.evalue()
label_resultat.config(text="Résultat : " + str(resultat)) pile.append(exp)
except:
label_resultat.config(text="Erreur") else:
nombre = int(element)
fenetre = tk.Tk() pile.append(Expression(nombre, None, None))
fenetre.title("Calculatrice NPI")
fenetre.geometry("320x450") return pile.pop()
fenetre.resizable(False, False)
def ajouter(valeur):
entree = tk.Entry(fenetre, font=("Arial", 16), justify="right") entree.insert(tk.END, valeur)
entree.pack(padx=10, pady=10, fill="x")
def effacer():
frame = tk.Frame(fenetre) entree.delete(0, tk.END)
frame.pack() label_resultat.config(text="Résultat :")
# boutons chiffres 1 à 9 def calculer():
for i in range(1, 10): try:
tk.Button(frame, expression = entree.get()
text=str(i), liste = expression.split()
width=5, arbre = npi2tree(liste)
height=2, resultat = arbre.evalue()
command=lambda x=str(i): ajouter(x) label_resultat.config(text="Résultat : " + str(resultat))
).grid(row=(i-1)//3, column=(i-1)%3, padx=5, pady=5) except:
label_resultat.config(text="Erreur")
# bouton 0
tk.Button(frame,
text="0", fenetre = tk.Tk()
width=5, fenetre.title("Calculatrice NPI")
height=2, fenetre.geometry("320x450")
command=lambda: ajouter("0") fenetre.resizable(False, False)
).grid(row=3, column=1, padx=5, pady=5)
entree = tk.Entry(fenetre, font=("Arial", 16), justify="right")
tk.Button(frame, text="+", width=5, height=2, entree.pack(padx=10, pady=10, fill="x")
command=lambda: ajouter(" + ")).grid(row=4, column=0, padx=5, pady=5)
frame = tk.Frame(fenetre)
tk.Button(frame, text="*", width=5, height=2, frame.pack()
command=lambda: ajouter(" * ")).grid(row=4, column=1, padx=5, pady=5)
# boutons chiffres 1 à 9
tk.Button(frame, text="Espace", width=5, height=2, for i in range(1, 10):
command=lambda: ajouter(" ")).grid(row=4, column=2, padx=5, pady=5) tk.Button(frame,
text=str(i),
# bouton clear width=5,
tk.Button(frame, text="C", width=5, height=2, height=2,
command=effacer).grid(row=5, column=0, padx=5, pady=5) command=lambda x=str(i): ajouter(x)
).grid(row=(i-1)//3, column=(i-1)%3, padx=5, pady=5)
# bouton égal
tk.Button(frame, text="=", width=12, height=2, # bouton 0
command=calculer).grid(row=5, column=1, columnspan=2, padx=5, pady=5) tk.Button(frame,
text="0",
# resultat width=5,
label_resultat = tk.Label(fenetre, text="Résultat :", font=("Arial", 14)) height=2,
label_resultat.pack(pady=20) command=lambda: ajouter("0")
).grid(row=3, column=1, padx=5, pady=5)
fenetre.mainloop()
tk.Button(frame, text="+", width=5, height=2,
#exp = "6 4 3 + *" command=lambda: ajouter(" + ")).grid(row=4, column=0, padx=5, pady=5)
#calcule = (npi2tree(exp))
#print(calcule) 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()) #print(calcule.evalue())
Loading…
Cancel
Save