Browse Source

Transférer les fichiers vers ''

quoicouflop
stockfish mais pour les maths v4.2
master
DELPUI Loïc 8 months ago
parent
commit
3f8d289a8b
  1. 91
      Pile.py
  2. 52
      Stockfish mais pour les maths.py
  3. 111
      listeChaine.py
  4. BIN
      stockfish mais pour les maths logo.png

91
Pile.py

@ -0,0 +1,91 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from listeChaine import ListeChaine
class Pile_lst:
"""Implémentation d'une pile par une liste."""
def __init__(self):
"""Crée une pile vide."""
self.__pile = []
def est_vide(self):
"""Indique si la pile est vide."""
return self.__pile == []
def empiler(self, valeur):
"""Empile la valeur."""
self.__pile.append(valeur)
def depiler(self):
"""Dépile le sommet de la pile et le renvoie."""
return self.__pile.pop()
def taille(self):
"""Renvoie la taille de la pile."""
return len(self.__pile)
def sommet(self):
"""Renvoie le sommet de la pile (sans le dépiler)."""
return self.__pile[-1]
def __str__(self):
s = "|"
for val in self.__pile:
s = str(val) + "->" + s
return s
class Pile_chaine:
"""Implémentation d'une pile par une liste chaînée."""
def __init__(self):
"""Crée une pile vide."""
self.__pile = ListeChaine()
self.__taille = 0
def est_vide(self):
"""Indique si la pile est vide."""
return self.__taille == 0
def empiler(self, valeur):
"""Empile la valeur."""
self.__pile.ajoute(valeur)
self.__taille += 1
def depiler(self):
"""Dépile le sommet de la pile et le renvoie."""
if self.est_vide():
raise IndexError("Impossible de dépiler une pile vide.")
valeur = self.__pile.tete()
self.__pile = self.__pile.queue()
self.__taille -= 1
return valeur
def taille(self):
"""Renvoie la taille de la pile."""
return self.__taille
def sommet(self):
"""Renvoie le sommet de la pile (sans le dépiler)."""
if self.est_vide():
raise IndexError("Une pile vide n'a pas de sommet.")
return self.__pile.tete()
def __str__(self):
return str(self.__pile) + "->|"
if __name__ == "__main__":
p = Pile_lst()
print(p.est_vide())
p.empiler('A')
p.empiler('B')
p.empiler('C')
print(p.est_vide())
print(p.sommet())
print(p)
print(p.taille())
print(p.depiler())
print(p.depiler())
print(p.depiler())
print(p.est_vide())

52
Stockfish mais pour les maths.py

@ -9,7 +9,7 @@ class Expression:
def evalue(self): def evalue(self):
dfs_post(self) dfs_post(self)
print(self.valeur) return self.valeur
def __str__(self): def __str__(self):
expstr = dfs_in(self, "") expstr = dfs_in(self, "")
@ -24,6 +24,12 @@ def dfs_post(a):
a.valeur = a.gauche.valeur + a.droit.valeur a.valeur = a.gauche.valeur + a.droit.valeur
if a.valeur == "*": if a.valeur == "*":
a.valeur = a.gauche.valeur * a.droit.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): def dfs_in(a, expstr):
if a == None: if a == None:
@ -41,33 +47,61 @@ def npi2tree(exptext):
exptext = exptext.split() exptext = exptext.split()
expression = Pile_chaine() expression = Pile_chaine()
for element in exptext: for element in exptext:
if element in ("+", "*"): if element in ("+ * - / ^".split()):
droit = expression.depiler()
gauche = expression.depiler() gauche = expression.depiler()
droit = expression.depiler()
expression.empiler(Expression(element, gauche, droit)) expression.empiler(Expression(element, gauche, droit))
else: else:
expression.empiler(Expression(int(element), None, None)) expression.empiler(Expression(int(element), None, None))
return expression.sommet() return expression.sommet()
def insert(text): def insert(text):
pass 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 = Tk()
window.title("Stockfish mais pour les maths") window.title("Stockfish mais pour les maths")
window.geometry(f"300x400+50+50") window.geometry(f"300x400+50+50")
canvas = Canvas(window, width = 300, height = 400, bg = "#abcdef") canvas = Canvas(window, width = 300, height = 400, bg = "#abcdef")
canvas.pack() canvas.pack()
lcdscreen = Entry(window, width = 35) lcdscreen = Label(window, width = 24)
lcdscreen.place(x=5, y=5) lcdscreen.place(x=5, y=5)
touches = "0 1 2 3 4 5 6 7 8 9 + * - / ^".split() touches = "0 1 2 3 4 5 6 7 8 9 + * - / ^".split()
txt = ""
currentnumber = ""
for touche in touches: for touche in touches:
button = Button(window, text = touche, command = lambda touche=touche: insert(touche), bg = "#fedcba") 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) button.place(x=touches.index(touche) // 3 * 50 + 10, y = touches.index(touche) % 3 * 50 + 100)
exp = "6 4 3 + *" 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))
exp = npi2tree(exp) 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()
print(exp) window.mainloop()
exp.evalue()

