diff --git a/intergraph.py b/intergraph.py index 0d62283..51662e7 100644 --- a/intergraph.py +++ b/intergraph.py @@ -1,66 +1,63 @@ -from tkinter import * -from modules.calculette import Calculette - - -from tkinter import * -from modules.calculette import Calculette - -def ajouter_au_calcul(symbol): - current_text = calc.get() - calc.set(current_text + symbol) - -def ajouter_espace(): - current_text = calc.get() - calc.set(current_text + " ") - -def calculer_expression(): - expression = calc.get().strip() - resultat = calculatrice.calculer(expression) - result_label.config(text="Résultat: " + str(resultat)) - -def effacer(): - calc.set("") - -fenetre = Tk() -fenetre.geometry("400x500") -fenetre.title("Calculatrice NPI") - -calculatrice = Calculette() - -calcLabel = Label(fenetre, text="Expression en Notation Polonaise Inversée") -calcLabel.pack(pady=10) - -calc = StringVar() -calc.set("") -saisie = Entry(fenetre, textvariable=calc, width=40) -saisie.pack(pady=10) - -buttons_frame = Frame(fenetre) -buttons_frame.pack(pady=10) - -buttons = [ - ('7', 1, 0), ('8', 1, 1), ('9', 1, 2), ('/', 1, 3), - ('4', 2, 0), ('5', 2, 1), ('6', 2, 2), ('*', 2, 3), - ('1', 3, 0), ('2', 3, 1), ('3', 3, 2), ('-', 3, 3), - ('0', 4, 0), ('.', 4, 1), ('+', 4, 2), ('=', 4, 3), - (' ', 5, 0) # Adding space button -] - -for (text, row, col) in buttons: - if text == '=': - Button(buttons_frame, text=text, width=10, height=3, command=calculer_expression).grid(row=row, column=col, padx=2, pady=2) - elif text == ' ': - Button(buttons_frame, text="SPACE", width=10, height=3, command=ajouter_espace).grid(row=row, column=col, padx=2, pady=2) - else: - Button(buttons_frame, text=text, width=10, height=3, command=lambda t=text: ajouter_au_calcul(t)).grid(row=row, column=col, padx=2, pady=2) - -Button(fenetre, text="EFFACER", width=40, command=effacer).pack(pady=10) - -result_label = Label(fenetre, text="", font=('Arial', 14)) -result_label.pack(pady=10) - -# Exemple d'utilisation -exemple = Label(fenetre, text="Exemple: '3 4 + 6 *' calcule (3+4)*6") -exemple.pack() - -fenetre.mainloop() +from tkinter import * +from modules.calculette1 import Calculette + + +def ajouter_au_calcul(symbol): + current_text = calc.get() + calc.set(current_text + symbol) + +def ajouter_espace(): + current_text = calc.get() + calc.set(current_text + " ") + +def calculer_expression(): + expression = calc.get().strip() + resultat = calculatrice.calculer(expression) + result_label.config(text="Résultat: " + str(resultat)) + +def effacer(): + calc.set("") + +fenetre = Tk() +fenetre.geometry("500x600") +fenetre.title("Calculatrice NPI") + +calculatrice = Calculette() + +calcLabel = Label(fenetre, text="Expression en Notation Polonaise Inversée") +calcLabel.pack(pady=10) + +calc = StringVar() +calc.set("") +saisie = Entry(fenetre, textvariable=calc, width=40) +saisie.pack(pady=10) + +buttons_frame = Frame(fenetre) +buttons_frame.pack(pady=10) + +buttons = [ + ('7', 1, 0), ('8', 1, 1), ('9', 1, 2), ('/', 1, 3), + ('4', 2, 0), ('5', 2, 1), ('6', 2, 2), ('*', 2, 3), + ('1', 3, 0), ('2', 3, 1), ('3', 3, 2), ('-', 3, 3), + ('0', 4, 0), ('.', 4, 1), ('+', 4, 2), ('=', 4, 3), + (' ', 5, 0) # Adding space button +] + +for (text, row, col) in buttons: + if text == '=': + Button(buttons_frame, text=text, width=10, height=3, command=calculer_expression).grid(row=row, column=col, padx=2, pady=2) + elif text == ' ': + Button(buttons_frame, text="SPACE", width=10, height=3, command=ajouter_espace).grid(row=row, column=col, padx=2, pady=2) + else: + Button(buttons_frame, text=text, width=10, height=3, command=lambda t=text: ajouter_au_calcul(t)).grid(row=row, column=col, padx=2, pady=2) + +Button(fenetre, text="EFFACER", width=40, command=effacer).pack(pady=10) + +result_label = Label(fenetre, text="", font=('Arial', 14)) +result_label.pack(pady=10) + +# Exemple d'utilisation +exemple = Label(fenetre, text="Exemple: '3 4 + 6 *' calcule (3+4)*6") +exemple.pack() + +fenetre.mainloop() diff --git a/modules/calculette1.py b/modules/calculette1.py index 431a826..ff110dd 100644 --- a/modules/calculette1.py +++ b/modules/calculette1.py @@ -1,49 +1,49 @@ -from File import File_chaine as File -from Pile import Pile_chaine as Pile - -class Expression: - def __init__(self, valeur, gauche=None, droite=None): - self.valeur = valeur - self.gauche = gauche - self.droite = droite - - def evalue(self): - if isinstance(self.valeur, (int, float)): - return self.valeur - - operateurs = { - '+': lambda x, y: x + y, - '*': lambda x, y: x * y, - '/': lambda x, y: x / y if y != 0 else float('inf'), - '-': lambda x, y: x - y - } - return operateurs[self.valeur](self.gauche.evalue(), self.droite.evalue()) - -class Calculette: - def __init__(self): - pass - - def npi2tree(self, lst): - pile = [] - for element in lst: - if element in ['+', '-', '*', '/']: - droite = pile.pop() - gauche = pile.pop() - pile.append(Expression(element, gauche, droite)) - else: - try: - valeur = int(element) if element.isdigit() else float(element) - pile.append(Expression(valeur)) - except ValueError: - return None - return pile[0] - - def calculer(self, expression): - try: - elements = expression.split() - arbre = self.npi2tree(elements) - if arbre: - return arbre.evalue() - return "Expression invalide" - except Exception as e: - return str(e) +#from File import File_chaine as File +#from Pile import Pile_chaine as Pile + +class Expression: + def __init__(self, valeur, gauche=None, droite=None): + self.valeur = valeur + self.gauche = gauche + self.droite = droite + + def evalue(self): + if isinstance(self.valeur, (int, float)): + return self.valeur + + operateurs = { + '+': lambda x, y: x + y, + '*': lambda x, y: x * y, + '/': lambda x, y: x / y if y != 0 else float('inf'), + '-': lambda x, y: x - y + } + return operateurs[self.valeur](self.gauche.evalue(), self.droite.evalue()) + +class Calculette: + def __init__(self): + pass + + def npi2tree(self, lst): + pile = [] + for element in lst: + if element in ['+', '-', '*', '/']: + droite = pile.pop() + gauche = pile.pop() + pile.append(Expression(element, gauche, droite)) + else: + try: + valeur = int(element) if element.isdigit() else float(element) + pile.append(Expression(valeur)) + except ValueError: + return None + return pile[0] + + def calculer(self, expression): + try: + elements = expression.split() + arbre = self.npi2tree(elements) + if arbre: + return arbre.evalue() + return "Expression invalide" + except Exception as e: + return str(e)