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