Cómo practicar con estos ejercicios de strings
Necesitas conocer los strings, sus métodos y el bucle for. Algunos ejercicios usan slicing.
- Lee el contrato: qué recibe la función y qué debe devolver.
- Escribe la función y añade debajo las comprobaciones.
- Ejecuta ambas partes. Un
assertque pasa no imprime nada; si falla, apareceAssertionError. - Antes de abrir la solución, prueba un texto vacío y otro con espacios sobrantes, que son los casos más traicioneros.
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.
Consultar y limpiar
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.
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 TrueVer 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
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.
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.
assert contar_palabras("hola mundo") == 2
assert contar_palabras(" muchos espacios ") == 2
assert contar_palabras("") == 0
assert contar_palabras(" ") == 0Ver 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
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.
Transformar texto
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.
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
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.
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.
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
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.
Reglas con texto
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."
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
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.
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 ***".
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
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. Usasplit()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 fundamentosFuentes 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.