From 03767a9f3fbb48e3382c1021d1adc21c040f0813 Mon Sep 17 00:00:00 2001 From: FORESTIER Alexi Date: Thu, 15 Feb 2024 18:09:18 +0100 Subject: [PATCH] =?UTF-8?q?Ajout=20op=C3=A9rateurs=20(=E2=80=99-=E2=80=99,?= =?UTF-8?q?=20=E2=80=99/=E2=80=99,=20=E2=80=99=CB=86=E2=80=99)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Calc.py | 228 ++++++++++++++++++++++++++++---------------------------- 1 file changed, 114 insertions(+), 114 deletions(-) diff --git a/Calc.py b/Calc.py index 9f3661f..f6bed57 100644 --- a/Calc.py +++ b/Calc.py @@ -1,114 +1,114 @@ -import tkinter as tk -from Pile import Pile_chaine -import random - -class Expression: - """Implémentation d'une expression mathématique dans un arbre binaire""" - def __init__(self, valeur, gauche, droit): - """Crée un arbre binaire vide""" - self.valeur = valeur - self.gauche = gauche - self.droit = droit - - def evalue(self): - """Calcule l'expression mathématique d'un arbre binaire""" - if self.valeur == '+': - self.valeur = self.gauche.evalue() + self.droit.evalue() - if self.valeur == '*': - self.valeur = self.gauche.evalue() * self.droit.evalue() - return self.valeur - - def __str__(self): - """Affiche l'expression mathématique d'un arbre binaire""" - if self.gauche is None and self.droit is None: - return str(self.valeur) - expr = "" - if self.gauche is not None: - if self.gauche.valeur in ['+', '*']: - expr += "(" + str(self.gauche) + ")" - else: - expr += str(self.gauche) - expr += " " + str(self.valeur) + " " - if self.droit is not None: - if self.droit.valeur in ['+', '*']: - expr += "(" + str(self.droit) + ")" - else: - expr += str(self.droit) - return expr - - -def npi2tree(ch): - """Convertit une expression en notation polonaise inversée à un arbre binaire""" - ch = ch.split() - Expr = Pile_chaine() - for elmt in ch: - if elmt == '*' or elmt == '+': - exp = Expression(elmt, Expr.depiler(), Expr.depiler()) - Expr.empiler(exp) - else: - Expr.empiler(Expression(int(elmt), None, None)) - return Expr.sommet() - -def calculer(): - """Affiche l'expression ainsi que son résultat dans l'interface Tkinter""" - déception = ["Peut mieux faire.", - "Va t'entraîner, t'es nul...", - "Ah nan, tu pues vraiment.", - "Skill issue.", - "Je souhaite que tu arrêtes tout.", - "Il a eu 0/20", - "Apprends à lire.", - "Arrête de déconner.", - "Abandonne au pire.", - "42", - "Va faire un tour dehors." - ] - expression = entry.get() - try: - resultat = npi2tree(expression).evalue() - result_label.config(text="Résultat: " + str(npi2tree(expression)) + " = " + str(resultat)) - except: - result_label.config(text=random.choice(déception)) - -root = tk.Tk() -root.title("Calculatrice rudimentaire") - -message_label = tk.Label(root, text="Le calcul doit être écrit en notation polonaise inversée") -message_label.pack() - -entry = tk.Entry(root, width=30) -entry.pack(pady=10) - -evaluate_button = tk.Button(root, text="Calculer", command=calculer) -evaluate_button.pack() - -result_label = tk.Label(root, text="") -result_label.pack(pady=10) - -root.mainloop() - - - - - - - - - - - - - - - - - - - - - - - - - - +import tkinter as tk +from Pile import Pile_chaine +import random + +class Expression: + """Implémentation d'une expression mathématique dans un arbre binaire""" + def __init__(self, valeur, gauche, droit): + """Crée un arbre binaire vide""" + self.valeur = valeur + self.gauche = gauche + self.droit = droit + + def evalue(self): + """Renvoie le résultat de l'expression mathématique d'un arbre binaire""" + if self.valeur == '+': + self.valeur = self.gauche.evalue() + self.droit.evalue() + elif self.valeur == '*': + self.valeur = self.gauche.evalue() * self.droit.evalue() + elif self.valeur == '/': + self.valeur = self.gauche.evalue() / self.droit.evalue() + elif self.valeur == '-': + self.valeur = self.gauche.evalue() - self.droit.evalue() + elif self.valeur == '^': + self.valeur = self.gauche.evalue() ** self.droit.evalue() + return self.valeur + + def __str__(self): + """Renvoie l'expression mathématique d'un arbre binaire""" + if self.valeur != '+' and self.valeur != '*' and self.valeur != '/' and self.valeur != '-' and self.valeur != '^': + return self.valeur + else: + return "(" + str(self.gauche.__str__()) + str(self.valeur) + str(self.droit.__str__()) + ")" + + + +def npi2tree(ch): + """Renvoie un arbre binaire contenant une expression mathématique + via une expression en notation polonaise inversée""" + ch = ch.split() + Expr = Pile_chaine() + for elmt in ch: + if elmt == '*' or elmt == '+' or elmt == '/' or elmt == '-' or elmt == '^': + exp = Expression(elmt, Expr.depiler(), Expr.depiler()) + Expr.empiler(exp) + else: + Expr.empiler(Expression(int(elmt), None, None)) + return Expr.sommet() + + + + +def calculer(): + """Affiche l'expression ainsi que son résultat dans l'interface Tkinter""" + déception = ["Peut mieux faire.", + "Va t'entraîner, t'es nul...", + "Ah nan, tu pues vraiment.", + "Skill issue.", + "Je souhaite que tu arrêtes tout.", + "Il a eu 0/20", + "Apprends à lire.", + "Arrête de déconner.", + "Abandonne au pire.", + "42", + "Va faire un tour dehors." + ] + expression = entry.get() + try: + resultat = npi2tree(expression).evalue() + result_label.config(text="Résultat: " + str(npi2tree(expression)) + " = " + str(resultat)) + except: + result_label.config(text=random.choice(déception)) + +root = tk.Tk() +root.title("Calculatrice rudimentaire") + +message_label = tk.Label(root, text="Le calcul doit être écrit en notation polonaise inversée") +message_label.pack() + +entry = tk.Entry(root, width=30) +entry.pack(pady=10) + +evaluate_button = tk.Button(root, text="Calculer", command=calculer) +evaluate_button.pack() + +result_label = tk.Label(root, text="") +result_label.pack(pady=10) + +root.mainloop() + + + + + + + + + + + + + + + + + + + + + + + + + +