Browse Source

les nombres négatifs fonctionnent mieux :D

master
bollet.c 7 months ago
parent
commit
6a6140e47a
  1. 17
      infixe.py
  2. 2
      test_interface.py

17
infixe.py

@ -7,8 +7,8 @@ def infixe2npi(liste_en_infixe):
pile_op = Pile() pile_op = Pile()
sortie = [] sortie = []
fonctions = ["sin","cos","tan","sqrt", "opp"] fonctions = ["sin","cos","tan","sqrt"]
operateurs = ["+", "-", "*", "/", "^"] operateurs = ["+", "-", "*", "/", "^","opp"]
priorite = {"sin":1, priorite = {"sin":1,
"opp":1, "opp":1,
"^":1, "^":1,
@ -28,7 +28,7 @@ def infixe2npi(liste_en_infixe):
print(40*"=") print(40*"=")
for index_token, token in enumerate(liste_en_infixe): for index_token, token in enumerate(liste_en_infixe):
print(20*"-") print(20*"-")
print("tour de boucle n°",index_token, "\npile_op \t",pile_op, "\nsortie \t", sortie) print("token", token)
#nombre #nombre
if estUnNombre(token): if estUnNombre(token):
if sortie != []: if sortie != []:
@ -36,17 +36,22 @@ def infixe2npi(liste_en_infixe):
#mul. implicite #mul. implicite
sortie.append(token) sortie.append(token)
sortie.append("*") sortie.append("*")
print("c'est un nombre et il est dans le cas pile_op.est_vide()")
else: else:
if last_token == pile_op.sommet(): print(last_token, pile_op.sommet())
if last_token == pile_op.sommet() or pile_op.sommet() == "opp":
#opération binaire normale ou fonction (avec avant elle ultimement une opération binaire) #opération binaire normale ou fonction (avec avant elle ultimement une opération binaire)
sortie.append(token) sortie.append(token)
print("c'est un nombre et il est dans le cas last_token == pile_op.sommet()")
if last_token == sortie[-1]: if last_token == sortie[-1]:
print("c'est un nombre et il est dans le cas last_token == sortie[-1]")
#on a affaire à une expression (chiffre (... 2), opération (... +), fonction (... fx)) qui est in fine un nombre #on a affaire à une expression (chiffre (... 2), opération (... +), fonction (... fx)) qui est in fine un nombre
cleanFx(pile_op, sortie) cleanFx(pile_op, sortie)
sortie.append(token) sortie.append(token)
sortie.append("*") sortie.append("*")
else: else:
sortie.append(token) sortie.append(token)
print("c'est un nombre et il est dans le cas sortie == []")
#fonction #fonction
elif token in fonctions: elif token in fonctions:
if sortie != []: if sortie != []:
@ -55,7 +60,7 @@ def infixe2npi(liste_en_infixe):
pile_op.empiler("*") pile_op.empiler("*")
pile_op.empiler(token) pile_op.empiler(token)
else: else:
if last_token == pile_op.sommet(): if last_token == pile_op.sommet() or pile_op.sommet() == "opp":
#composition de fonctions, ou fonction qui suit un opérateur #composition de fonctions, ou fonction qui suit un opérateur
pile_op.empiler(token) #normal pile_op.empiler(token) #normal
if last_token == sortie[-1]: if last_token == sortie[-1]:
@ -94,7 +99,7 @@ def infixe2npi(liste_en_infixe):
pile_op.empiler("*") pile_op.empiler("*")
pile_op.empiler(token) pile_op.empiler(token)
else: else:
if last_token == pile_op.sommet(): if last_token == pile_op.sommet() or pile_op.sommet() == "opp":
#parenthèse qui suit une fonction ou parenthèse normale #parenthèse qui suit une fonction ou parenthèse normale
pile_op.empiler(token) #normal pile_op.empiler(token) #normal
if last_token == sortie[-1]: if last_token == sortie[-1]:

2
test_interface.py

@ -242,7 +242,7 @@ class Interface(tk.Frame):
arbre_expr = npi2tree(lst_expr, self.etat_affichage) arbre_expr = npi2tree(lst_expr, self.etat_affichage)
self.affichage_expression.config(text = str(arbre_expr) + "=" + str(arbre_expr.evalue())) self.affichage_expression.config(text = str(arbre_expr) + "=" + str(arbre_expr.evalue()))
except IndexError: except IndexError:
messagebox.showerror("Erreur","Erreur de syntaxe") messagebox.showerror("Erreur","Erreur de syntaxe ici")
except ValueError: except ValueError:
#faire un truc plus beau #faire un truc plus beau
messagebox.showerror("Saisie invalide", "Vous n'avez pas entré un nombre, ou la fonction est inconnue.") messagebox.showerror("Saisie invalide", "Vous n'avez pas entré un nombre, ou la fonction est inconnue.")

Loading…
Cancel
Save