Stockfish (4000 ELO) mais pour les maths Veuillez admirer ma belle calculatrice
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

118 lines
3.7 KiB

7 months ago
# Aucune documentation ! Et noms de variables pas toujours très clairs :
# txt, text, a, currentnumber (qui ne semble pas vraiment être un nombre), ...
# Attribut valeur peu clair : tu mélanges la valeur de la racine et la valeur de
# l'expression.
# Les fonctions dfs devraient être des méthodes, et sont bien "bordéliques" !
# Quel est l'intérêt de "+ * - / ^".split() par rapport à "+*-/^" ????
# L'utilisation des boutons est contre-intuitive : pourquoi insérer les choses
# au début ??
# Note : 7 / 10
from Pile import Pile_chaine
from tkinter import *
class Expression:
def __init__(self, valeur, gauche, droit):
self.valeur = valeur
self.gauche = gauche
self.droit = droit
def evalue(self):
dfs_post(self)
return self.valeur
def __str__(self):
expstr = dfs_in(self, "")
return expstr
def dfs_post(a):
if a == None:
return
dfs_post(a.gauche)
dfs_post(a.droit)
if a.valeur == "+":
a.valeur = a.gauche.valeur + a.droit.valeur
if a.valeur == "*":
a.valeur = a.gauche.valeur * a.droit.valeur
if a.valeur == "-":
a.valeur = a.gauche.valeur - a.droit.valeur
if a.valeur == "/":
a.valeur = a.gauche.valeur / a.droit.valeur
if a.valeur == "^":
a.valeur = a.gauche.valeur ** a.droit.valeur
def dfs_in(a, expstr):
if a == None:
return expstr
if a.gauche is not None or a.droit is not None:
expstr += "("
expstr = dfs_in(a.gauche, expstr)
expstr += str(a.valeur)
expstr = dfs_in(a.droit, expstr)
if a.gauche is not None or a.droit is not None:
expstr += ")"
return expstr
def npi2tree(exptext):
exptext = exptext.split()
expression = Pile_chaine()
for element in exptext:
if element in ("+ * - / ^".split()):
gauche = expression.depiler()
droit = expression.depiler()
expression.empiler(Expression(element, gauche, droit))
else:
expression.empiler(Expression(int(element), None, None))
return expression.sommet()
def insert(text):
global txt, currentnumber
if text in ("+ * - / ^".split()):
txt = currentnumber + " " + txt + " " + text
currentnumber = ""
else:
currentnumber = currentnumber + text
lcdscreen.config(text = currentnumber + " " + txt)
def cls():
global txt, currentnumber
txt = ""
currentnumber = ""
lcdscreen.config(text = txt)
def calc():
global txt, currentnumber
txt = currentnumber + " " + txt
result = npi2tree(txt)
lcdscreen.config(text = (str(result), "=", result.evalue()))
window = Tk()
window.title("Stockfish mais pour les maths")
window.geometry(f"300x400+50+50")
canvas = Canvas(window, width = 300, height = 400, bg = "#abcdef")
canvas.pack()
lcdscreen = Label(window, width = 24)
lcdscreen.place(x=5, y=5)
touches = "0 1 2 3 4 5 6 7 8 9 + * - / ^".split()
txt = ""
currentnumber = ""
for touche in touches:
button = Button(window, text = touche, command = lambda touche=touche: insert(touche), bg = "#fedcba")
button.place(x=touches.index(touche) // 3 * 50 + 10, y = touches.index(touche) % 3 * 50 + 100)
clsbutton = Button(window, text = "Reset Stockfish but for maths.py's current processus", command = cls, bg = "#abdcba", font=("Stockfish font, but it doesn't exist :(", 7))
clsbutton.place(x=10, y=250)
calcbutton = Button(window, text = "Finalize Stockfish processus", command = calc, bg = "#f42205")
calcbutton.place(x=10, y=290)
logo = PhotoImage(file="stockfish mais pour les maths logo.png")
logo = logo.subsample(10)
canvas.create_image(200, 0, anchor=NW, image=logo)
canvas.pack()
window.mainloop()