FORESTIER Alexi
9 months ago
1 changed files with 114 additions and 114 deletions
@ -1,114 +1,114 @@ |
|||
import tkinter as tk |
|||
from Pile import Pile_chaine |
|||
import random |
|||
|
|||
class Expression: |
|||
"""Implémentation d'une expression mathématique dans un arbre binaire""" |
|||
def __init__(self, valeur, gauche, droit): |
|||
"""Crée un arbre binaire vide""" |
|||
self.valeur = valeur |
|||
self.gauche = gauche |
|||
self.droit = droit |
|||
|
|||
def evalue(self): |
|||
"""Calcule l'expression mathématique d'un arbre binaire""" |
|||
if self.valeur == '+': |
|||
self.valeur = self.gauche.evalue() + self.droit.evalue() |
|||
if self.valeur == '*': |
|||
self.valeur = self.gauche.evalue() * self.droit.evalue() |
|||
return self.valeur |
|||
|
|||
def __str__(self): |
|||
"""Affiche l'expression mathématique d'un arbre binaire""" |
|||
if self.gauche is None and self.droit is None: |
|||
return str(self.valeur) |
|||
expr = "" |
|||
if self.gauche is not None: |
|||
if self.gauche.valeur in ['+', '*']: |
|||
expr += "(" + str(self.gauche) + ")" |
|||
else: |
|||
expr += str(self.gauche) |
|||
expr += " " + str(self.valeur) + " " |
|||
if self.droit is not None: |
|||
if self.droit.valeur in ['+', '*']: |
|||
expr += "(" + str(self.droit) + ")" |
|||
else: |
|||
expr += str(self.droit) |
|||
return expr |
|||
|
|||
|
|||
def npi2tree(ch): |
|||
"""Convertit une expression en notation polonaise inversée à un arbre binaire""" |
|||
ch = ch.split() |
|||
Expr = Pile_chaine() |
|||
for elmt in ch: |
|||
if elmt == '*' or elmt == '+': |
|||
exp = Expression(elmt, Expr.depiler(), Expr.depiler()) |
|||
Expr.empiler(exp) |
|||
else: |
|||
Expr.empiler(Expression(int(elmt), None, None)) |
|||
return Expr.sommet() |
|||
|
|||
def calculer(): |
|||
"""Affiche l'expression ainsi que son résultat dans l'interface Tkinter""" |
|||
déception = ["Peut mieux faire.", |
|||
"Va t'entraîner, t'es nul...", |
|||
"Ah nan, tu pues vraiment.", |
|||
"Skill issue.", |
|||
"Je souhaite que tu arrêtes tout.", |
|||
"Il a eu 0/20", |
|||
"Apprends à lire.", |
|||
"Arrête de déconner.", |
|||
"Abandonne au pire.", |
|||
"42", |
|||
"Va faire un tour dehors." |
|||
] |
|||
expression = entry.get() |
|||
try: |
|||
resultat = npi2tree(expression).evalue() |
|||
result_label.config(text="Résultat: " + str(npi2tree(expression)) + " = " + str(resultat)) |
|||
except: |
|||
result_label.config(text=random.choice(déception)) |
|||
|
|||
root = tk.Tk() |
|||
root.title("Calculatrice rudimentaire") |
|||
|
|||
message_label = tk.Label(root, text="Le calcul doit être écrit en notation polonaise inversée") |
|||
message_label.pack() |
|||
|
|||
entry = tk.Entry(root, width=30) |
|||
entry.pack(pady=10) |
|||
|
|||
evaluate_button = tk.Button(root, text="Calculer", command=calculer) |
|||
evaluate_button.pack() |
|||
|
|||
result_label = tk.Label(root, text="") |
|||
result_label.pack(pady=10) |
|||
|
|||
root.mainloop() |
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
import tkinter as tk |
|||
from Pile import Pile_chaine |
|||
import random |
|||
|
|||
class Expression: |
|||
"""Implémentation d'une expression mathématique dans un arbre binaire""" |
|||
def __init__(self, valeur, gauche, droit): |
|||
"""Crée un arbre binaire vide""" |
|||
self.valeur = valeur |
|||
self.gauche = gauche |
|||
self.droit = droit |
|||
|
|||
def evalue(self): |
|||
"""Renvoie le résultat de l'expression mathématique d'un arbre binaire""" |
|||
if self.valeur == '+': |
|||
self.valeur = self.gauche.evalue() + self.droit.evalue() |
|||
elif self.valeur == '*': |
|||
self.valeur = self.gauche.evalue() * self.droit.evalue() |
|||
elif self.valeur == '/': |
|||
self.valeur = self.gauche.evalue() / self.droit.evalue() |
|||
elif self.valeur == '-': |
|||
self.valeur = self.gauche.evalue() - self.droit.evalue() |
|||
elif self.valeur == '^': |
|||
self.valeur = self.gauche.evalue() ** self.droit.evalue() |
|||
return self.valeur |
|||
|
|||
def __str__(self): |
|||
"""Renvoie l'expression mathématique d'un arbre binaire""" |
|||
if self.valeur != '+' and self.valeur != '*' and self.valeur != '/' and self.valeur != '-' and self.valeur != '^': |
|||
return self.valeur |
|||
else: |
|||
return "(" + str(self.gauche.__str__()) + str(self.valeur) + str(self.droit.__str__()) + ")" |
|||
|
|||
|
|||
|
|||
def npi2tree(ch): |
|||
"""Renvoie un arbre binaire contenant une expression mathématique |
|||
via une expression en notation polonaise inversée""" |
|||
ch = ch.split() |
|||
Expr = Pile_chaine() |
|||
for elmt in ch: |
|||
if elmt == '*' or elmt == '+' or elmt == '/' or elmt == '-' or elmt == '^': |
|||
exp = Expression(elmt, Expr.depiler(), Expr.depiler()) |
|||
Expr.empiler(exp) |
|||
else: |
|||
Expr.empiler(Expression(int(elmt), None, None)) |
|||
return Expr.sommet() |
|||
|
|||
|
|||
|
|||
|
|||
def calculer(): |
|||
"""Affiche l'expression ainsi que son résultat dans l'interface Tkinter""" |
|||
déception = ["Peut mieux faire.", |
|||
"Va t'entraîner, t'es nul...", |
|||
"Ah nan, tu pues vraiment.", |
|||
"Skill issue.", |
|||
"Je souhaite que tu arrêtes tout.", |
|||
"Il a eu 0/20", |
|||
"Apprends à lire.", |
|||
"Arrête de déconner.", |
|||
"Abandonne au pire.", |
|||
"42", |
|||
"Va faire un tour dehors." |
|||
] |
|||
expression = entry.get() |
|||
try: |
|||
resultat = npi2tree(expression).evalue() |
|||
result_label.config(text="Résultat: " + str(npi2tree(expression)) + " = " + str(resultat)) |
|||
except: |
|||
result_label.config(text=random.choice(déception)) |
|||
|
|||
root = tk.Tk() |
|||
root.title("Calculatrice rudimentaire") |
|||
|
|||
message_label = tk.Label(root, text="Le calcul doit être écrit en notation polonaise inversée") |
|||
message_label.pack() |
|||
|
|||
entry = tk.Entry(root, width=30) |
|||
entry.pack(pady=10) |
|||
|
|||
evaluate_button = tk.Button(root, text="Calculer", command=calculer) |
|||
evaluate_button.pack() |
|||
|
|||
result_label = tk.Label(root, text="") |
|||
result_label.pack(pady=10) |
|||
|
|||
root.mainloop() |
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
Loading…
Reference in new issue