diff --git a/calculatrice.py b/calculatrice.py index 2f2a70d..7086863 100644 --- a/calculatrice.py +++ b/calculatrice.py @@ -1,5 +1,7 @@ from Pile import Pile_lst +from math import * from tkinter import * +from tkinter.messagebox import * class Expression: def __init__(self, valeur, gauche, droite): @@ -17,25 +19,46 @@ class Expression: return self.gauche.evalue() - self.droite.evalue() elif self.valeur == '/': return self.gauche.evalue() / self.droite.evalue() + elif self.valeur == '^': + return self.gauche.evalue() ** self.droite.evalue() + elif self.valeur == 'sqrt': + return sqrt(self.gauche.evalue()) + elif self.valeur == 'cos': + return cos(self.gauche.evalue()) + elif self.valeur == 'sin': + return sin(self.gauche.evalue()) + elif self.valeur == 'tan': + return tan(self.gauche.evalue()) else: return self.valeur def __str__(self): - if self.valeur != '+' and self.valeur != '*' and self.valeur != '-'and self.valeur != '/': + if self.valeur != '+' and self.valeur != '*' and self.valeur != '-' and self.valeur != '/' and self.valeur != '^' and self.valeur != 'sqrt' and self.valeur != 'cos' and self.valeur != 'sin' and self.valeur != 'tan': return self.valeur - elif self.valeur == '+' or self.valeur == '*' or self.valeur == '-' or self.valeur == '/': + elif self.valeur == '+' or self.valeur == '*' or self.valeur == '-' or self.valeur == '/' or self.valeur == '^': return "(" + str(self.gauche.__str__()) + str(self.valeur) + str(self.droite.__str__()) + ")" + elif self.valeur == 'sqrt': + return "(sqrt(" + str(self.gauche.__str__()) + ')' + ')' + elif self.valeur == 'cos': + return "(cos(" + str(self.gauche.__str__()) + ')' + ')' + elif self.valeur =='sin': + return "(sin(" + str(self.gauche.__str__()) + ')' + ')' + elif self.valeur == 'tan': + return "(tan(" + str(self.gauche.__str__()) + ')' + ')' def npi2tree(exp): """Prends en paramètre une ... correspondant à l'expression en notation polonaise inversée et renvoie l'arbre correspondant""" pile_npi = Pile_lst() lst_npi = exp.split() for element in lst_npi: - if element == '+' or element == '*' or element == '-' or element == '/': + if element == '+' or element == '*' or element == '-' or element == '/' or element == '^': exp_npi = Expression(element, pile_npi.depiler(), pile_npi.depiler()) pile_npi.empiler(exp_npi) + elif element == 'sqrt' and element == 'cos' and element == 'sin' and element == 'tan': + exp_npi = Expression(element, pile_npi.depiler(), None) + pile_npi.empiler(exp_npi) else: - exp_feuille = Expression(int(element), None, None) + exp_feuille = Expression(float(element), None, None) pile_npi.empiler(exp_feuille) return pile_npi.sommet() @@ -48,11 +71,6 @@ def npi2tree(exp): fenetre = Tk() -#def enregistrer(): -# expr = zonetexte.get() -# affichage = npi2tree(expr) -# texte2.configure(text=affichage) - def resultat(): expr = zonetexte.get() res = npi2tree(expr).evalue() @@ -61,24 +79,51 @@ def resultat(): affichage = npi2tree(expr) texte4.configure(text=affichage) - +def legende(): + fenetre = Tk() + fenetre.title('Légende') + texteLeg1 = Label(fenetre, text='Pour faire une addition, taper : + ') + texteLeg1.pack() + texteLeg2 = Label(fenetre, text='Pour faire une soustraction, taper : - ') + texteLeg2.pack() + texteLeg3 = Label(fenetre, text='Pour faire une multiplication, taper : * ') + texteLeg3.pack() + texteLeg4 = Label(fenetre, text='Pour faire une division, taper : / ') + texteLeg4.pack() + texteLeg5 = Label(fenetre, text='Pour faire une faire une puissance de ..., taper : ^ ') + texteLeg5.pack() + texteLeg6 = Label(fenetre, text='Pour faire une racine carré, taper: sqrt') + texteLeg6.pack() + texteLeg7 = Label(fenetre, text='Pour faire le cosinus de..., taper: cos') + texteLeg7.pack() + texteLeg8 = Label(fenetre, text='Pour faire le sinus de..., taper: cos') + texteLeg8.pack() + texteLeg9 = Label(fenetre, text='Pour faire la tangente de..., taper: tan') + texteLeg9.pack() + + + + zonetexte = Entry(fenetre, width=30) zonetexte.pack() -texte1 = Label(fenetre,text="Résultat:") +texte1 = Label(fenetre, text="Résultat:") texte1.pack() -texte2 = Label(fenetre,text="???") +texte2 = Label(fenetre, text="???") texte2.pack() -texte3 = Label(fenetre,text="Expression:") +texte3 = Label(fenetre, text="Expression:") texte3.pack() -texte4 = Label(fenetre,text="???") +texte4 = Label(fenetre, text="???") texte4.pack() enregistrer=Button(fenetre, text="Résultat", command=resultat) enregistrer.pack() - - +menubar = Menu(fenetre) +menu1 = Menu(menubar, tearoff=0) +menu1.add_command(label="Légende", command=legende) +menubar.add_cascade(label="Option", menu=menu1) +fenetre.config(menu=menubar)