You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

85 lines
2.4 KiB

from Pile import Pile_lst
9 months ago
from tkinter import *
class Expression:
def __init__(self, valeur, gauche, droite):
self.valeur = valeur
self.gauche = gauche
self.droite = droite
def evalue(self):
9 months ago
"""Renvoie la valeur de l'expression"""
if self.valeur == '+':
return self.gauche.evalue() + self.droite.evalue()
9 months ago
elif self.valeur == '*':
return self.gauche.evalue() * self.droite.evalue()
9 months ago
elif self.valeur == '-':
return self.gauche.evalue() - self.droite.evalue()
elif self.valeur == '/':
return self.gauche.evalue() / self.droite.evalue()
else:
return self.valeur
def __str__(self):
9 months ago
if self.valeur != '+' and self.valeur != '*' and self.valeur != '-'and self.valeur != '/':
return self.valeur
9 months ago
elif self.valeur == '+' or self.valeur == '*' or self.valeur == '-' or self.valeur == '/':
return "(" + str(self.gauche.__str__()) + str(self.valeur) + str(self.droite.__str__()) + ")"
def npi2tree(exp):
9 months ago
"""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:
9 months ago
if element == '+' or element == '*' or element == '-' or element == '/':
exp_npi = Expression(element, pile_npi.depiler(), pile_npi.depiler())
pile_npi.empiler(exp_npi)
else:
9 months ago
exp_feuille = Expression(int(element), None, None)
pile_npi.empiler(exp_feuille)
return pile_npi.sommet()
9 months ago
#-------------------------------------------
#Tkinter
#-------------------------------------------
fenetre = Tk()
#def enregistrer():
# expr = zonetexte.get()
# affichage = npi2tree(expr)
# texte2.configure(text=affichage)
def resultat():
expr = zonetexte.get()
res = npi2tree(expr).evalue()
texte2.configure(text=res)
affichage = npi2tree(expr)
texte4.configure(text=affichage)
zonetexte = Entry(fenetre, width=30)
zonetexte.pack()
texte1 = Label(fenetre,text="Résultat:")
texte1.pack()
texte2 = Label(fenetre,text="???")
texte2.pack()
texte3 = Label(fenetre,text="Expression:")
texte3.pack()
texte4 = Label(fenetre,text="???")
texte4.pack()
enregistrer=Button(fenetre, text="Résultat", command=resultat)
enregistrer.pack()