Buenas, tengo que hacer el siguiente script,:
Se pide que diseñe un programa que lea un texto (sin acentos ni otros caracter caracteres que no sean letras) y lo vuelva a escribir en formato SMS. Por ejemplo, si el usuario del programa escribe:
Hola que tal por donde estas
Debería escribir:
ola que tl x donde estas
A tal efecto, considera los siguientes cambios a hacer sobre la cadena (en el orden indicado):
• En las palabras que empiezan por H, suprimir la h
• Las silabas "que" o "qui" cambiarlas por "que" o "ki".
• Las silabas "por" cambiarlas por "x".
• En los monosilabos de una sola vocal y como minimo 2 letras, suprimir la vocal. Considere que un
monosilabo es un término que solo tiene una vocal. Naturalmente las vocales de "que" o "ki" no se han de sustituir.
Hasta el momento lo he hecho todo, pero la ultima parte de suprimir la vocal en los monosilabos, no se como hacerlo. Tengo esto de momento:
import string
def sin_h(s):
if s[0] in 'Hh':
s1= s[1:]
else:
s1=''
s1=s1.replace(' H'," ")
s1=s1.replace(' h',' ')
rep_q(s1)
def rep_q(s):
s=s.replace('Que','que')
s=s.replace('que','que')
s=s.replace('Qui','ki')
s=s.replace('qui','ki')
rep_x(s)
def rep_x(t):
t=t.replace('Per','x')
t=t.replace('per','x')
sin_voc(t)
def sin_voc(s):
...
...
txt=raw_input('Escribe un texto: ')
sin_h(txt)
Como veis, me falta la ultima funcion de sin vocales, donde solo hay q eliminar la vocal de los monosilabos, no de todas las palabras... No se como hacerlo..
Si alguien me puede ayudar...
Gracias :)
hola:
lo más simple que se me ocurre es
1) pues básicamente deberías verificar el largo de cada palabra que forme el texto
2) si tiene dos carácteres buscar la posición de la vocal (0-1) y escribir la palabra con el otro carácter.ej: de e=1 print palabra[0] (por regla general la mayoria de las palabras a abreviar es la segunda letra.
3) si es de tres lo mismo o mejor aún sólo escribir el primer y último carácter.
ej: tal = print (palabra[0]+palabra[2] = tl
es obvio que la mayoría de los monosílabos la vocal es la intermedia.
espero que te oriente.
Vale, y como voy verificando cada palabra?
Se me ocurrió algo masomenos así:
import re
cadena="hola que tal soy del norte"
for palabra in cadena.split(" "):
if len(palabra)==3:
l1=re.match("[^aeiou]", palabra[-1])
l2=re.match("[^aeiou]", palabra[0])
l3=re.match("[aeiou]", palabra[1])
if l1 and l2 and l3:
print (palabra)
print palabra[0]+palabra[-1]
Espero te sirva de ayuda. aunque no sea la forma mas eficiente. funciona para monosílabas de largo 3.
saludos
usé una creación de lista con la división de la cadena por el delimitador espacio
lista=mensaje.split(" ")
después trabajas como con cualquier lista.
Yo haría lo siguiente y por favor corregir si estoy hablando algo nada que ver...
Teóricamente sería:
palabras = ["que", "hola", "saludos"]
replaces = ["k", "ola", "salu2"]
frase = "Hola que tal, dale saludos a tu familia!"
for i, j in zip(palabras, replaces):
frase = frase.replace(i, j)
Y haría los reemplazos pertinentes en pocas líneas, "que" -> k ; hola -> ola ; saludos -> salu2
Saludos Pythoneros ! :D
0x5d: no está mal en ese ejemplo pero... si la frase es otra?
solo reemplazarías esas tres palabras y el objetivo es cualquier palabra que cumpla esas determinadas condiciones! no reemplazas palabras que empiecen por h! solo hola, hablar u hoy quedan fuera en tu ejemplo. Rescato que si habría que reemplazar "dos" x 2 ejemplo: dormidos= dormi2
Ah pues no había entendido esa parte tuya ... Yo creo que nada más te queda usar "import re" y mediante las regex ir verificando e ir reemplazando según el caso...
Saludos!