Browse Source

Ajout opérateurs (’-’, ’/’, ’ˆ’)

master
FORESTIER Alexi 9 months ago
parent
commit
03767a9f3f
  1. 228
      Calc.py

228
Calc.py

@ -1,114 +1,114 @@
import tkinter as tk import tkinter as tk
from Pile import Pile_chaine from Pile import Pile_chaine
import random import random
class Expression: class Expression:
"""Implémentation d'une expression mathématique dans un arbre binaire""" """Implémentation d'une expression mathématique dans un arbre binaire"""
def __init__(self, valeur, gauche, droit): def __init__(self, valeur, gauche, droit):
"""Crée un arbre binaire vide""" """Crée un arbre binaire vide"""
self.valeur = valeur self.valeur = valeur
self.gauche = gauche self.gauche = gauche
self.droit = droit self.droit = droit
def evalue(self): def evalue(self):
"""Calcule l'expression mathématique d'un arbre binaire""" """Renvoie le résultat de l'expression mathématique d'un arbre binaire"""
if self.valeur == '+': if self.valeur == '+':
self.valeur = self.gauche.evalue() + self.droit.evalue() self.valeur = self.gauche.evalue() + self.droit.evalue()
if self.valeur == '*': elif self.valeur == '*':
self.valeur = self.gauche.evalue() * self.droit.evalue() self.valeur = self.gauche.evalue() * self.droit.evalue()
return self.valeur elif self.valeur == '/':
self.valeur = self.gauche.evalue() / self.droit.evalue()
def __str__(self): elif self.valeur == '-':
"""Affiche l'expression mathématique d'un arbre binaire""" self.valeur = self.gauche.evalue() - self.droit.evalue()
if self.gauche is None and self.droit is None: elif self.valeur == '^':
return str(self.valeur) self.valeur = self.gauche.evalue() ** self.droit.evalue()
expr = "" return self.valeur
if self.gauche is not None:
if self.gauche.valeur in ['+', '*']: def __str__(self):
expr += "(" + str(self.gauche) + ")" """Renvoie l'expression mathématique d'un arbre binaire"""
else: if self.valeur != '+' and self.valeur != '*' and self.valeur != '/' and self.valeur != '-' and self.valeur != '^':
expr += str(self.gauche) return self.valeur
expr += " " + str(self.valeur) + " " else:
if self.droit is not None: return "(" + str(self.gauche.__str__()) + str(self.valeur) + str(self.droit.__str__()) + ")"
if self.droit.valeur in ['+', '*']:
expr += "(" + str(self.droit) + ")"
else:
expr += str(self.droit) def npi2tree(ch):
return expr """Renvoie un arbre binaire contenant une expression mathématique
via une expression en notation polonaise inversée"""
ch = ch.split()
def npi2tree(ch): Expr = Pile_chaine()
"""Convertit une expression en notation polonaise inversée à un arbre binaire""" for elmt in ch:
ch = ch.split() if elmt == '*' or elmt == '+' or elmt == '/' or elmt == '-' or elmt == '^':
Expr = Pile_chaine() exp = Expression(elmt, Expr.depiler(), Expr.depiler())
for elmt in ch: Expr.empiler(exp)
if elmt == '*' or elmt == '+': else:
exp = Expression(elmt, Expr.depiler(), Expr.depiler()) Expr.empiler(Expression(int(elmt), None, None))
Expr.empiler(exp) return Expr.sommet()
else:
Expr.empiler(Expression(int(elmt), None, None))
return Expr.sommet()
def calculer(): def calculer():
"""Affiche l'expression ainsi que son résultat dans l'interface Tkinter""" """Affiche l'expression ainsi que son résultat dans l'interface Tkinter"""
déception = ["Peut mieux faire.", déception = ["Peut mieux faire.",
"Va t'entraîner, t'es nul...", "Va t'entraîner, t'es nul...",
"Ah nan, tu pues vraiment.", "Ah nan, tu pues vraiment.",
"Skill issue.", "Skill issue.",
"Je souhaite que tu arrêtes tout.", "Je souhaite que tu arrêtes tout.",
"Il a eu 0/20", "Il a eu 0/20",
"Apprends à lire.", "Apprends à lire.",
"Arrête de déconner.", "Arrête de déconner.",
"Abandonne au pire.", "Abandonne au pire.",
"42", "42",
"Va faire un tour dehors." "Va faire un tour dehors."
] ]
expression = entry.get() expression = entry.get()
try: try:
resultat = npi2tree(expression).evalue() resultat = npi2tree(expression).evalue()
result_label.config(text="Résultat: " + str(npi2tree(expression)) + " = " + str(resultat)) result_label.config(text="Résultat: " + str(npi2tree(expression)) + " = " + str(resultat))
except: except:
result_label.config(text=random.choice(déception)) result_label.config(text=random.choice(déception))
root = tk.Tk() root = tk.Tk()
root.title("Calculatrice rudimentaire") root.title("Calculatrice rudimentaire")
message_label = tk.Label(root, text="Le calcul doit être écrit en notation polonaise inversée") message_label = tk.Label(root, text="Le calcul doit être écrit en notation polonaise inversée")
message_label.pack() message_label.pack()
entry = tk.Entry(root, width=30) entry = tk.Entry(root, width=30)
entry.pack(pady=10) entry.pack(pady=10)
evaluate_button = tk.Button(root, text="Calculer", command=calculer) evaluate_button = tk.Button(root, text="Calculer", command=calculer)
evaluate_button.pack() evaluate_button.pack()
result_label = tk.Label(root, text="") result_label = tk.Label(root, text="")
result_label.pack(pady=10) result_label.pack(pady=10)
root.mainloop() root.mainloop()

Loading…
Cancel
Save