Introducción a Python
Introducción a Python Texto Leccion

Cadenas de texto (Strings)

Introducción a las Cadenas de Texto en Python En el mundo de la programación, una de las tareas más fundamentales es trabajar con texto. Ya sea para mostrar un mensaje al usuario, procesar un archivo de datos o generar un informe, necesitamos una forma de manejar secuencias de caracteres. En Python, este tipo de dato se llama cadena de texto o, utilizando el término en inglés, string. Una cadena es una secuencia ordenada e inmutable de caracteres, lo que significa que puede contener letras, núme
Tiempo de estudio
20 Min




Introducción a las Cadenas de Texto en Python


En el mundo de la programación, una de las tareas más fundamentales es trabajar con texto. Ya sea para mostrar un mensaje al usuario, procesar un archivo de datos o generar un informe, necesitamos una forma de manejar secuencias de caracteres. En Python, este tipo de dato se llama cadena de texto o, utilizando el término en inglés, string. Una cadena es una secuencia ordenada e inmutable de caracteres, lo que significa que puede contener letras, números, símbolos y espacios, y una vez creada, no se puede modificar directamente.


Las cadenas son uno de los tipos de datos más versátiles y utilizados. Casi cualquier programa que interactúe con personas las utilizará. Desde el simple "Hola, mundo" hasta la compleja interpretación de un documento JSON, todo comienza con la comprensión de cómo Python estructura y manipula el texto. En esta lección, no solo aprenderás a crear cadenas, sino a operar con ellas, combinarlas, extraer partes y darles formato de manera efectiva, sentando las bases para una interacción rica y dinámica en tus programas.



Creación y Manipulación Básica de Strings


Para crear una cadena en Python, simplemente encierra una secuencia de caracteres entre comillas. Python es flexible y permite el uso de comillas simples (' ') o dobles (" "). Esta dualidad es muy útil, por ejemplo, para incluir una comilla simple dentro de una cadena delimitada por comillas dobles, o viceversa. Por ejemplo, "El libro 'Python' es genial" es perfectamente válido sin necesidad de caracteres de escape complejos. Además, para cadenas multilínea, puedes usar tres comillas simples o dobles (''' ''' o """ """), lo que preserva los saltos de línea en el texto.


Una vez creada una cadena, puedes realizar operaciones básicas. La más común es la concatenación, que une dos o más cadenas usando el operador +. Otra operación esencial es la repetición, lograda con el operador *, que te permite repetir una cadena un número específico de veces. Python también te permite acceder a cualquier carácter individual dentro de la cadena mediante indexación, usando corchetes [] y un índice numérico que comienza en 0 para el primer carácter.



# Creación de cadenas
saludo = "Hola, mundo"
titulo = 'Introducción a Python'
cita = '''Python es un lenguaje de programación
interpretado cuya filosofía hace hincapié
en la legibilidad de su código.'''

# Concatenación y repetición
nombre = "Ana"
mensaje_bienvenida = "¡Bienvenida, " + nombre + "!"
print(mensaje_bienvenida) # Salida: ¡Bienvenida, Ana!

advertencia = "Cuidado! " * 3
print(advertencia) # Salida: Cuidado! Cuidado! Cuidado!

# Indexación
palabra = "Python"
print(palabra[0]) # Salida: P
print(palabra[2]) # Salida: t
print(palabra[-1]) # Salida: n (índice negativo cuenta desde el final)


Concepto Clave: Inmutabilidad y Secuencias


Imagina una cadena de texto como una hilera de cuentas de un collar, cada una con una letra grabada. Este collar está sellado: no puedes cambiar una cuenta individual, ni añadir una en medio, ni quitarla sin romperlo. Para modificar su apariencia, debes crear un collar completamente nuevo, quizás reutilizando algunas cuentas del original. Esta es la esencia de la inmutabilidad en las cadenas de Python. El objeto cadena en sí no puede ser alterado después de su creación. Cuando realizas una operación como cadena.upper(), no estás modificando la cadena original; estás generando una nueva cadena con los cambios aplicados.


Esta característica tiene importantes implicaciones. Por un lado, hace que las cadenas sean seguras para usar como claves en diccionarios o en situaciones donde se requiere un valor constante. Por otro lado, significa que operaciones que parecen modificar una cadena (como la concatenación en un bucle) pueden ser ineficientes, ya que crean múltiples objetos nuevos. Comprender la inmutabilidad te ayudará a escribir código más eficiente y a evitar errores comunes cuando intentas "editar" una cadena directamente.



Tip del Instructor: Siempre que uses un método de cadena que transforma el texto (como replace(), strip(), upper()), recuerda que debes asignar el resultado a una variable para conservarlo. Por ejemplo: texto_limpio = texto_original.strip().


