Programación Web y Scripting > Python

 Factorizando Cadenas

(1/1)

Ariel Rodríguez:
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: ---#!/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



--- Fin del código ---

main.py

--- Código: ---#!/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

--- Fin del código ---

arielb:
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,

Ariel Rodríguez:
Muchas Gracias, no conocía sobre ese tema.

Leeré un poco.


 :gracias:

Ariel Rodríguez:
Hola princesse, disculpa mi ignorancia pero a que te refieres con xl, xu??


Bueno referente al código allí lo tienes.


Saludos

arielb:
No le hagas caso, eso era spam

Navegación

[0] Índice de Mensajes

Ir a la versión completa