SoloCodigo
Programación Web y Scripting => Python => Mensaje iniciado por: Ariel Rodríguez en Lunes 12 de Noviembre de 2012, 23:16
-
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
#!/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
#!/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
-
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 (http://es.wikipedia.org/wiki/Prueba_unitaria).
y luego acá
http://lablenguajesdaniela.blogspot.com/2011/11/como-correr-pruebas-unitarias-en-python.html (http://lablenguajesdaniela.blogspot.com/2011/11/como-correr-pruebas-unitarias-en-python.html)
http://mundogeek.net/archivos/2008/09/17/pruebas-en-python/ (http://mundogeek.net/archivos/2008/09/17/pruebas-en-python)
Saludos,
-
Muchas Gracias, no conocía sobre ese tema.
Leeré un poco.
:gracias:
-
Hola princesse, disculpa mi ignorancia pero a que te refieres con xl, xu??
Bueno referente al código allí lo tienes.
Saludos
-
No le hagas caso, eso era spam