Python: Manejo de cadenas de texto

Descubre el poder de las palabras en Python

Bienvenidos, jóvenes pensadores. Hoy vamos a explorar uno de los aspectos más fascinantes de la programación: el manejo de texto. En un mundo digital donde la comunicación es fundamental, aprender a trabajar con cadenas de caracteres nos da el poder de transformar, analizar y dar sentido a la información.

¿Qué son las cadenas de texto?

En Python, las cadenas (strings) son secuencias de caracteres que nos permiten representar texto. Desde tu nombre hasta el último mensaje que enviaste por WhatsApp, todo es manipulable con las herramientas que aprenderás hoy.

Este taller está diseñado para que no solo aprendas sintaxis, sino que desarrolles una forma de pensar analítica y creativa. Cada concepto que exploremos tendrá aplicaciones prácticas en problemas reales que podrías enfrentar como futuro desarrollador.

Explora un ejemplo básico

Intenta cambiar el valor de la variable nombre y haz clic en "Ejecutar" para ver el resultado:

# ¡Cambia el valor de 'nombre' y haz clic en ejecutar!
nombre = "Carlos"
saludo = "Hola, " + nombre + ". ¡Bienvenido al taller!"
print(saludo)

Objetivo de aprendizaje

Dominar las operaciones fundamentales con cadenas de texto en Python para manipular, analizar y transformar datos textuales, desarrollando competencias técnicas mediante la práctica reflexiva de concatenación, indexación, slicing y aplicación de métodos específicos; cultivando habilidades cognitivas para resolver problemas complejos mediante la descomposición en partes manejables; y fomentando actitudes de curiosidad intelectual, perseverancia ante los errores y colaboración ética en la construcción de soluciones digitales con impacto social positivo.

Lo que lograrás al finalizar este taller

  • Crearás programas que procesen información textual de manera eficiente
  • Podrás limpiar y organizar datos de fuentes diversas
  • Desarrollarás un pensamiento algorítmico para resolver problemas con texto
  • Ganarás confianza para enfrentar retos más complejos de programación

Contextualización: El texto en nuestras vidas

Imagina que tienes que organizar los contactos de tu teléfono, limpiar datos de una encuesta escolar, o crear un generador de nombres de usuario para un videojuego. En todas estas situaciones, el manejo de cadenas de texto se vuelve esencial.

Cuando Carlos, un estudiante como tú, quiso crear una aplicación para ayudar a su abuela a organizar sus recetas, se dio cuenta que necesitaba separar ingredientes, convertir medidas y dar formato a las instrucciones. Cada receta era un texto que debía manipular con precisión.

Un problema real: Limpieza de datos

En tu colegio, han recopilado correos electrónicos de estudiantes para un torneo deportivo, pero algunos datos tienen espacios extra, mayúsculas inconsistentes o formatos incorrectos.

# Datos recolectados (con inconsistencias)
correos = ["  JuanPerez@gmail.com  ", 
           "MARIA.LOPEZ@hotmail.com", 
           "carlos_rodriguez ",  # ¡Falta el dominio!
           "Ana.Garcia@yahoo.com"]

# Necesitamos limpiar y validar estos datos
correos_limpios = []

for correo in correos:
    # Eliminar espacios al inicio y final
    correo = correo.strip()
    
    # Convertir a minúsculas
    correo = correo.lower()
    
    # Verificar si es un correo válido (contiene '@')
    if "@" in correo:
        correos_limpios.append(correo)
    else:
        print(f"Correo inválido: {correo}")

print("Correos válidos:", correos_limpios)

Este es solo un ejemplo de cómo el manejo de cadenas resuelve problemas reales. A lo largo del taller, aprenderás todas las herramientas necesarias para enfrentar desafíos como este.

Desarrollo de la actividad

Ahora exploraremos cada concepto paso a paso, con ejemplos prácticos y ejercicios para que experimentes directamente con el código.

1. Concatenación y repetición

La concatenación nos permite unir cadenas, mientras que la repetición nos ayuda a crear patrones.

# Concatenación básica
nombre = "Ana"
apellido = "García"
nombre_completo = nombre + " " + apellido
print(nombre_completo)  # Resultado: Ana García

# Repetición para crear patrones
separador = "-" * 30
print(separador)  # Resultado: ------------------------------

# Crear un marco de asteriscos
marco = "*" * 20
print(marco)
print("*" + " " * 18 + "*")
print("*   ¡BIENVENIDOS!   *")
print("*" + " " * 18 + "*")
print(marco)

2. Índices y Slicing (rebanado)

Cada carácter en una cadena tiene una posición (índice). En Python, los índices comienzan en 0.

texto = "Python"

# Acceso por índice
print(texto[0])   # P
print(texto[2])   # t
print(texto[-1])  # n (último carácter)

# Slicing: obtener subcadenas
print(texto[0:2])   # Py (desde 0 hasta 2, sin incluir 2)
print(texto[2:])    # thon (desde 2 hasta el final)
print(texto[:4])    # Pyth (desde inicio hasta 4)
print(texto[::2])   # Pto (todos los caracteres, saltando de 2 en 2)
print(texto[::-1])  # nohtyP (inversa de la cadena)

