Lección 3 de 12 · Nivel 1: Básico

Cadenas de texto (strings), f-strings e input() en Python

En esta lección
  1. Crear cadenas
  2. Unir y repetir textos
  3. f-strings: la forma moderna de construir mensajes
  4. Índices y rebanadas (slicing)
  5. Métodos de texto más útiles
  6. Pedir datos al usuario con input()
  7. Ejemplo completo: generador de usuario y correo
  8. Resumen
Lo que lograrás 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)
Usa siempre f-strings

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}"?

  • 1234.50
  • 1234.5
  • 1.234,50

:.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]?

  • "Pyt"
  • "Pyth"
  • "yth"

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étodoQué haceEjemplo → 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: "))
¿Y si el usuario escribe "veinte"?

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?

  • Funciona y suma 1
  • Da TypeError, porque input() devuelve texto: hay que usar int(edad)
  • Devuelve 1

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:

  1. Pida el nombre de un producto, su precio y la cantidad.
  2. Calcule el total con 18% de impuesto.
  3. 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 con int() o float().

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.

¿Quieres tu certificado gratis?

Crea tu cuenta, marca tus avances y descarga el certificado al terminar el curso.

Inscribirme gratis