111
listeChaine.py

@ -0,0 +1,111 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Tue Sep 22 20:44:35 2020
@author: manu
"""
class Maillon:
"""Un maillon d'une liste chaînée."""
def __init__(self, valeur, suivant):
self.valeur = valeur
self.suivant = suivant
def __str__(self):
"""Renvoie une chane de caractères représentant le maillon."""
return str(self.valeur)
class ListeChaine:
"""Une liste chaînée."""
def __init__(self, tete=None):
"""Crée une liste vide, ou une liste dont la tete (un maillon)
est donnée."""
self.__tete = tete
def est_vide(self):
"""Indique si la liste est vide."""
return self.__tete is None
def tete(self):
"""Renvoie la valeur du premier élément de la liste."""
if self.est_vide():
raise IndexError("La liste vide n'a pas de tête")
return self.__tete.valeur
def queue(self):
"""Renvoie la queue de la liste."""
if self.est_vide():
raise IndexError("La liste vide n'a pas de queue")
return ListeChaine(self.__tete.suivant)
def ajoute(self, valeur):
"""ajoute `valeur` en tête de la liste."""
self.__tete = Maillon(valeur, self.__tete)
def __str__(self):
"""Renvoie une chaîne de caractères représentant la liste."""
maillon = self.__tete
s = ''
while maillon is not None:
s = s + str(maillon.valeur)
maillon = maillon.suivant
if maillon is not None:
s += '->'
return s
def __len__(self):
"""Renvoie la longueur de la liste."""
maillon = self.__tete
long = 0
while maillon is not None:
long = long + 1
maillon = maillon.suivant
return long
def __getitem__(self, n):
"""Renvoie l'élément d'indice n de la liste."""
maillon = self.__tete
i = 0
while i < n and maillon is not None:
i = i + 1
maillon = maillon.suivant
if maillon is None or n < 0:
raise IndexError("Indice non valide")
return maillon.valeur
def __add__(self, other):
"""Renvoie la liste correspondant à la concaténation des 2 listes."""
if self.est_vide():
return other
v = self.tete()
q = self.queue()
return ListeChaine(Maillon(v, (q + other).__tete))
def reverse(self):
"""Renvoie une liste correspondant à la liste renversée."""
res = ListeChaine()
maillon = self.__tete
while maillon is not None:
res.ajoute(maillon.valeur)
maillon = maillon.suivant
return res
if __name__ == "__main__":
lst = ListeChaine()
print(lst.est_vide())
lst.ajoute(306)
lst.ajoute(42)
lst.ajoute(205)
print(lst)
print(lst.est_vide())
print(lst[0])
print(lst[1])
print(len(lst))
lst2 = ListeChaine()
lst2.ajoute(18)
lst2.ajoute(45)
print(lst + lst2)

BIN
stockfish mais pour les maths logo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Loading…
Cancel
Save