• Domingo 17 de Noviembre de 2024, 16:49

Autor Tema:  Factorizando Cadenas  (Leído 3017 veces)

Ariel Rodríguez

  • Nuevo Miembro
  • *
  • Mensajes: 8
  • Nacionalidad: pa
  • "Si lo puedes imaginar lo puedes crear"
    • Ver Perfil
Factorizando Cadenas
« en: Lunes 12 de Noviembre de 2012, 23:16 »
0
Hola, Mi nombre es Ariel y soy nuevo en el Foro.
No soy un gran programador en python, pero hago mi esfuerzo.
Estuve alrededor de un mes haciendo este código. Lo que hace es tomar una cadena y factorizarla por el factor común.

La función toma como parametros de entrada:
s: la cadena a factorizar.
sp: separador entre palabras.
so: separador entre oraciones.

Ejemplo:
#########################
Factorizador de Cadena
#########################
Cadena a factorizar
a, b, c, d + a, b, d, f + x, w + b, z + c, x + w
#########################
Nueva Cadena Factorizada
b(d(a(c + f)) + z) + x(c + w) + w


Ahora mismo funciona, pero no sé si me dé problema con otras.

¿Me puede dar alguna recomendación para mejorar el código?

Saludos

fac_string.py
Código: [Seleccionar]
#!/usr/bin/env python

# -*- coding: utf-8 -*-

###########################
# Autor: Ariel Rodriguez
# fecha: 07/11/2012
# Factorizar string
###########################


def fact_str(s, sp, so):
    """fact_str(string, sp, so) factoriza los valores de la lista y retorna un string con la factorizacion."""
   
    facto=[]
    no_facto=[]
    ss = s.split(" "+so+" ")
    ss.sort()
    fc, cadena_nueva = fact_comun(ss,sp)
    if [''] in cadena_nueva:
    cadena_nueva.remove([''])
   
    if fc:
for si in cadena_nueva:
            if fc[1] in si:
#factorizo el texto
ff = si
ff.remove(fc[1])
#agrego el factor
if ff:
facto.append(', '.join(ff))
else:
facto.append('1')


    else:

no_facto.append(', '.join(si))
        if facto:
    if no_facto:
s_no = ' + '
s_no_facto = ' + '.join(no_facto)
    else:
s_no_facto = ''
s_no = ''
   
            return fc[1] + '(' + fact_str(' + '.join(facto),",","+") + ')' + s_no + fact_str(s_no_facto,",","+")
    else:
n_cad = []
for n in cadena_nueva:
    n_cad.append(', '.join(n))
return ' + '.join(n_cad)


def fact_comun(s,sp):
    claves = {}
    lst_claves=[]
    s_nueva=[]
    for si in s:
si = si.split(sp+" ")
s_nueva.append(si)
for x in si:
        claves[x] = claves.get(x, 0) + 1
   
   
    for x in claves:
lst_claves.append((claves[x],x))
   
    lst_claves.sort()
    del claves
   
    fc = lst_claves[-1]
    menor = fc[0]
    for i in lst_claves:
if i[0]<menor:
    menor = i[0]
    if fc[0]> menor:
    return fc, s_nueva
    else:
return None, s_nueva



main.py
Código: [Seleccionar]
#!/usr/bin/env python
# -*- coding: utf-8 -*-

from fact_string import fact_str

cadena = "a, b, c, d + a, b, d, f + x, w + b, z + c, x + w"
print "#"*25
print "Factorizador de Cadena"
print "#"*25
print "Cadena a factorizar"
print cadena
nueva_c = fact_str(cadena,",","+")
print "#"*25
print "Nueva Cadena Factorizada"
print nueva_c
Ariel R.

arielb

  • Moderador
  • ******
  • Mensajes: 771
  • Nacionalidad: pa
    • Ver Perfil
    • http://coder-pa.blogspot.com
Re:Factorizando Cadenas
« Respuesta #1 en: Martes 13 de Noviembre de 2012, 15:35 »
0
Hola, bienvenido al foro.
Existe un concepto llamado pruebas unitarias, que no solo se aplica a python, puedes intentar realizando pruebas unitarias y te ayudará a verificar lo que buscas.

Empieza por leer acá http://es.wikipedia.org/wiki/Prueba_unitaria.
y luego acá
http://lablenguajesdaniela.blogspot.com/2011/11/como-correr-pruebas-unitarias-en-python.html

http://mundogeek.net/archivos/2008/09/17/pruebas-en-python/

Saludos,
« última modificación: Martes 13 de Noviembre de 2012, 15:39 por arielb »
"Porque de tal manera amó Dios al mundo que dio a su hijo unigénito para que todo aquél que en él crea no se pierda mas tenga vida eterna"
Juan 3:16

http://coder-pa.blogspot.com

Ariel Rodríguez

  • Nuevo Miembro
  • *
  • Mensajes: 8
  • Nacionalidad: pa
  • "Si lo puedes imaginar lo puedes crear"
    • Ver Perfil
Re:Factorizando Cadenas
« Respuesta #2 en: Martes 13 de Noviembre de 2012, 16:14 »
0
Muchas Gracias, no conocía sobre ese tema.

Leeré un poco.


 :gracias:
Ariel R.

Ariel Rodríguez

  • Nuevo Miembro
  • *
  • Mensajes: 8
  • Nacionalidad: pa
  • "Si lo puedes imaginar lo puedes crear"
    • Ver Perfil
Re:Factorizando Cadenas
« Respuesta #3 en: Miércoles 14 de Noviembre de 2012, 14:47 »
0
Hola princesse, disculpa mi ignorancia pero a que te refieres con xl, xu??


Bueno referente al código allí lo tienes.


Saludos
Ariel R.

arielb

  • Moderador
  • ******
  • Mensajes: 771
  • Nacionalidad: pa
    • Ver Perfil
    • http://coder-pa.blogspot.com
Re:Factorizando Cadenas
« Respuesta #4 en: Miércoles 14 de Noviembre de 2012, 20:28 »
0
No le hagas caso, eso era spam
"Porque de tal manera amó Dios al mundo que dio a su hijo unigénito para que todo aquél que en él crea no se pierda mas tenga vida eterna"
Juan 3:16

http://coder-pa.blogspot.com