1- #!/usr/bin/python
1+ #!/usr/bin/python3.6
22# -*- coding: utf-8 -*-
33import sys
44from sys import stdin
55sys .path .append (".." )
66from Pila import *
77
8+
89class Nodo :
910 def __init__ (self , valor ):
1011 self .valor = valor
@@ -22,9 +23,13 @@ def buscarOperador(self, caracter):
2223 return 0
2324
2425 def construirDiccionario (self ,indice ,valor ):
25- self .diccionario [indice ]= [valor ]
26+ self .diccionario [indice ]= [valor ]
2627 def getValorDiccionario (self ,indice ):
27- return self .diccionario .get (indice )
28+ return self .diccionario .get (indice )
29+
30+ def variablesDiccionario (self ):
31+ for i in self .diccionario :
32+ print ("variable: {} Valor: {}" .format (i ,str (self .getValorDiccionario (i ))))
2833
2934
3035 def evaluar (self , arbol ):
@@ -38,7 +43,7 @@ def evaluar(self, arbol):
3843 try :
3944 return self .evaluar (arbol .izquierda )/ self .evaluar (arbol .derecha )
4045 except ZeroDivisionError :
41- print ("No esta permitida la division entre cero" )
46+ print ("Error!! ---> Division entre cero" )
4247 sys .exit ()
4348 try :
4449 return float (arbol .valor )
@@ -51,36 +56,44 @@ def construirArbol(self, posfijo):
5156 posfijo .pop ()
5257 variable = posfijo .pop ()
5358 pilaOperador = Pila ()
59+ #Recorra todo el string
60+ for caracter in posfijo :
5461
55- for caracter in posfijo :
62+ # si NO es operador lo apila
5663 if self .buscarOperador (caracter )!= 1 :
5764 arbol = Nodo (caracter )
5865 pilaOperador .apilar (arbol )
5966
67+ # Operador
6068 else :
69+ # desapila dos nodos
6170 arbol = Nodo (caracter )
62- arbol1 = pilaOperador .desapilar ()
63- arbol2 = pilaOperador .desapilar ()
64- arbol .derecha = arbol1
65- arbol .izquierda = arbol2
66- pilaOperador .apilar (arbol )
71+ arbol1 = pilaOperador .desapilar ()
72+ arbol2 = pilaOperador .desapilar ()
73+
74+ # los convierte en hijos
75+ arbol .derecha = arbol1
76+ arbol .izquierda = arbol2
6777
68- #el ultimo elemento de la pila sera el arbol
78+ # Anade nuevo arbol a la pila
79+ pilaOperador .apilar (arbol )
80+
81+ # Al final el ultimo elemento de la pila sera el arbol
6982 arbol = pilaOperador .desapilar ()
7083 self .construirDiccionario (variable ,self .evaluar (arbol ))
7184 return self .evaluar (arbol )
7285
86+
7387def main ():
88+ obj = ArbolPosFijo ()
89+ while True :
90+ expresion = stdin .readline ().split ()
91+ if not expresion :
92+ break
93+ print (' ' .join (expresion ))
94+ print ("El valor resultante es: {} " .format (str (obj .construirArbol (expresion ))))
95+ obj .variablesDiccionario ()
7496
75- while True :
76- obj = ArbolPosFijo ()
77- expresion = stdin .readline ().split ()
78- if not expresion :
79- break
80- print "Valor resultante es: " + str (obj .construirArbol (expresion ))
81- print "diccionario valor A " + str (obj .getValorDiccionario ('A' ))
82- print "diccionario valor B " + str (obj .getValorDiccionario ('B' ))
83- print "diccionario valor C " + str (obj .getValorDiccionario ('C' ))
8497
8598if __name__ == '__main__' :
86- main ()
99+ main ()
0 commit comments