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.

49 lines
1.5 KiB

#from File import File_chaine as File
#from Pile import Pile_chaine as Pile
class Expression:
def __init__(self, valeur, gauche=None, droite=None):
self.valeur = valeur
self.gauche = gauche
self.droite = droite
def evalue(self):
if isinstance(self.valeur, (int, float)):
return self.valeur
operateurs = {
'+': lambda x, y: x + y,
'*': lambda x, y: x * y,
'/': lambda x, y: x / y if y != 0 else float('inf'),
'-': lambda x, y: x - y
}
return operateurs[self.valeur](self.gauche.evalue(), self.droite.evalue())
class Calculette:
def __init__(self):
pass
def npi2tree(self, lst):
pile = []
for element in lst:
if element in ['+', '-', '*', '/']:
droite = pile.pop()
gauche = pile.pop()
pile.append(Expression(element, gauche, droite))
else:
try:
valeur = int(element) if element.isdigit() else float(element)
pile.append(Expression(valeur))
except ValueError:
return None
return pile[0]
def calculer(self, expression):
try:
elements = expression.split()
arbre = self.npi2tree(elements)
if arbre:
return arbre.evalue()
return "Expression invalide"
except Exception as e:
return str(e)