Lección 3 de 12 · Nivel 1: Básico
Cadenas de texto (strings), f-strings e input() en Python
En esta lección
- Crear, unir y recortar textos con índices y slicing.
- Construir mensajes con f-strings y formato de números.
- Usar los métodos de texto más útiles.
- Pedir datos al usuario con input() y convertirlos.
Casi todos los programas trabajan con texto: nombres de clientes, correos, mensajes, códigos de producto. En Python el texto se llama cadena o string (str). En esta lección aprenderás a manipularlo, a construir mensajes con f-strings y a pedir datos al usuario con input() para que tus programas sean interactivos.
Crear cadenas
saludo = "Hola"
ciudad = 'Medellín'
frase = "Dijo: 'nos vemos mañana'" # comillas simples dentro de dobles
parrafo = """Este texto
ocupa varias
líneas."""
Para caracteres especiales se usa la barra invertida: \n es un salto de línea y \t un tabulador.
print("Producto:\tCafé\nPrecio:\t\t12.50")
Unir y repetir textos
nombre = "Ana"
apellido = "Ruiz"
completo = nombre + " " + apellido # "Ana Ruiz"
print("-" * 20) # una línea de 20 guiones
Para unir un texto con un número primero hay que convertirlo: "Edad: " + str(30). Si no, obtendrás un TypeError. Por suerte, hay una forma mucho mejor.
f-strings: la forma moderna de construir mensajes
Pon una f antes de las comillas y escribe las variables entre llaves:
producto = "Teclado"
precio = 25.5
cantidad = 3
print(f"{cantidad} x {producto} = {precio * cantidad}")
# 3 x Teclado = 76.5
Dentro de las llaves puedes poner cualquier expresión. Y puedes dar formato a los números:
total = 1234567.891
print(f"Total: {total:,.2f}") # Total: 1,234,567.89 (separador de miles y 2 decimales)
print(f"Avance: {0.875:.1%}") # Avance: 87.5%
print(f"Código: {42:05d}") # Código: 00042 (rellena con ceros)
Son más legibles y rápidas que concatenar con + o usar .format(). Funcionan desde Python 3.6, así que cualquier instalación actual las soporta.
1. Con precio = 1234.5, ¿qué devuelve f"{precio:.2f}"?
:.2f muestra el número con exactamente dos decimales.
Índices y rebanadas (slicing)
Cada carácter de una cadena tiene una posición, empezando en 0. Los índices negativos cuentan desde el final:
codigo = "PE-2041-X"
print(codigo[0]) # P
print(codigo[-1]) # X (el último)
print(codigo[0:2]) # PE (desde 0 hasta 2, sin incluir el 2)
print(codigo[3:7]) # 2041
print(codigo[:2]) # PE (desde el inicio)
print(codigo[3:]) # 2041-X (hasta el final)
print(len(codigo)) # 9 (número de caracteres)
Regla para recordar la rebanada [inicio:fin]: incluye el inicio y excluye el fin. Así, [0:2] son 2 caracteres.
2. Con texto = "Python", ¿qué devuelve texto[0:3]?
Los índices empiezan en 0 y la rebanada [inicio:fin] no incluye el fin: posiciones 0, 1 y 2.
Métodos de texto más útiles
Los métodos son funciones que se aplican a un valor con un punto. Las cadenas tienen muchos; estos son los que más vas a usar:
| Método | Qué hace | Ejemplo → resultado |
|---|---|---|
.upper() / .lower() | Mayúsculas / minúsculas | "lima".upper() → "LIMA" |
.title() | Primera letra de cada palabra en mayúscula | "ana ruiz".title() → "Ana Ruiz" |
.strip() | Quita espacios al inicio y al final | " hola ".strip() → "hola" |
.replace(a, b) | Reemplaza texto | "1.250".replace(".", "") → "1250" |
.split(sep) | Divide en una lista | "a;b;c".split(";") → ['a', 'b', 'c'] |
sep.join(lista) | Une una lista en un texto | ", ".join(["a","b"]) → "a, b" |
.startswith() / .endswith() | ¿Empieza / termina con…? | "foto.jpg".endswith(".jpg") → True |
.find(x) | Posición de x (−1 si no está) | "hola".find("l") → 2 |
.count(x) | Cuántas veces aparece x | "banana".count("a") → 3 |
x in texto | ¿Contiene x? | "@" in "ana@mail.com" → True |
Importante: las cadenas son inmutables. Los métodos no cambian la cadena original, devuelven una nueva. Por eso hay que guardar el resultado: nombre = nombre.strip().title().
Pedir datos al usuario con input()
input() muestra un mensaje, espera a que el usuario escriba y pulse Enter, y devuelve lo que escribió siempre como texto:
nombre = input("¿Cómo te llamas? ")
print(f"Encantado, {nombre.strip().title()}")
Si necesitas un número, conviértelo:
edad = int(input("¿Cuántos años tienes? "))
print(f"El año que viene tendrás {edad + 1}")
precio = float(input("Precio: "))
int("veinte") produce un ValueError y el programa se detiene. En la lección 8 aprenderás a manejarlo con try/except. Por ahora, asume que el usuario escribe bien. Y recuerda que float() espera punto decimal: float("12,5") falla; puedes hacer float(texto.replace(",", ".")).
3. Escribes edad = input("Edad: ") y luego edad + 1. ¿Qué ocurre?
input() siempre devuelve un str, aunque la persona escriba un número.
Ejemplo completo: generador de usuario y correo
nombre = input("Nombre: ").strip().lower()
apellido = input("Apellido: ").strip().lower()
anio = input("Año de nacimiento: ").strip()
usuario = f"{nombre[0]}{apellido}{anio[-2:]}"
correo = f"{nombre}.{apellido}@empresa.com"
print(f"Usuario: {usuario}")
print(f"Correo: {correo}")
Con "Ana", "Ruiz" y "1996", el programa muestra aruiz96 y ana.ruiz@empresa.com.
Ejercicio práctico
Escribe un programa que:
- Pida el nombre de un producto, su precio y la cantidad.
- Calcule el total con 18% de impuesto.
- Muestre un ticket con este formato (los números con 2 decimales):
------------------------------
Producto: Mouse inalámbrico
Cantidad: 2
Subtotal: 50.00
Impuesto: 9.00
TOTAL: 59.00
------------------------------
Ver solución
producto = input("Producto: ").strip()
precio = float(input("Precio: ").replace(",", "."))
cantidad = int(input("Cantidad: "))
subtotal = precio * cantidad
impuesto = subtotal * 0.18
total = subtotal + impuesto
print("-" * 30)
print(f"Producto: {producto}")
print(f"Cantidad: {cantidad}")
print(f"Subtotal: {subtotal:.2f}")
print(f"Impuesto: {impuesto:.2f}")
print(f"TOTAL: {total:.2f}")
print("-" * 30)
Resumen
- Las cadenas se crean con comillas; los índices empiezan en 0 y
[inicio:fin]excluye el fin. - Las f-strings (
f"{variable:.2f}") son la mejor forma de construir textos. - Métodos clave:
strip,lower,title,replace,split,join. input()siempre devuelve texto: convierte conint()ofloat().
En la próxima lección: Condicionales en Python: if, elif, else y match. Verás tomar decisiones, condiciones compuestas, valores verdaderos y falsos, ternario y match.
Crea tu cuenta, marca tus avances y descarga el certificado al terminar el curso.