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