Programación en Python
⌂ Índice

Programación en Python · Capítulo 5

Cadenas en Python

Python

Curso 2026 – 2027Programación

Repaso rápido: Lo que ya sabemos de las cadenas

Recordemos lo que vimos en las clases anteriores:

  1. Creación: Se crean con comillas simples (') o dobles (").
    🐍 Python
  2. Concatenación: Se pueden unir (concatenar) con el operador +.
    🐍 Python
  3. Repetición (*): Se pueden repetir usando el operador de multiplicación con un número entero.
🐍 Python
  1. Entrada y Salida: Las usamos con print() y siempre las obtenemos de input().
  2. Longitud: Podemos saber cuántos caracteres tienen con la función len().
    🐍 Python

Pero las cadenas son mucho más que eso. Vamos a ver todo lo que se puede hacer con ellas.

Las cadenas son secuencias: Indexación y Slicing

La característica más importante de una cadena es que es una secuencia ordenada de caracteres. Esto significa que cada carácter tiene una posición (un índice) y podemos acceder a él.

Indexación (acceder a un carácter)

En Python, los índices empiezan a contar desde cero (0).

Imagina la palabra "PYTHON" como una serie de cajas numeradas:

P Y T H O N
0 1 2 3 4 5

Para acceder a un carácter, usamos corchetes [] después de la variable.

🐍 Python

Tip: Indexación negativa Python también permite contar desde el final usando números negativos. El -1 es el último carácter, -2 el penúltimo, y así sucesivamente.

🐍 Python

Slicing (Extraer sub-cadenas)

El slicing (rebanado) nos permite extraer una porción de la cadena. La sintaxis es [inicio:fin].

  • inicio: El índice donde empieza la rebanada (incluido).
  • fin: El índice donde termina la rebanada (no incluido).
🐍 Python

Atajos para el slicing:

  • Si omites el inicio, Python asume que es desde el principio (0).
  • Si omites el fin, Python asume que es hasta el final.
🐍 Python

Inmutabilidad: Las cadenas no se pueden cambiar

Este es un concepto clave en Python. Una vez que creas una cadena, no puedes modificar sus caracteres. A esto se le llama inmutabilidad.

Si intentas cambiar un carácter directamente, obtendrás un error:

🐍 Python

¿Entonces cómo «modificamos» una cadena?

Creamos una nueva cadena a partir de la original.

🐍 Python

Métodos y operadores de cadenas

Las cadenas tienen muchas «funciones» incorporadas llamadas métodos y operadores especiales que nos facilitan la vida.

Operador in: Comprobando pertenencia

A menudo, no necesitamos saber dónde está algo, sino simplemente si está o no. Para esto usamos el operador in, que devuelve un booleano (True o False). Es perfecto para usarlo en condicionales if.

Sintaxis: subcadena in cadena_principal

🐍 Python

Importante: El operador in distingue entre mayúsculas y minúsculas.

🐍 Python

Cambio de mayúsculas y minúsculas

  • .upper(): Convierte toda la cadena a mayúsculas.
  • .lower(): Convierte toda la cadena a minúsculas.
  • .capitalize(): Pone en mayúscula solo el primer carácter.
  • .title(): Pone en mayúscula el primer carácter de cada palabra.
🐍 Python

Búsqueda y reemplazo

  • .find('texto'): Busca 'texto' dentro de la cadena y devuelve el índice de su primera aparición. Si no lo encuentra, devuelve -1.
  • .replace('viejo', 'nuevo'): Devuelve una nueva cadena reemplazando todas las apariciones de 'viejo' por 'nuevo'.
🐍 Python

Limpieza de espacios en blanco

  • .strip(): Elimina los espacios en blanco (o saltos de línea) al principio y al final de la cadena. Muy útil para limpiar la entrada del usuario.
🐍 Python

Formateo de cadenas, las f-strings

Hasta ahora, para combinar texto y variables, hemos usado +:

🐍 Python

Esto es engorroso: hay que tener cuidado con los espacios y convertir los números a str() manualmente.

Python nos ofrece una forma mucho mejor: las f-strings.

¿Cómo se usan?

  1. Pon una f justo antes de las comillas de apertura.
  2. Inserta tus variables directamente dentro de la cadena, rodeadas por llaves {}.
🐍 Python

Como ves, es mucho más limpio y legible. Dentro de las llaves puedes poner incluso operaciones:

🐍 Python

Aprovechando las f-strings

La utilidad real de las f-strings aparece cuando añadimos opciones de formato dentro de las llaves, justo después de la variable, separadas por dos puntos (:).

Sintaxis: f"{variable:formato}"

Veamos los casos más útiles.

Controlando el ancho y la alineación

Podemos reservar un número de espacios para nuestra variable y decidir cómo se alinea dentro de ese espacio. Esto es ideal para mostrar datos en columnas bien ordenadas.

  • < : Alinear a la izquierda (por defecto para texto).
  • ^ : Centrar.
  • > : Alinear a la derecha (por defecto para números).
🐍 Python

Salida:

|Ana            |
|    Rodrigo    |
|      Margarita|

Tip: Carácter de relleno Puedes especificar qué carácter usar para rellenar el espacio sobrante, poniéndolo justo antes del símbolo de alineación.

🐍 Python

Formateando números decimales (float)

Cuando trabajamos con cálculos, a menudo obtenemos resultados con demasiados decimales. Podemos controlar con precisión cuántos queremos mostrar.

La sintaxis es :.Nf, donde N es el número de decimales que queremos.

🐍 Python

Salida:

El valor de pi es: 3.14159265
El resultado de la división es: 3.3333333333333335
--- Formateado ---
El valor de pi es: 3.14
El resultado de la división es: 3.3333

Combinando formatos y otros trucos útiles

Lo mejor es que puedes combinar estas reglas. Por ejemplo, alinear un número y a la vez limitar sus decimales.

🐍 Python

Otros formatos muy prácticos:

  • Separador de miles (:,): Añade comas para hacer los números grandes más legibles.
    🐍 Python
  • Porcentajes (:%): Multiplica el número por 100 y le añade el símbolo %.
    🐍 Python

Ejercicios prácticos

1. Extractor de información

Pide al usuario que introduzca su dirección de email. Luego, usando slicing, extrae y muestra por separado el nombre de usuario y el dominio.

  • Pista: Primero, encuentra la posición del @ con el método .find().
  • Ejemplo: Si el email es nombre.apellido@gmail.com, el programa debería mostrar:
    • Nombre de usuario: nombre.apellido
    • Dominio: gmail.com

2. Formateador de nombres

  1. Pide al usuario su nombre completo (puede que lo escriba con mayúsculas, minúsculas y espacios extra).
  2. Limpia los espacios en blanco al principio y al final.
  3. Formatea el nombre para que aparezca en formato de título (la primera letra de cada palabra en mayúscula).
  4. Muestra un saludo personalizado usando una f-string, por ejemplo: ¡Bienvenido, Nombre Apellido!

3. Censor de palabras

  1. Pide al usuario una palabra que quiera censurar de esa frase.
  2. Pide al usuario que introduzca una frase, para censurarla.
  3. Usa el método .replace() para sustituir esa palabra por "[CENSURADO]".
  4. Muestra la frase original y la frase censurada.
  5. Extra: Integra los pasos 2-4 dentro de un bucle while para que el usuario pueda continuar introduciendo frases y aparezca censurado. Además, puedes usar el carácter ▮ para censurar.

4. Palíndromos

Un palíndromo es una palabra o frase que se lee igual de izquierda a derecha que de derecha a izquierda (ej: "ana", "radar", "oso").

  1. Pide al usuario una palabra.
  2. Limpia la palabra: conviértela a minúsculas y quítale los espacios con .replace(" ", "").
  3. Crea una versión invertida de la palabra. Pista: puedes usar slicing con un paso negativo palabra\[\:\:-1]
  4. Compara la palabra limpia con su versión invertida y dile al usuario si es un palíndromo o no.

5. Dibujante de separadores

Escribe un programa que haga lo siguiente:

  1. Pida al usuario un título para una sección.
  2. Pida al usuario un carácter para usar como adorno (ej: -, *, =, #).
  3. Calcule la longitud del título.
  4. Usando la multiplicación de cadenas, cree una línea de adorno que sea 4 caracteres más larga que el título (dos por cada lado).
  5. Muestre el título centrado con sus adornos.

Ejemplo de ejecución:

Introduce el título: Conceptos Básicos
Introduce el carácter de adorno: =

=======================
  Conceptos Básicos
=======================

Pista: Para la línea del título, puedes concatenar adorno + " " + titulo + " " + adorno.

6. Generador de tickets de compra

Objetivo: Crear un programa que simule un ticket de compra simple. El objetivo es que la salida esté perfectamente formateada y alineada, como un ticket real, utilizando las capacidades avanzadas de las f-strings.

Instrucciones:

  1. Define las variables: Crea variables para al menos tres productos diferentes. Cada producto debe tener un nombre (texto), una cantidad (puede ser entero o flotante) y un precio unitario (flotante). También define una variable para el tipo de IVA (por ejemplo, 21% se escribe como 0.21).

    🐍 Python
  2. Realiza los cálculos:

    • Calcula el total para cada producto (cantidad * precio).
    • Calcula el subtotal (la suma de los totales de todos los productos).
    • Calcula la cantidad de IVA a aplicar sobre el subtotal.
    • Calcula el total final (subtotal + IVA).
  3. Imprime el Ticket Formateado: Utiliza f-strings para imprimir el ticket. Debe tener:

    • Un encabezado para el ticket.
    • Cabeceras para las columnas: "Producto", "Cant.", "Precio Unit.", "Total". Asegúrate de que estén bien alineadas.
    • Una línea por cada producto, con los datos alineados bajo sus cabeceras. Los precios y totales deben mostrarse siempre con 2 decimales.
    • Una línea separadora.
    • Las líneas para el Subtotal, el IVA (mostrando el porcentaje aplicado) y el Total Final. Estas deben estar alineadas a la derecha.

Salida esperada:

Tu programa debería generar una salida que se vea exactamente así (con los mismos espacios y alineación):

==================================================
                 TICKET DE COMPRA
==================================================
Producto             Cant.  Precio Unit.     Total
--------------------------------------------------
Barra de pan             2          0.85      1.70
Leche (litro)            1          1.05      1.05
Manzanas (kg)          1.5          1.99      2.98
--------------------------------------------------
                             Subtotal:       5.73
                            IVA (21%):       1.20
                        TOTAL A PAGAR:       6.93

Pistas:

  • Para las cabeceras y las líneas de productos, combina la alineación a la izquierda (<) para el nombre del producto y a la derecha (>) para los números.
  • Usa el formato :.2f para todos los precios y totales.
  • Para la línea del IVA, puedes anidar una f-string dentro de otra para mostrar el porcentaje: f"IVA ({IVA:.0%}):"
  • Juega con los números de ancho en tus f-strings (ej: {variable:>10.2f}) hasta que las columnas queden perfectamente alineadas como en el ejemplo.