Saltar al contenido
Numerus Scriptum por Edison Achalma

Cadenas de texto

Las cadenas de texto (strings) son uno de los tipos de datos más utilizados en programación.

8 min de lectura PDF de esta lección(58 KB) DOCX (30 KB)

0.1 Motivación

Las cadenas de texto (strings) son uno de los tipos de datos más utilizados en programación. Desde mostrar mensajes al usuario hasta procesar datos de archivos o bases de datos, el manejo de texto es fundamental. Python ofrece una forma potente y flexible de trabajar con strings, con una sintaxis clara y numerosos métodos para manipularlos.

0.2 Intuición

Imagina un string como una fila de caracteres donde cada posición tiene un número (índice). Es como un tren donde cada vagón es una letra, y puedes acceder a cualquier vagón por su número. Python trata los strings como secuencias inmutables: una vez creados, no puedes cambiar los caracteres individuales, pero puedes crear nuevos strings a partir de ellos.

0.3 Modelo mental

  • Strings son secuencias: cada carácter tiene una posición (índice), empezando desde 0.
  • Inmutables: no puedes cambiar un carácter directamente; creas uno nuevo.
  • Indexación: accedes con [i] (i desde 0). Índices negativos empiezan desde el final.
  • Multilínea: con triple comilla (""" o ''') preserva saltos de línea.
  • Inmutabilidad: los métodos devuelven nuevos strings, no modifican el original.

0.4 Desarrollo

0.4.1 1. Creación de Strings

python
# Comillas simples o dobles
nombre = "Ana"
apellido = 'García'

# Strings con comillas internas
texto1 = "It's a beautiful day"
texto2 = 'Ella dijo "Hola"'

# Strings multilínea (con triple comilla)
poema = """Roses are red,
Violets are blue,
Python is awesome,
And so are you!"""
print(poema)

0.4.2 2. Acceso a caracteres (indexación)

python
texto = "Python"
print(texto[0])  # 'P'
print(texto[1])  # 'y'
print(texto[2])  # 't'

# Índices negativos (desde el final)
print(texto[-1])  # 'n'
print(texto[-2])  # 'o'

# ❌ Error: índice fuera de rango
# print(texto[10])  # IndexError

0.4.3 3. Longitud de un string

python
texto = "Hola Mundo"
print(len(texto))  # 10 (incluye el espacio)

0.4.4 4. Slicing (rebanado)

Extrae partes de un string:

python
texto = "Python Programming"

# texto[inicio:fin]  (fin no incluido)
print(texto[0:6])   # "Python"
print(texto[7:18])  # "Programming"

# Desde el inicio
print(texto[:6])    # "Python"

# Hasta el final
print(texto[7:])    # "Programming"

# Con índices negativos
print(texto[-11:])  # "Programming"
print(texto[-11:-1]) # "Programmin"

0.4.5 5. Iteración sobre strings

python
palabra = "Python"
for letra in palabra:
    print(letra)
# Salida: P, y, t, h, o, n

# Con índice y carácter
for i, letra in enumerate(palabra):
    print(f"Posición {i}: {letra}")

0.4.6 6. Verificar contenido con in

python
frase = "El gato está en el tejado"

# Verificar si contiene una subcadena
print("gato" in frase)      # True
print("perro" in frase)     # False
print("tejado" not in frase) # False

# Uso en condicional
if "gato" in frase:
    print("¡Hay un gato!")

0.4.7 7. Operaciones básicas con strings

python
# Concatenación
nombre = "Ana"
apellido = "García"
nombre_completo = nombre + " " + apellido
print(nombre_completo)  # "Ana García"

# Repetición
eco = "Hola! " * 3
print(eco)  # "Hola! Hola! Hola! "

# Comparación (lexicográfica)
print("abc" < "abd")   # True (c < d)
print("Ana" == "ana")  # False (diferentes mayúsculas)
print("Ana".lower() == "ana".lower())  # True

0.5 Ejemplos

Mínimo — Creación y acceso:

python
mensaje = "Hola Mundo"
print(mensaje[0])     # H
print(mensaje[5])     # M
print(len(mensaje))   # 10

Progresivo — Manipulación básica:

python
nombre = "Carlos"
print(nombre.upper())  # CARLOS
print(nombre.lower())  # carlos
print(nombre[0])       # C
print(nombre[-1])      # s
print(len(nombre))     # 6

Real — Sistema de validación de usuario:

python
# Datos de usuario
nombre_usuario = "  Ana_Perez  "
email = "ANA@GMAIL.COM"

# Limpieza de datos
nombre_limpio = nombre_usuario.strip()  # "Ana_Perez"
email_limpio = email.lower()            # "ana@gmail.com"

# Validación
if "@" in email_limpio:
    print(f"Email válido: {email_limpio}")
else:
    print("Email inválido")

# Extracción de nombre de usuario
if "_" in nombre_limpio:
    partes = nombre_limpio.split("_")
    print(f"Nombre: {partes[0]}")  # "Ana"
    print(f"Apellido: {partes[1]}")  # "Perez"

0.6 Errores comunes

Error Síntoma Solución
Índice fuera de rango IndexError: string index out of range Verifica que el índice sea < len(string)
Confundir = con == Asignación en lugar de comparación Usa == para comparar
Modificar string directamente TypeError: 'str' object does not support item assignment Crea un nuevo string o usa listas
Olvidar convertir tipos TypeError: can only concatenate str to str Convierte con str() o usa f-strings
Espacios invisibles Comparaciones fallan Usa .strip() para limpiar

0.7 Buenas prácticas

  1. Usa f-strings para formateo:

    python
    nombre = "Ana"
    edad = 25
    mensaje = f"Hola, {nombre}. Tienes {edad} años"
  2. Limpia strings antes de comparar:

    python
    usuario = "  ana  "
    if usuario.strip().lower() == "ana":
        print("Usuario válido")
  3. Usa métodos de string en lugar de bucles manuales:

    python
    # ❌ Menos eficiente
    resultado = ""
    for char in "abc":
        resultado += char.upper()
    
    # ✅ Mejor
    resultado = "abc".upper()
  4. Prefiere in para búsquedas:

    python
    # ✅ Claro y eficiente
    if "error" in mensaje:
        print("Hay un error")
  5. Usa slicing para extraer partes:

    python
    email = "usuario@email.com"
    nombre = email[:email.index("@")]
    dominio = email[email.index("@") + 1:]

0.8 Ejercicio

Intermedio — Procesamiento de texto

Escribe un programa que:

  1. Tenga un string texto con “El rápido zorro marrón salta sobre el perro perezoso”
  2. Extraiga y muestre:
    • El primer carácter
    • Los últimos 5 caracteres
    • La palabra “zorro” (usando slicing)
    • La longitud total
    • El texto en mayúsculas
    • El texto en minúsculas
  3. Verifique si contiene “perro” y “gato”
  4. Reemplace “perro” por “gato” en el texto
  5. Divida el texto en palabras y muestre cuántas hay

Solución (no mires hasta haberlo intentado):

python
texto = "El rápido zorro marrón salta sobre el perro perezoso"

# 1. Caracteres
print(f"Primer carácter: {texto[0]}")
print(f"Últimos 5: {texto[-5:]}")
print(f"Palabra 'zorro': {texto[10:15]}")  # Asumiendo posición fija

# 2. Longitud y caso
print(f"Longitud: {len(texto)}")
print(f"Mayúsculas: {texto.upper()}")
print(f"Minúsculas: {texto.lower()}")

# 3. Búsquedas
print(f"¿Contiene 'perro'? {'perro' in texto}")
print(f"¿Contiene 'gato'? {'gato' in texto}")

# 4. Reemplazo
texto_modificado = texto.replace("perro", "gato")
print(f"Texto modificado: {texto_modificado}")

# 5. División en palabras
palabras = texto.split()
print(f"Número de palabras: {len(palabras)}")
print(f"Primeras 3 palabras: {palabras[:3]}")

0.9 Síntesis

  • Strings: secuencias de caracteres, inmutables, indexación desde 0.
  • Comillas: simples ('), dobles ("), triples (""" o ''').
  • Indexación: [i] (positivo) y [-i] (negativo desde el final).
  • Slicing: [inicio:fin:paso] para extraer subcadenas.
  • len(): obtiene la longitud del string.
  • Métodos comunes: .upper(), .lower(), .strip(), .split(), .replace(), .join().
  • in: verifica si una subcadena está presente.
  • F-strings: la forma recomendada de formatear strings con variables.

0.10 Qué sigue

  • Relacionado: métodos de string, f-strings, expresiones regulares
  • Siguiente tema: Métodos de strings — profundiza en las herramientas para manipular texto.

Cómo citar

Achalma, E. (2026, 20 de octubre). Cadenas de texto. Numerus Scriptum. https://numerus-scriptum.netlify.app/cursos/python/cadenas-de-texto/

Esc
elegir abrir Esc cerrar