Cómo Funciona en la Práctica: Métodos Esenciales de Strings


Python proporciona un rico conjunto de métodos integrados para trabajar con cadenas. Un método es una función que "pertenece" a un objeto y se llama usando el punto (.). Estos métodos no modifican la cadena original (por su inmutabilidad), sino que devuelven una nueva cadena con el resultado. Algunos de los más útiles para empezar son: .upper() y .lower() para cambiar mayúsculas/minúsculas; .strip() para eliminar espacios en blanco al inicio y final; .replace(viejo, nuevo) para sustituir partes del texto; y .find(subcadena) para buscar la posición de un texto dentro de otro.


Vamos a seguir un ejemplo paso a paso. Supongamos que recibes un dato de un usuario o un archivo que está desordenado: " Precio: $45.99 ". Tu objetivo es extraer el número como un valor decimal. Primero, usarías .strip() para limpiar los espacios. Luego, .replace() para quitar el símbolo de dólar. Finalmente, podrías usar .find(":") para localizar y extraer solo la parte después de los dos puntos. Este proceso de aplicar métodos en cadena (a menudo llamado method chaining) es una técnica poderosa y común en Python.



# Ejemplo práctico paso a paso
dato_crudo = " Precio: $45.99 "
print(f"Original: '{dato_crudo}'")

# Paso 1: Limpiar espacios al inicio y final
dato_limpio = dato_crudo.strip()
print(f"Después de .strip(): '{dato_limpio}'")

# Paso 2: Eliminar el símbolo de dólar
dato_sin_simbolo = dato_limpio.replace("$", "")
print(f"Después de .replace(): '{dato_sin_simbolo}'")

# Paso 3: Encontrar la posición de los dos puntos y extraer el número
posicion_dos_puntos = dato_sin_simbolo.find(":")
# Extraemos desde un carácter después de los dos puntos hasta el final
solo_numero = dato_sin_simbolo[posicion_dos_puntos + 1:].strip()
print(f"Número extraído: '{solo_numero}'")

# Todo en una línea (method chaining)
resultado_final = dato_crudo.strip().replace("$", "").split(":")[1].strip()
print(f"Resultado con chaining: '{resultado_final}'")


Formateo de Cadenas: f-strings, format() y Más


Construir cadenas dinámicas es una necesidad constante. No querrás escribir "Hola, [nombre]" para cada persona. Para esto, Python ofrece varias formas de formateo de cadenas. El método más moderno, legible y recomendado desde Python 3.6 son las f-strings (cadenas de formato). Al prefijar una cadena con la letra f o F, puedes insertar variables y expresiones directamente dentro de llaves {}. Python evaluará lo que está dentro y lo convertirá en texto, integrándolo perfectamente en la cadena.


Antes de las f-strings, el método .format() era el estándar. Sigue siendo muy útil y potente, especialmente cuando necesitas reutilizar valores o aplicar formatos numéricos complejos. La sintaxis básica implica crear una cadena con marcadores de posición {} y luego llamar al método .format() pasando los valores en orden. También existe el formateo con el operador % (estilo printf de C), que es el más antiguo y su uso ha disminuido en favor de las opciones más claras. Elegir entre ellas depende del contexto, pero para la mayoría de los casos nuevos, las f-strings son la opción ganadora.



# Formateo con f-strings (recomendado)
nombre = "Carlos"
edad = 28
profesion = "ingeniero"

mensaje_f = f"Hola, me llamo {nombre}, tengo {edad} años y soy {profesion}."
print(mensaje_f)

# Puedes incluir expresiones directamente
precio = 19.99
impuesto = 1.21
total = f"Precio total: {precio * impuesto:.2f} €" # :.2f formatea a 2 decimales
print(total)

# Formateo con .format()
mensaje_format = "Hola, me llamo {}, tengo {} años y soy {}.".format(nombre, edad, profesion)
print(mensaje_format)

# Con índices para reordenar
template = "Soy {1}, {0}. Un placer." # {1} se refiere al segundo argumento, {0} al primero
saludo = template.format(nombre, profesion)
print(saludo)


Código en Acción: Un Mini-Proyecto de Procesamiento de Texto


Vamos a consolidar todo lo aprendido con un ejemplo completo y funcional. Crearemos un programa simple que simula procesar una lista de entradas de usuarios (como las que podrían venir de un formulario web), las normaliza y genera un informe limpio. Este ejercicio cubre creación, manipulación, métodos y formateo de cadenas.


# Mini-proyecto: Normalizador de datos de usuario
print("=== PROCESADOR DE DATOS DE USUARIO ===\n")

