activité calculatrice
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

65 lines
2.2 KiB

# 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()