Browse Source

ajout de npi2tree et quelque modifications

master
manon 1 month ago
parent
commit
191eb5029f
  1. 28
      oui.py

28
oui.py

@ -1,6 +1,7 @@
# BELLYNCK Manon # BELLYNCK Manon
# GUILLAUMIN-TORRES Ambre # GUILLAUMIN-TORRES Ambre
# COVIN Clara # COVIN Clara
from Pile import Pile_lst as Pile
class Expression: class Expression:
"""représente une expression arithmétique sous forme d'un arbre""" """représente une expression arithmétique sous forme d'un arbre"""
@ -10,6 +11,7 @@ class Expression:
self.droit = fils_droit self.droit = fils_droit
def evalue (self) : def evalue (self) :
""" Permet de renvoyer la valeur de l’expression"""
if self.gauche == None and self.droit == None : if self.gauche == None and self.droit == None :
return self.val_racine return self.val_racine
@ -29,32 +31,35 @@ class Expression:
return gauche_val - droite_val return gauche_val - droite_val
elif self.val_racine == '*': elif self.val_racine == '*':
return gauche_val * droite_val return gauche_val * droite_val
elif self.val_racine == '/':
return gauche_val / droite_val
else : else :
raise ValueError ("Cette commande ne peut pas être effectuer") raise ValueError ("Cette commande ne peut pas être effectuer")
def __str__(self): def __str__(self):
"""Permet d'afficher une expression en ligne, représenter par un arbre"""
result = "" result = ""
if self.droit: if self.droit:
result = result + str(self.droit) result = result + str(self.droit)
result = result + str(self.val_racine) + "\n" """le "/n" c'est pour avoir une nouvelle ligne de l'arbre""" result = result + str(self.val_racine) + "\n" #le "/n" c'est pour avoir une nouvelle ligne de l'arbre
if self.gauche: if self.gauche:
result += str(self.gauche) result += str(self.gauche)
return result return result
def npi2tree(liste_npi): def npi2tree(lst):
"""Convertit une liste représentant une expression en notation polonaise inversée en un arbre d'expression.""" """Convertit une liste représentant une expression en notation polonaise inversée en un arbre d'expression."""
pille = [] pille = Pile ()
for element in liste_npi: for element in lst:
# Si c'est un opérateur (+, -, * ou /), on crée un nœud opérateur # Si c'est un opérateur (+, -, * ou /), on crée un nœud opérateur
if element in ('+', '-', '*', '/'): if element in ('+', '-', '*', '/'):
droit = pille.pop() droit = pille.depiler()
gauche = pille.pop() gauche = pille.depiler()
pille.append(Expression(element, gauche, droit)) # Créer un nouvel arbre et empiler pille.empiler(Expression(element, gauche, droit)) # Créer un nouvel arbre et empiler
else: else:
# Sinon, ça veut dire que c'est un nombre donc on le convertit et on l'empile. # Sinon, ça veut dire que c'est un nombre donc on le convertit et on l'empile.
pille.append(Expression(int(element), None, None)) pille.empiler(Expression(int(element), None, None))
return pille[0] # Retourne l'arbre complet return pille.depiler() # Retourne l'arbre complet
@ -75,3 +80,8 @@ assert exp.evalue() == 24
exp = Expression('-', Expression(45,None,None), Expression(3,None,None))#ça marche comme ça exp = Expression('-', Expression(45,None,None), Expression(3,None,None))#ça marche comme ça
assert exp.evalue() == 42 assert exp.evalue() == 42
liste_npi = ["6", "4", "3", "+", "*"] # Correspond à 6 * (4 + 3)
arbre = npi2tree(liste_npi) # Convertit la liste en un arbre
print(arbre.evalue()) # Affiche : 42
Loading…
Cancel
Save