diff options
Diffstat (limited to 'parentesis.activity/parserparentesis.py')
-rw-r--r-- | parentesis.activity/parserparentesis.py | 59 |
1 files changed, 48 insertions, 11 deletions
diff --git a/parentesis.activity/parserparentesis.py b/parentesis.activity/parserparentesis.py index aefe5fe..237ff41 100644 --- a/parentesis.activity/parserparentesis.py +++ b/parentesis.activity/parserparentesis.py @@ -2,7 +2,7 @@ import re import random import types -### Version 0.2 +### Version 0.3 ## modulo logico ## Definicion a manopla para formulas de nivel 1 @@ -52,12 +52,9 @@ def testearValidarStringNivelUno(): if errores.count(None): print "Hay errores de validacion!, verificar str1 .. str11" else: - print "TEST OK" + print " TEST OK" print "FIN DEL TEST!" -if __name__ == "__main__": - testearValidarStringNivelUno(); - #notar los parametros opcionales ---remover--- def generarListaNum(cant_num = CANT_NUM, rango_max = 9): """genera una lista de tamano cant_num, con numeros entre 2 y rango_max @@ -102,19 +99,54 @@ def alternarElementosLista(lst1, lst2): return lista -### TOTALMENTE INCOMPLETA +### TO DO : Discriminar segun niveles def generarCasos(cant_num = CANT_NUM, nivel = 1): ## TO DO! """Recibe un numero y devuelve una lista con todos los casos posibles y con los parentesis bien puestos""" listaNum = generarListaNum() listaOp = generarListaOp() - res = alternarElementosLista(listaNum, listaOp) - - if nivel == 1: - return None - return None + base = alternarElementosLista(listaNum, listaOp) + i1 = buscarProxNum(base, 0) + res = [] + while i1 < len(base) : ## mientras tenga sentido poner un '(' + lst = base[:] + lst.insert(i1, '(') + i2 = i1 + 6 # lo pongo en la posicion para insertar ')' + lst2 = lst[:] + lst2.insert(i2, ')') + + aux = listaToString(lst2) + if validarString(aux) != None: + res.append(aux) + + + while i2 < len(base): ## chequear si es menor o menor e igual TO DO + lst2 = lst[:] + i2 += 2 + lst2.insert(i2, ')') + aux = listaToString(lst2) + if validarString(aux) != None: + res.append(aux) + + i1 = buscarProxNum(base, i1 + 1) + + ## ( 1 * 2 + 3 * 4 + 5 * 6) + return res + ### Ejemplo de devolucion lista = ["(1*2+3)*4 + 5 * 6", "1*2+3 * (4+5)*6"] +def listaToString(lst): + """Transforma una lista de cualquier cosa en un string conformado por la concatenacion de str de cada elemento """ + texto = '' + for x in lst: + texto += str(x) + return texto + +def intToChar(o): + """Agarra un elemento, y si es un entero lo convierte a string, sino lo deja como esta""" + if types(o) == types.IntType: + return str(o) + def buscarProxNum(lista, start = 0): """Devuelve el proximo indice en la lista donde hay un numero @@ -141,4 +173,9 @@ listaNum = generarListaNum() listaOp = generarListaOp() res = alternarElementosLista(listaNum, listaOp) +if __name__ == "__main__": + testearValidarStringNivelUno() + lst = generarCasos() + for x in lst: + print x |