Domina los FStrings con confianza: aprende a aplicar modificadores de formato para números, texto y fechas con ejemplos claros. Verás cómo usar separador de miles, controlar decimales con redondeo, agregar ceros a la izquierda, alinear columnas para tablas con pipeline y dar formato legible a fechas, además de aprovecharlos para debugging más rápido.
¿Cómo dar formato a números con FStrings?
Los modificadores de formato se aplican tras los dos puntos. Esto permite generar salidas más legibles para personas, como separar miles con coma, limitar decimales con redondeo y rellenar con ceros a la izquierda.
¿Cómo aplicar separador de miles?
Usa la coma para miles: más legible para valores grandes.
Inserta el modificador tras el valor: dos puntos y coma.
bank_balance =1234567890texto =f"Tu saldo en la cuenta bancaria es {bank_balance:,}."print(texto)# Tu saldo en la cuenta bancaria es 1,234,567,890.
¿Cómo controlar decimales y redondeo?
Limita decimales con f: redondea automáticamente.
Cambia la precisión: .1f, .2f, etc.
stock_price =1.405texto =f"El valor del stock es {stock_price:.1f}."print(texto)# El valor del stock es 1.4.texto2 =f"El valor del stock es {stock_price:.2f}."print(texto2)# El valor del stock es 1.41.
¿Cómo agregar ceros a la izquierda?
Define el ancho mínimo con ceros: 03, 04, etc.
Indicado para IDs y códigos fijos.
user_id =1texto =f"Su ID es {user_id:03d}."print(texto)# Su ID es 001.user_id =100texto =f"Su ID es {user_id:04d}."print(texto)# Su ID es 0100.
¿Cómo alinear texto y crear tablas legibles?
Los FStrings permiten alinear valores con un ancho fijo, ideal para tablas simples con pipeline y sumarios más claros. Puedes alinear a la izquierda o a la derecha cambiando el indicador de alineación.
¿Cómo alinear columnas con anchura fija?
Especifica ancho tras los dos puntos: 15, 10, etc.
Alinea texto a la izquierda o números a la derecha para facilitar lectura.
Una fecha en su forma por defecto sale en formato ISO. Con modificadores, puedes mostrar día, número, mes, año y hora en una versión más legible. Además, los FStrings permiten imprimir variables y mensajes para encontrar errores más rápido.
¿Cómo mostrar una fecha completa legible?
Crea la fecha con datetime: año, mes, día y hora.
Aplica códigos de formato para nombre del día, día, mes, año y hora.
from datetime import datetime
fecha = datetime(2024,12,5,10,10)print(f"La fecha completa es {fecha}.")# formato ISO por defectoformato =f"La fecha completa es {fecha:%A, %d de %B del %Y a las %I y %M %p}."print(formato)# La fecha completa es jueves, 05 de diciembre del 2024 a las 10 y 10 A.M.
¿Cómo usar FStrings para debugging rápido?
Inserta variables directamente en el mensaje: más contexto.
Combina texto y valores calculados en una sola línea.
Útil para verificar estados y entradas del usuario.
user ="ana"items =["A","B","C"]print(f"debug: usuario={user}, total_items={len(items)}, items={items}")
¿Te animas al reto final? Comparte en comentarios tu solución en una sola línea para formatear un porcentaje o un número científico con FStrings, y cuéntanos tu caso de uso favorito.
Encontré uno Interesante! y es que En depuración o logging, !r es mejor porque muestra lo que Python realmente ve, no lo que el usuario debería ver, por ejemplo, en una clase:
classPersona:def__init__(self, nombre): self.nombre = nombre
def__str__(self):returnf"Hola, soy {self.nombre}"def__repr__(self):returnf"Persona(nombre={self.nombre!r})"p = Persona("Samuel")print(p)# usa __str__ (lo que el usuario ve)print(f"Debug: {p!r}")# usa __repr__(lo que tiene python realmente)
Entonces la salida es algo como:
Hola, soy Samuel
Debug: Persona(nombre='Samuel')
notas la diferencia?
Entonces, que es eso de __str__ y __repr_?
Según lo que investigue, Str es equivalente a la representación legible para humanos, mientras que repr es una representación más precisa para nosotros los desarrolladores.
Entonces, <u>para lo que nos interesa</u> de esta clase: repr usa el formato con !r y como dato adicional str usa !s (como ya adivinaras, es lo contrario, convierte un objeto a texto legible por ejemplo)
Muy útil para depurar! 🚀
Excelente aporte! Usar los literal string para debug es mi parte favorita!
masa_espacio =150000000000000000000000000000000000000000000000000000000print(f"Se estima que la materia oscura constituye el {0.27:0.2%} del contenido total del universo, aportando una masa aproximada de {masa_espacio:0.1e} kg en el universo observable.")
Se estima que la materia oscura constituye el 27.00% del contenido total del universo, aportando una masa aproximada de 1.5e+56 kg en el universo observable.
Buen ejemplo ✌️
Algo interesante acá es que el formato que devuelve la función de fecha lo devuelve en ingles por lo que junto con Gemini Code me pregunte como podría hacer que el resultado estuviese en español y este fue el codigo generado:
importlocalefrom datetime import datetime
# Establecemos el locale a español(es_ES) para que los nombres de días y meses se traduzcan
locale.setlocale(locale.LC_TIME,"es_ES")date =datetime(2024,12,5)text = f"La fecha completa es {date: %A %d de %B de %Y a las %I:%M %p}"print(text)
A su vez, me parece importante entender a qué formato corresponde cada una de las letras:
%A: Nombre completo del día de la semana (ej: "jueves"). Al haber configurado el locale a español, aparecerá en ese idioma.
%d: Día del mes como un número decimal con un cero a la izquierda si es necesario (del 01 al 31).
%B: Nombre completo del mes (ej: "diciembre").
%Y: Año completo con cuatro dígitos (ej: "2024").
%I: Hora en formato de 12 horas (del 01 al 12).
%M: Minutos (del 00 al 59).
%p: El equivalente local de AM o PM (en español suele ser "a. m." o "p. m.").
tasa_exito =0.85432# Formato automático (por defecto 6 decimales)print(f"Éxito: {tasa_exito:%}")# Salida: Éxito: 85.432000%# Formato redondeado a 1 decimalprint(f"Éxito: {tasa_exito:.1%}")# Salida: Éxito: 85.4%###################distancia_estelar =9460730472580.8probabilidad_subatomica =0.00000000000567# Notación científica estándarprint(f"Distancia: {distancia_estelar:e}")# Salida: Distancia: 9.460730e+12# Con precisión de 2 decimales y E mayúsculaprint(f"Mínimo: {probabilidad_subatomica:.2E}")# Salida: Mínimo: 5.67E-12
Ustedes sabian que esto, se puede hacer con python.
# Creating a simple data table
languages =["Python","R","SQL"]scores =[85,92,78]print("Programming Language Scores")print("-"*30)for lang, score inzip(languages, scores):print(f"{lang:<10} | {score:>5}"
Perfecto, las llaves del usuario también podrían estar en el string. Asi no se lee tan raro.
sun_gram =1989000000000000000000000000000text =f"La masa del sol es: {sun_gram:.2e} kg"print(text)
El formateo de strings es poderoso! Me gusta mucho, usa el resto de formateadores que están en esta lista:
"""Formatear numeros cientificos con f-strings"""numero =124.45text = f"El valor con notación científica es: {numero:.2e}"print(text) # El valor con notación científica es:1.24e+02"""Formatear numeros porcentuales con f-strings"""numero_porcentual =0.8976text = f"El valor numérico es: {numero_porcentual}. El valor porcentual es: {numero_porcentual:.2%}"print(text) # El valor numérico es:0.8976.El valor porcentual es:89.76%
En el ejemplo de formateo de fechas la salida está en Inglés. Así lo podríamos mirar en español:
import locale
from datetime import datetime
# Establecer localización en español (puede variar según el sistema)
locale.setlocale(locale.LC_TIME, "es_ES.UTF-8") # En Windows podría ser 'Spanish_Spain'
# Obtener la fecha actual
date = datetime.now()
# Crear el texto con formato en español
text = f"La fecha completa es {date:%A %d de %B de %Y a las %I:%M %p}"
avance_del_curso =0.28text =f"El avance del curso actualmente es de: {avance_del_curso:.1%}"print(text)
# Formateadores porcentaje y notación cinetíficalight_speed =299792458sun_distance =147000000000print(f"El valor de la velocidad de la luz en m/s en el vacío se representa en notación científica como: {light_speed:e}, que es aproximadamente un {light_speed / sun_distance:.4%} de la distancia entre el Sol y la Tierra")
Hola Recomiendo que prueben este código
importlocalefrom datetime import datetime
locale.setlocale(locale.LC_TIME,"es_CO.UTF-8")date = datetime.now()print(date.strftime("%A %d/%m/%Y"))print(date.strftime("Semana %U del año"))print(date.strftime("Día del año: %j"))print(date.strftime("Hora 24h: %H:%M:%S"))
# Ejemplo de uso de comprehensions con f-stringsarticles =[{"title":"Python logra nuevo éxito","source":{"name":"TechNews"}},{"title":"Mercado en crisis","source":{"name":"Finance"}},{"title":"Nueva tecnología","source":{"name":"TechNews"}},{"title":"Deportes hoy","source":{"name":"Sports"}},{"title":"Política actual","source":{"name":"News"}},{"title":"Ciencia avanza","source":{"name":"Science"}},{"title":"Economía global","source":{"name":"Finance"}},]titles =[f"{article['title']} ({article['source']['name']})"for article in articles]print("Títulos formateados con f-strings:")for title in titles:print(title)
# Formatear porcentajespercentage =0.12345print(f"El porcentaje es: {percentage:.2%}")# Formatear numero cientificoslarge_number =1234567890print(f"El número en formato científico es: {large_number:.2e}")
# Aqui el Reto# Para Porcentajes Hombres =144mujeres =458Total = Hombres + mujeres
print(f"El porcentaje de hombres en la poblacion es de {Hombres / Total:.2%}, mientras que las mujeres representan el {mujeres / Total:.2%}")# Numero CientificoDistancia_sol_Tierra =150000000print(f"La distancia del sol a la tierra es de {Distancia_sol_Tierra:.1e} km")
Encontré esta pagina que explica de una manera muy interesante los modificadores de formato
Reto cumplido:
# Formateo con porcentaje value =0.5868text =f"El porcentaje es: {value:.2%}"print(text)# Formateo con número científico value =123456789101112131415text =f"El número cientifico es: {value:.2e}"print(text)