Browse Source

fini

master
Laura 1 month ago
parent
commit
0808c183bd
  1. 129
      intergraph.py
  2. 98
      modules/calculette1.py

129
intergraph.py

@ -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()

98
modules/calculette1.py

@ -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…
Cancel
Save