# Datos de entrada "crudos" (simulados)
usuarios_crudos = [
" [email protected];Ana;García;28 ",
"[email protected];Luis;Martín;35",
" [email protected];María;López;31 "
]

print("Lista de entrada:")
for usuario in usuarios_crudos:
print(f" '{usuario}'")

print("\n--- Procesando ---\n")
informe_final = []

for usuario_crudo in usuarios_crudos:
# 1. Limpieza inicial
usuario_limpio = usuario_crudo.strip()

# 2. Separar los campos (asumiendo que están separados por ';')
campos = usuario_limpio.split(';')

# 3. Normalizar cada campo
email = campos[0].lower().strip() # Email en minúsculas
nombre = campos[1].strip().capitalize() # Nombre con primera mayúscula
apellido = campos[2].strip().capitalize() # Apellido con primera mayúscula
edad = campos[3].strip() # Edad como string por ahora

# 4. Construir una cadena formateada para el informe
ficha_usuario = f"Usuario: {nombre} {apellido} | Email: {email} | Edad: {edad} años"
informe_final.append(ficha_usuario)

# Mostrar progreso
print(f"Procesado: {ficha_usuario}")

# 5. Presentar el informe final
print("\n=== INFORME FINAL NORMALIZADO ===")
for entrada in informe_final:
print(f"- {entrada}")

# 6. Extra: Generar un nombre de usuario único (ej. primera letra nombre + apellido)
print("\n--- Nombres de usuario sugeridos ---")
for usuario_crudo in usuarios_crudos:
campos = usuario_crudo.strip().split(';')
nombre = campos[1].strip().capitalize()
apellido = campos[2].strip().capitalize()
usuario_sugerido = f"{(nombre[0] + apellido).lower()}"
print(f" {nombre} {apellido} -> '{usuario_sugerido}'")


Errores Comunes y Cómo Evitarlos


Al comenzar con las cadenas, es fácil tropezar con ciertos errores. Identificarlos temprano te ahorrará mucho tiempo de depuración.


1. Confundir índice y posición: Intentar acceder a cadena[longitud] siempre dará un error IndexError. Recuerda que los índices van de 0 a longitud - 1. Usa len(cadena) para conocer la longitud y accede solo hasta len(cadena)-1.


2. Olvidar la inmutabilidad e intentar modificar un carácter: Hacer cadena[0] = 'A' resultará en un TypeError. No puedes asignar valores a posiciones de una cadena. La solución es crear una nueva cadena, típicamente usando slicing y concatenación o el método .replace().


3. Concatenar cadenas con otros tipos de datos sin conversión: "El precio es: " + 45 produce un TypeError. Python no convierte automáticamente números a texto en la concatenación. Debes convertir explícitamente el número a string con str(45) o, mejor aún, usar f-strings: f"El precio es: {45}".


4. Problemas con comillas dentro de comillas: Escribir 'It's a great day' causará un error de sintaxis porque Python cree que la cadena termina después de It. La solución es escapar la comilla interna con una barra invertida ('It\'s a great day') o usar el otro tipo de comillas para delimitar la cadena ("It's a great day").


5. Asumir que los métodos de cadena modifican el original: Llamar a cadena.lower() sin asignar el resultado a nada es un error lógico. La cadena original permanece inalterada. Siempre asigna el resultado a una variable: cadena_minusculas = cadena.lower().



Checklist de Dominio


Antes de pasar a la siguiente lección, asegúrate de poder realizar y comprender cada uno de estos puntos:



  • Puedo crear cadenas usando comillas simples, dobles y triples, y justificar cuándo usar cada una.

  • Sé concatenar cadenas con + y repetirlas con *.

  • Puedo acceder a cualquier carácter de una cadena mediante indexación positiva y negativa (e.g., cadena[0], cadena[-1]).

  • Comprendo el concepto de inmutabilidad y puedo explicar por qué cadena[0] = 'a' genera un error.

  • Utilizo con soltura al menos 5 métodos de cadena (como .upper(), .strip(), .replace(), .find(), .split()) y sé que devuelven una nueva cadena.

  • Sé formatear cadenas dinámicas usando f-strings, incluyendo expresiones y formato básico de números dentro de las llaves.

  • Puedo transformar una cadena "cruda" o desordenada en un formato limpio y estructurado aplicando una secuencia lógica de métodos.

  • Reconozco y sé cómo evitar los errores comunes listados anteriormente, especialmente la concatenación de tipos diferentes y la confusión con índices.



Hablar por WhatsAppContactar por WhatsApp
Texto Leccion 3/9
Estas viendo
Cadenas de texto (Strings)