Módulo 1 · Lección 5 de 59
Cadenas formateadas (f-strings)
La forma moderna de mezclar variables dentro de un texto, y cómo controlar decimales, alineación y separadores de millares.
El problema#
Quieres componer un mensaje mezclando texto y datos. Con lo que sabes hasta ahora tendrías que hacer esto:
nombre = "Erwin"
edad = 34
print("Hola, " + nombre + ". Tienes " + str(edad) + " años.")Funciona, pero es incómodo: hay que acordarse de los espacios, hay que convertir el número con str() y con cuatro variables se vuelve ilegible.
La solución: f-strings#
Pon una f justo antes de la comilla de apertura y podrás meter variables entre llaves:
nombre = "Erwin"
edad = 34
print(f"Hola, {nombre}. Tienes {edad} años.")Hola, Erwin. Tienes 34 años.Esa f viene de formatted. Dentro de las llaves puedes poner cualquier expresión, no solo un nombre de variable:
precio = 20
cantidad = 3
print(f"Total: {precio * cantidad} euros")
print(f"En mayúsculas: {nombre.upper()}")
print(f"El año que viene tendrás {edad + 1}")Total: 60 euros
En mayúsculas: ERWIN
El año que viene tendrás 35Controlar el formato#
Después del valor puedes poner dos puntos y una instrucción de formato. Aquí está casi todo lo que necesitarás:
Decimales#
pi = 3.14159265
precio = 1234.5
print(f"{pi:.2f}") # dos decimales
print(f"{pi:.4f}") # cuatro decimales
print(f"{precio:.2f} €")3.14
3.1416
1234.50 €.2f significa "formato de coma flotante con dos decimales". Fíjate en que rellena con ceros si hace falta: 1234.5 sale como 1234.50, que es justo lo que quieres para precios.
Separador de millares#
poblacion = 1234567
print(f"{poblacion:,}")
print(f"{poblacion:,.2f}")1,234,567
1,234,567.00Porcentajes#
completado = 0.734
print(f"Llevas un {completado:.1%}")Llevas un 73.4%El formato % multiplica por cien y añade el símbolo automáticamente.
Alineación y ancho#
Reserva un número de caracteres y decide hacia dónde se pega el contenido:
print(f"{'Nombre':<12}{'Edad':>5}")
print(f"{'Erwin':<12}{34:>5}")
print(f"{'Ana':<12}{7:>5}")
print(f"{'MENÚ':^30}")
print(f"{'MENÚ':=^30}")Nombre Edad
Erwin 34
Ana 7
MENÚ
=============MENÚ=============| Símbolo | Significa |
|---|---|
< | Alinear a la izquierda |
> | Alinear a la derecha |
^ | Centrar |
| El carácter antes del símbolo | Con qué rellenar en vez de espacios |
Esto es lo que te permitirá sacar tablas decentes por la terminal en el módulo 2.
Ceros a la izquierda#
print(f"Factura {3:04d}")
print(f"Factura {42:04d}")
print(f"Factura {137:04d}")Factura 0003
Factura 0042
Factura 0137El 4 es el ancho total y la d significa "número entero". Verás este formato en códigos de referencia, números de factura y horas.
Depurar con f-strings#
Un signo = dentro de las llaves imprime el nombre y el valor. Es comodísimo para depurar:
total = 42
print(f"{total=}")
print(f"{total * 2=}")total=42
total * 2=84Textos largos en varias líneas#
Para no pasarte del ancho de pantalla, puedes escribir cadenas consecutivas entre paréntesis y Python las unirá:
nombre = "Erwin"
puntos = 1250
mensaje = (
f"Hola {nombre}, "
f"tienes {puntos} puntos acumulados "
f"y te faltan {2000 - puntos} para el siguiente nivel."
)
print(mensaje)Hola Erwin, tienes 1250 puntos acumulados y te faltan 750 para el siguiente nivel.Cada trozo necesita su propia f.
Las formas antiguas#
Te las encontrarás en código de otros, así que conviene reconocerlas:
nombre = "Erwin"
print("Hola, %s" % nombre) # estilo de los años 90
print("Hola, {}".format(nombre)) # estilo Python 2.7 a 3.5
print(f"Hola, {nombre}") # estilo actual, desde Python 3.6Las tres funcionan. Usa siempre la tercera: es más corta, más rápida y mucho más legible.