diff --git a/COMMIT_EDITMSG b/COMMIT_EDITMSG new file mode 100644 index 0000000..08ee3cb --- /dev/null +++ b/COMMIT_EDITMSG @@ -0,0 +1 @@ +Début du projet calculatrice diff --git a/calculatrice.py b/calculatrice.py index 59255b0..2f2a70d 100644 --- a/calculatrice.py +++ b/calculatrice.py @@ -1,5 +1,5 @@ from Pile import Pile_lst -import tkinter as tk +from tkinter import * class Expression: def __init__(self, valeur, gauche, droite): @@ -8,27 +8,77 @@ class Expression: self.droite = droite def evalue(self): + """Renvoie la valeur de l'expression""" if self.valeur == '+': return self.gauche.evalue() + self.droite.evalue() - if self.valeur == '*': + elif self.valeur == '*': 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: return self.valeur def __str__(self): - if self.valeur != '+' and self.valeur != '*': + if self.valeur != '+' and self.valeur != '*' and self.valeur != '-'and 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__()) + ")" 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() lst_npi = exp.split() 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()) pile_npi.empiler(exp_npi) else: - pile_npi.empiler(int(element)) + exp_feuille = Expression(int(element), None, None) + pile_npi.empiler(exp_feuille) 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() + + + + + diff --git a/config b/config new file mode 100644 index 0000000..7f06be1 --- /dev/null +++ b/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 diff --git a/listeChaine.py b/listeChaine.py new file mode 100644 index 0000000..7d47873 --- /dev/null +++ b/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)