From d45fabf9eec4c609c8392d9d654a72d26419ee8d Mon Sep 17 00:00:00 2001 From: Cristian García Date: Fri, 04 Oct 2013 11:12:53 +0000 Subject: Cambiando la funcion a llamar cuando se presentan operaciones simples --- diff --git a/Calculadora.py b/Calculadora.py index 092d242..72589bf 100644 --- a/Calculadora.py +++ b/Calculadora.py @@ -56,7 +56,7 @@ class Calculadora(): if operacion: if not 'x' in operacion.lower(): - print self.reducir_polinomios(operacion) + print self.operar(operacion) else: if '=' in operacion: @@ -102,6 +102,9 @@ class Calculadora(): if ' ' in valor: valor = valor.replace(' ', '') + if valor[0] == '/' or valor[0] == '*': + valor = valor[1:] + elif type(valor) == list and len(valor) >= 1: while valor[0] in OPERACIONES: valor.remove(valor[0]) @@ -115,73 +118,81 @@ class Calculadora(): return valor - def reducir_polinomios(self, operacion): + def reducir_polinomios(self, operacion, diccionario=None): """ Realizando la reducción de polinomios. """ - if operacion[0] != '+' and operacion[0] != '-': - signo = '+' - - else: - signo = '-' + if not diccionario: + if operacion[0] != '+' and operacion[0] != '-': + signo = '+' + + else: + signo = '-' - operacion = self.limpiar_valor(operacion) - operacion = signo + operacion - diccionario = {} + operacion = self.limpiar_valor(operacion) + operacion = signo + operacion + diccionario = {} - if '+' in operacion: - operacion = operacion.replace('+', ' +') + if '+' in operacion: + operacion = operacion.replace('+', ' +') - if '-' in operacion: - operacion = operacion.replace('-', ' -') + if '-' in operacion: + operacion = operacion.replace('-', ' -') - lista = operacion.split(' ') - lista = self.limpiar_valor(lista) + if '*' in operacion: + operacion = operacion.replace('*', ' *') + + if '/' in operacion: + operacion = operacion.replace('/', ' /') - for x in lista: - if x[0] != '-' and x[0] != '+': - _numero = lista.index(x) - lista.remove(x) - lista.insert(_numero, '+' + x) + lista = operacion.split(' ') + lista = self.limpiar_valor(lista) - if 'x' in x and not 'e' in x: - if not diccionario.get(1): - diccionario[1] = [] + for x in lista: + if x[0] != '-' and x[0] != '+' and x[0] != '*' and x[0] != '/': + _numero = lista.index(x) + lista.remove(x) + lista.insert(_numero, '+' + x) - diccionario[1].append(x) + if 'x' in x and not 'e' in x: + if not diccionario.get(1): + diccionario[1] = [] - elif 'x' in x and 'e' in x: - numero = str(int(x.split('e')[1])) + diccionario[1].append(x) - if not diccionario.get(numero): - diccionario[numero] = [] + elif 'x' in x and 'e' in x: + numero = str(int(x.split('e')[1])) - diccionario[numero].append(x) + if not diccionario.get(numero): + diccionario[numero] = [] - elif not 'x' in x and 'e' in x: - x = str(int(x.split('e')[0]) ** int(x.split('e')[1])) + diccionario[numero].append(x) - if not diccionario.get(0): - diccionario[0] = [] + elif not 'x' in x and 'e' in x: + x = str(int(x.split('e')[0]) ** int(x.split('e')[1])) - diccionario[0].append(x) + if not diccionario.get(0): + diccionario[0] = [] - else: # not 'x' in x and not 'e' in x: - if not diccionario.get(0): - diccionario[0] = [] + diccionario[0].append(x) - diccionario[0].append(str(x)) + else: # not 'x' in x and not 'e' in x: + if not diccionario.get(0): + diccionario[0] = [] - if x == '-x' or x == '+x': - numero = lista.index(x) - lista.remove(x) - lista.insert(numero, x[0] + '1x') + diccionario[0].append(str(x)) + + if x == '-x' or x == '+x': + numero = lista.index(x) + lista.remove(x) + lista.insert(numero, x[0] + '1x') for x in diccionario: resultado = '' lista = diccionario[x] + print lista for valor in lista: if 'x' in valor and not 'e' in valor: @@ -197,6 +208,56 @@ class Calculadora(): _numero = lista.index(valor) lista.remove(valor) lista.insert(_numero, numero + 'x') + + if (valor[0] == '*' or valor[0] == '/') and 'x' in valor and 'x' in lista[lista.index(valor) - 1]: + resultado = '' + valor1 = valor + valor2 = lista[lista.index(valor) - 1] + lista.remove(valor) + lista.remove(valor2) + _numero1 = valor1.split('x')[0] + _numero2 = valor2.split('x')[0] + + if 'e' in valor1: + numero1 = valor1.split('e')[1] + + else: + numero1 = '1' + + if 'e' in valor2: + numero2 = valor2.split('e')[1] + + else: + numero2 = '1' + + if valor[0] == '*': + operacion = '+' + + elif operacion == '/': + operacion = '-' + + cuenta = self.limpiar_valor(numero1 + operacion + numero2) + exponente = str(eval(cuenta)) + print exponente + + if exponente == '1': + final = 'x' + + elif int(exponente) > 1 or int(exponente) < 1: + final = 'xe' + exponente + + resultado = self.limpiar_valor(_numero1 + valor[0] + _numero2 + final) + #print resultado + #resultado = str(eval(resultado)) + + if not diccionario.get(int(exponente)): + diccionario[int(exponente)] = [] + + diccionario[int(exponente)].append(resultado) + + if valor <= x: + print diccionario + self.reducir_polinomios(diccionario=diccionario) elif not 'x' in valor and 'e' in valor: numero = str(int(valor.split('e')[0] ** valor.split('e')[1])) @@ -208,6 +269,7 @@ class Calculadora(): numero = valor resultado += str(numero) + resultado = self.limpiar_valor(resultado) if x == 0: if resultado != '-': -- cgit v0.9.1