Skip to content

Commit e0d0bf9

Browse files
author
MauricioAcosta
committed
Ejercicio de expresiones aritmeticas Terminado
1 parent d2b4d45 commit e0d0bf9

File tree

3 files changed

+35
-21
lines changed

3 files changed

+35
-21
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,3 +101,4 @@ ENV/
101101
.mypy_cache/
102102
.cola.pyc
103103
.Pila.pyc
104+
arboles/.expresiones.py.swp

arboles/.expresiones.py.swp

60 KB
Binary file not shown.

arboles/expresiones.py

Lines changed: 34 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
1-
#!/usr/bin/python
1+
#!/usr/bin/python3.6
22
# -*- coding: utf-8 -*-
33
import sys
44
from sys import stdin
55
sys.path.append("..")
66
from Pila import *
77

8+
89
class 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+
7387
def 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

8598
if __name__ == '__main__':
86-
main()
99+
main()

0 commit comments

Comments
 (0)