manu D
3 years ago
commit
27ee0e3ff3
1 changed files with 65 additions and 0 deletions
@ -0,0 +1,65 @@ |
|||
# Note: 12/20 |
|||
# impossible à tester : pas de programme principal et pile non défini |
|||
# Pas d'interface graphique |
|||
# Le choix fait pour l'évaluation n'est pas très logique : normalement on fait |
|||
# plutôt gauche op droit que droit op gauche. Mais il faudrait modifier npi2tree |
|||
# pour dépiler d'abord le fils droit puis le fils gauche. |
|||
# Incohérence sur la division : il faudrait utiliser // puisque tu ne gères que les entiers |
|||
# La gestions des parenthèses dans __str__ va poser problème si un nœud n'a qu'un fils |
|||
# Dans npi2tree, quel sens donnes-tu à if valeur or ope ????? |
|||
|
|||
class Expression(): |
|||
def __init__(self,valeur,g,d): |
|||
""""initialisation de la racine et de ses deux fils(gauche et droit)""" |
|||
self.valeur = valeur |
|||
self.g = g |
|||
self.d = d |
|||
|
|||
def evalue(self): |
|||
""""Mise en place des différents moyens de calculs de manière récursive""" |
|||
|
|||
ope = ["+","-","*","**","/"] |
|||
|
|||
if self.g is None and self.d is None: |
|||
return int(self.valeur) |
|||
if self.valeur in ope: |
|||
if self.valeur == "+": |
|||
return self.d.evalue() + self.g.evalue() |
|||
elif self.valeur == "-": |
|||
return self.d.evalue() - self.g.evalue() |
|||
elif self.valeur == "*": |
|||
return self.d.evalue() * self.g.evalue() |
|||
elif self.valeur == "**": |
|||
return self.d.evalue() ** self.g.evalue() |
|||
elif self.valeur == "/": |
|||
return self.d.evalue() / self.g.evalue() |
|||
|
|||
|
|||
def __str__(self): |
|||
"""Fonction qui permet d'afficher l'expression""" |
|||
|
|||
s = "" |
|||
if self.g is not None: |
|||
s = '(' + s + self.g.__str__() |
|||
s = s + str(self.valeur) |
|||
if self.d is not None: |
|||
s = s + self.d.__str__() + ')' |
|||
return s |
|||
|
|||
def npi2tree(lst): |
|||
"""Fonction prenant en paramètre une liste correspondant à l'expression en notation polonaise inversée""" |
|||
|
|||
Pi = pile() |
|||
ope = ["+","-","*","**","/"] |
|||
|
|||
for valeur in lst : |
|||
if valeur or ope : |
|||
Pi.empiler(Expression(valeur,Pi.depiler(),Pi.depiler())) |
|||
else: |
|||
Pi.empiler(Expression(int(valeur),None,None)) |
|||
return Pi.sommet() |
|||
|
|||
|
|||
|
|||
|
|||
|
Loading…
Reference in new issue