Texto que se transforma

6 ejercicios para transformar texto en Python

Escribe funciones que puedas comprobar. Cada ejercicio trae un contrato claro, pruebas con assert, una pista y una solución explicada que abres cuando quieras.

6 ejercicios progresivosPistas y solucionesPruebas con assert

Cómo practicar con estos ejercicios de strings

Necesitas conocer los strings, sus métodos y el bucle for. Algunos ejercicios usan slicing.

  1. Lee el contrato: qué recibe la función y qué debe devolver.
  2. Escribe la función y añade debajo las comprobaciones.
  3. Ejecuta ambas partes. Un assert que pasa no imprime nada; si falla, aparece AssertionError.
  4. Antes de abrir la solución, prueba un texto vacío y otro con espacios sobrantes, que son los casos más traicioneros.
Las funciones devuelven, no imprimen.

Cada solución usa return. Mostrar un valor con print no sustituye al resultado que espera recibir quien llama a la función.

Todas las soluciones incluyen sus pruebas y puedes abrirlas en el editor con el botón «Probar en el editor». Las comprobaciones son educativas y no sustituyen toda la validación de una aplicación real.

Nivel 1

Consultar y limpiar

Ejercicio 01

Reconoce un palíndromo

Escribe es_palindromo(texto). Devuelve True si el texto se lee igual al revés, ignorando mayúsculas y espacios. "Anita lava la tina" es un palíndromo.

Comprobaciones · añade tu función antes
assert es_palindromo("Anita lava la tina") is True
assert es_palindromo("radar") is True
assert es_palindromo("python") is False
assert es_palindromo("") is True
Ver una pista para el ejercicio 1

Normaliza primero: minúsculas y sin espacios. Después compara con su versión invertida.

Ver solución y explicación del ejercicio 1
Solución completa · ejercicio 01
def es_palindromo(texto):
    limpio = texto.lower().replace(" ", "")
    return limpio == limpio[::-1]

assert es_palindromo("Anita lava la tina") is True
assert es_palindromo("radar") is True
assert es_palindromo("python") is False
assert es_palindromo("") is True
print("Pruebas superadas")

Los métodos de texto devuelven una cadena nueva: se guarda en limpio para poder compararla dos veces. El texto vacío es palíndromo porque coincide con su reverso.

Ejercicio 02

Cuenta las palabras de una frase

Escribe contar_palabras(texto). Devuelve cuántas palabras tiene el texto, separadas por uno o más espacios. Un texto vacío o solo con espacios devuelve 0.

Comprobaciones · añade tu función antes
assert contar_palabras("hola mundo") == 2
assert contar_palabras("  muchos   espacios  ") == 2
assert contar_palabras("") == 0
assert contar_palabras("   ") == 0
Ver una pista para el ejercicio 2

split() sin argumentos agrupa los espacios y no crea palabras vacías.

Ver solución y explicación del ejercicio 2
Solución completa · ejercicio 02
def contar_palabras(texto):
    return len(texto.split())

assert contar_palabras("hola mundo") == 2
assert contar_palabras("  muchos   espacios  ") == 2
assert contar_palabras("") == 0
assert contar_palabras("   ") == 0
print("Pruebas superadas")

split() sin argumentos divide por cualquier espacio en blanco y descarta los vacíos. Con split(" ") los espacios repetidos crearían elementos vacíos.

Nivel 2

Transformar texto

Ejercicio 03

Capitaliza cada palabra

Escribe capitalizar_palabras(texto). Devuelve el texto con la primera letra de cada palabra en mayúscula y el resto en minúscula. Las palabras quedan separadas por un solo espacio.

Comprobaciones · añade tu función antes
assert capitalizar_palabras("hola MUNDO") == "Hola Mundo"
assert capitalizar_palabras("python") == "Python"
assert capitalizar_palabras("") == ""
assert capitalizar_palabras("  ana   maría ") == "Ana María"
Ver una pista para el ejercicio 3

Separa en palabras, transforma cada una y únelas de nuevo con " ".join.

Ver solución y explicación del ejercicio 3
Solución completa · ejercicio 03
def capitalizar_palabras(texto):
    palabras = texto.split()
    return " ".join(palabra.capitalize() for palabra in palabras)

assert capitalizar_palabras("hola MUNDO") == "Hola Mundo"
assert capitalizar_palabras("python") == "Python"
assert capitalizar_palabras("") == ""
assert capitalizar_palabras("  ana   maría ") == "Ana María"
print("Pruebas superadas")

capitalize() pone la primera letra en mayúscula y el resto en minúscula. join une las palabras con un único espacio, lo que normaliza los espacios sobrantes.

Ejercicio 04

Quita las vocales

Escribe quitar_vocales(texto). Devuelve el texto sin las vocales a, e, i, o, u, en minúscula o mayúscula. No se consideran las vocales con tilde.