3. Métodos de transformación

Python ofrece métodos integrados para modificar cadenas. Recordemos que las cadenas son inmutables, por lo que estos métodos devuelven una nueva cadena.

texto = "  Aprendiendo Python  "

# Eliminar espacios
print(texto.strip())     # "Aprendiendo Python"
print(texto.lstrip())    # "Aprendiendo Python  "
print(texto.rstrip())    # "  Aprendiendo Python"

# Cambiar mayúsculas/minúsculas
print(texto.upper())     # "  APRENDIENDO PYTHON  "
print(texto.lower())     # "  aprendiendo python  "
print("python".capitalize())  # "Python"

# Búsqueda en cadenas
frase = "El rápido zorro marrón salta"
print(frase.find("zorro"))    # 10 (posición donde empieza)
print(frase.find("perro"))    # -1 (no encontrado)
print(frase.index("rápido"))  # 3

# Dividir cadenas
datos = "Juan,25,Quito,Estudiante"
partes = datos.split(",")
print(partes)  # ['Juan', '25', 'Quito', 'Estudiante']

# Verificación de contenido
print("Python".isalpha())    # True (solo letras)
print("Python3".isalpha())   # False (tiene número)
print("123".isdigit())      # True (solo dígitos)
print("Python123".isalnum()) # True (letras y números)
print("   ".isspace())      # True (solo espacios)

Experimento con código

Prueba este código que combina varios conceptos. Luego intenta modificarlo:

# Análisis de texto simple
texto_usuario = "  Me encanta programar en Python. ¡Es fascinante!  "

# Limpiar el texto
texto_limpio = texto_usuario.strip()

# Convertir a mayúsculas
texto_mayus = texto_limpio.upper()

# Contar palabras
palabras = texto_limpio.split()
num_palabras = len(palabras)

# Mostrar resultados
print("Texto original:", texto_usuario)
print("Texto limpio:", texto_limpio)
print("En mayúsculas:", texto_mayus)
print("Número de palabras:", num_palabras)
print("Primeras 10 letras:", texto_limpio[:10])

El reto final: Validador de contraseñas

Ahora aplica todo lo aprendido en un proyecto integrador. Deberás crear un validador de contraseñas que verifique si una contraseña cumple con ciertos criterios de seguridad.

Especificaciones del reto

Tu programa debe:

  1. Solicitar al usuario que ingrese una contraseña
  2. Verificar que la contraseña tenga al menos 8 caracteres
  3. Verificar que contenga al menos una letra mayúscula
  4. Verificar que contenga al menos una letra minúscula
  5. Verificar que contenga al menos un número
  6. Verificar que contenga al menos un carácter especial (!, @, #, $, %, &, *)
  7. Mostrar un mensaje indicando qué criterios cumple y cuáles no
  8. Sugerir una contraseña segura si la ingresada no es válida

Pistas para resolver el reto

Puedes utilizar:

  • len() para verificar la longitud
  • Bucles for para recorrer cada carácter
  • Métodos como .isupper(), .islower(), .isdigit()
  • Condicionales if para verificar cada criterio
  • La función in para verificar si un carácter está en una cadena
# Esqueleto del programa para empezar

def validar_contraseña(contraseña):
    # Aquí implementarás las validaciones
    pass

# Solicitar contraseña al usuario
contraseña_ingresada = input("Ingresa tu contraseña: ")

# Validar
resultado = validar_contraseña(contraseña_ingresada)

# Mostrar resultados
print(resultado)

Extensión opcional: Crea una función para generar contraseñas seguras que cumplan todos los criterios automáticamente.

Criterios de evaluación

  • Correctitud (40%): El programa identifica correctamente contraseñas válidas e inválidas
  • Completitud (30%): Verifica todos los criterios solicitados
  • Interfaz de usuario (15%): Mensajes claros y útiles para el usuario
  • Creatividad (15%): Soluciones innovadoras o características adicionales

Evaluación lúdica: Demuestra lo aprendido

Responde estas 5 preguntas para evaluar tu comprensión de los conceptos del taller. ¡Pon a prueba tu conocimiento!

Pregunta 1: ¿Qué resultado produce el siguiente código?

texto = "Python"
print(texto[1:4])
yth
Pyt
thon
ytho

Pregunta 2: ¿Cuál es la diferencia entre .find() y .index()?

.find() devuelve -1 si no encuentra la subcadena, .index() genera un error
.index() es más rápido que .find()
.find() solo busca al inicio, .index() busca en toda la cadena
No hay diferencia, son sinónimos

Pregunta 3: ¿Qué hace el método .strip()?

Elimina espacios al inicio y final de la cadena
Divide la cadena en partes
Convierte la cadena a mayúsculas
Busca una subcadena específica

Pregunta 4: ¿Qué resultado produce "Python".isalpha()?

True
False
Error
None

Pregunta 5: ¿Qué hace el slicing [::-1]?

Invierte la cadena
Toma cada segundo carácter
Elimina el primer y último carácter
Convierte la cadena a minúsculas

Tu puntuación

0/5

Responde todas las preguntas para ver tu puntuación