Browse Source

Transférer les fichiers vers ''

quoicouflop
stockfish mais pour les maths v4.2
master
DELPUI Loïc 10 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