Comprobaciones · añade tu función antes
assert quitar_vocales("Hola Mundo") == "Hl Mnd"
assert quitar_vocales("AEIOU") == ""
assert quitar_vocales("rhythm") == "rhythm"
assert quitar_vocales("") == ""
Ver una pista para el ejercicio 4

Recorre los caracteres y conserva solo los que no estén en "aeiouAEIOU".

Ver solución y explicación del ejercicio 4
Solución completa · ejercicio 04
def quitar_vocales(texto):
    resultado = ""
    for letra in texto:
        if letra not in "aeiouAEIOU":
            resultado += letra
    return resultado

assert quitar_vocales("Hola Mundo") == "Hl Mnd"
assert quitar_vocales("AEIOU") == ""
assert quitar_vocales("rhythm") == "rhythm"
assert quitar_vocales("") == ""
print("Pruebas superadas")

Los textos no se modifican: se construye uno nuevo carácter a carácter. in también funciona con strings para preguntar por pertenencia.

Nivel 3

Reglas con texto

Ejercicio 05

Obtén las iniciales de un nombre

Escribe iniciales(nombre). Devuelve las iniciales en mayúscula, cada una seguida de un punto. iniciales("ana maría pérez") es "A.M.P."

Comprobaciones · añade tu función antes
assert iniciales("ana maría pérez") == "A.M.P."
assert iniciales("Leo") == "L."
assert iniciales("") == ""
assert iniciales("  luna   sol ") == "L.S."
Ver una pista para el ejercicio 5

Divide en palabras, toma el primer carácter de cada una y añade el punto.

Ver solución y explicación del ejercicio 5
Solución completa · ejercicio 05
def iniciales(nombre):
    resultado = ""
    for palabra in nombre.split():
        resultado += palabra[0].upper() + "."
    return resultado

assert iniciales("ana maría pérez") == "A.M.P."
assert iniciales("Leo") == "L."
assert iniciales("") == ""
assert iniciales("  luna   sol ") == "L.S."
print("Pruebas superadas")

split() descarta los espacios sobrantes, así que nunca hay una palabra vacía en la que palabra[0] fallaría. Con un texto vacío el bucle no se ejecuta.

Ejercicio 06

Censura una palabra

Escribe censurar(texto, palabra). Sustituye cada aparición exacta de la palabra por asteriscos de su misma longitud. censurar("uno dos uno", "uno") es "*** dos ***".

Comprobaciones · añade tu función antes
assert censurar("uno dos uno", "uno") == "*** dos ***"
assert censurar("hola", "adiós") == "hola"
assert censurar("", "x") == ""
assert censurar("aaa", "a") == "***"
Ver una pista para el ejercicio 6

replace recibe el texto a buscar y el texto con el que sustituirlo. Construye los asteriscos con "*" * len(palabra).

Ver solución y explicación del ejercicio 6
Solución completa · ejercicio 06
def censurar(texto, palabra):
    return texto.replace(palabra, "*" * len(palabra))

assert censurar("uno dos uno", "uno") == "*** dos ***"
assert censurar("hola", "adiós") == "hola"
assert censurar("", "x") == ""
assert censurar("aaa", "a") == "***"
print("Pruebas superadas")

replace devuelve un texto nuevo y sustituye todas las apariciones. Multiplicar un texto por un entero lo repite, y eso permite adaptar los asteriscos a la longitud.

Errores frecuentes en estos ejercicios

El texto no cambia
Los strings son inmutables: texto.upper() devuelve una versión nueva. Guarda el resultado en una variable o devuélvelo.
Aparecen palabras vacías
Con split(" ") los espacios repetidos crean elementos vacíos. Usa split() sin argumentos.
IndexError con un texto vacío
Leer texto[0] en un texto vacío falla. Comprueba antes si hay contenido o recorre las palabras.
Mayúsculas y minúsculas distintas
Normaliza con lower() antes de comparar si el contrato ignora la capitalización.

Si no entiendes el traceback, empieza por su última línea en la guía de errores de Python.

Preguntas frecuentes sobre ejercicios de strings

¿Por qué un método de texto no modifica el original?

Porque los strings no se pueden modificar: cada operación crea un texto nuevo. Por eso se asigna el resultado a una variable.

¿Qué diferencia hay entre split() y split(" ")?

Sin argumentos, split() agrupa cualquier espacio en blanco y descarta los vacíos. Con un espacio explícito, cada espacio sobrante crea un elemento vacío.

¿Puedo usar f-strings?

Sí. Para construir mensajes combinando texto y valores son más claras que concatenar con +.

Reúne todo en funciones

Con las colecciones y el texto dominados, practica el diseño de funciones completas.

Practicar funciones →Ver los 12 ejercicios de fundamentos

Fuentes y compatibilidad

Los ejemplos usan Python 3 y la biblioteca estándar. Las instrucciones de instalación se contrastaron con la documentación oficial; los ejemplos de código se verifican con las comprobaciones de estas guías.

Consulta la metodología y las versiones del editor.