1 changed files with 141 additions and 119 deletions
@ -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…
Reference in new issue