Browse Source

terminé

master
GUILLAUME Baptiste 10 months ago
parent
commit
2021b56e2b
  1. 1
      COMMIT_EDITMSG
  2. 62
      calculatrice.py
  3. 13
      config
  4. 110
      listeChaine.py

1
COMMIT_EDITMSG

@ -0,0 +1 @@
Début du projet calculatrice

62
calculatrice.py

@ -1,5 +1,5 @@
from Pile import Pile_lst from Pile import Pile_lst
import tkinter as tk from tkinter import *
class Expression: class Expression:
def __init__(self, valeur, gauche, droite): def __init__(self, valeur, gauche, droite):
@ -8,27 +8,77 @@ class Expression:
self.droite = droite self.droite = droite
def evalue(self): def evalue(self):
"""Renvoie la valeur de l'expression"""
if self.valeur == '+': if self.valeur == '+':
return self.gauche.evalue() + self.droite.evalue() return self.gauche.evalue() + self.droite.evalue()
if self.valeur == '*': elif self.valeur == '*':
return self.gauche.evalue() * self.droite.evalue() return self.gauche.evalue() * self.droite.evalue()
elif self.valeur == '-':
return self.gauche.evalue() - self.droite.evalue()
elif self.valeur == '/':
return self.gauche.evalue() / self.droite.evalue()
else: else:
return self.valeur return self.valeur
def __str__(self): def __str__(self):
if self.valeur != '+' and self.valeur != '*': if self.valeur != '+' and self.valeur != '*' and self.valeur != '-'and self.valeur != '/':
return self.valeur return self.valeur
if self.valeur == '+' or self.valeur == '*': elif self.valeur == '+' or self.valeur == '*' or self.valeur == '-' or self.valeur == '/':
return "(" + str(self.gauche.__str__()) + str(self.valeur) + str(self.droite.__str__()) + ")" return "(" + str(self.gauche.__str__()) + str(self.valeur) + str(self.droite.__str__()) + ")"
def npi2tree(exp): def npi2tree(exp):
"""Prends en paramètre une ... correspondant à l'expression en notation polonaise inversée et renvoie l'arbre correspondant"""
pile_npi = Pile_lst() pile_npi = Pile_lst()
lst_npi = exp.split() lst_npi = exp.split()
for element in lst_npi: for element in lst_npi:
if element == '+' or element == '*': if element == '+' or element == '*' or element == '-' or element == '/':
exp_npi = Expression(element, pile_npi.depiler(), pile_npi.depiler()) exp_npi = Expression(element, pile_npi.depiler(), pile_npi.depiler())
pile_npi.empiler(exp_npi) pile_npi.empiler(exp_npi)
else: else:
pile_npi.empiler(int(element)) exp_feuille = Expression(int(element), None, None)
pile_npi.empiler(exp_feuille)
return pile_npi.sommet() return pile_npi.sommet()
#-------------------------------------------
#Tkinter
#-------------------------------------------
fenetre = Tk()
#def enregistrer():
# expr = zonetexte.get()
# affichage = npi2tree(expr)
# texte2.configure(text=affichage)
def resultat():
expr = zonetexte.get()
res = npi2tree(expr).evalue()
texte2.configure(text=res)
affichage = npi2tree(expr)
texte4.configure(text=affichage)
zonetexte = Entry(fenetre, width=30)
zonetexte.pack()
texte1 = Label(fenetre,text="Résultat:")
texte1.pack()
texte2 = Label(fenetre,text="???")
texte2.pack()
texte3 = Label(fenetre,text="Expression:")
texte3.pack()
texte4 = Label(fenetre,text="???")
texte4.pack()
enregistrer=Button(fenetre, text="Résultat", command=resultat)
enregistrer.pack()

13
config

@ -0,0 +1,13 @@
[core]
repositoryformatversion = 0
filemode = false
bare = false
logallrefupdates = true
symlinks = false
ignorecase = true
[remote "origin"]
url = https://paul-constans.ac-clermont.fr/gitea/guillaume.b/calculatrice_Baptiste.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master

110
listeChaine.py

@ -0,0 +1,110 @@
#!/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)
Loading…
Cancel
Save