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