Format en Python 3: Explicación y creamos unas tablas de ejemplo!

En esta entrada vamos a ver la función format en python 3.- (exclusiva a partir de esta versión), la cual nos será muy útil para ordenar los datos de salida de nuestras aplicaciones!. Suponiendo que quieres dar como salida de tu programa una tabla con los resultados ordenados. Pues con esta función se te pondrá muy fácil!!

luces

Antes pido disculpas porque he dejado de lado este blog un poquillo, verás a los programadores en estas épocas nuestras madres/ abuelas nos envían a desenredar las luces del arbolito! Diablos!!

Pero venga, les compensare con buen código!!

 

Comenzando por lo más básico veamos un ejemplo sencillo:

 

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
#  format.py
#  

Nombre = input(str("Ingresa tu nombre \n")) #Solicitamos datos de entrada
print ("Tu nombre es {0}".format(Nombre)) #Formateamos la salida

 

En este código de ejemplo solicitamos la entrada mediante input al usuario y luego brindamos una salida utilizando format en python para ordenar el contenido de la variable Nombre dentro de una cadena de texto.

Sintaxis de format en python 3

A partir de la versión 3 de python recordamos que debemos utilizar paréntesis en todas las funciones por lo que esta no será la excepción. La función format se encuentra dentro de los paréntesis de la función print seguida de un punto! Veamos otro ejemplo para explicar mejor la sintaxis:

 

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
#  format.py
#  

Nombre = input(str("Ingresa tu nombre \n"))
Edad = int(input("Bien, ahora ingresa tu edad \n"))
NombreMascota = input(str("Ingresa el nombre de tu mascota \n"))
print ("Tu nombre es {0} y tienes {1} años. Tu mascota se llama {2}".format(Nombre, Edad, NombreMascota))

 

Como puedes apreciar colocamos las llaves donde se mostrará el contenido de la variable y dentro de ellas un número que corresponde con el orden de la variable dentro de la función format.

En este caso la variable «nombre» obtiene el identificador {0}

La variable edad obtiene el identificador {1}

Y, la de «NombreMascota» obtiene el identificador {2}

Estos números de identificación nos permiten repetir el uso de la variable indicando cual de ellas. También podemos colocar las llaves sin identificador, pero siempre se corresponderá con el orden en el que presentemos las variables dentro de .format() 

Un clásico ejemplo del uso y practicidad de los identificadores:

 

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
#  format.py
#  
a = 'abra'
b = 'cad'
print('{0}{1}{0}'.format(a, b))

 

Resultado: ‘abracadabra’

Abracadabra en python

No es magia, es format en python!!!!

‘a’ toma el valor de {0} y ‘b’ el valor de {1}, por lo que podemos repetirlos.

 

Otras funcionalidades de los identificadores { }

Los identificadores también nos van a permitir ordenar la salida en la función format en python. Por ejemplo para alinear a la derecha, izquierda o centrado! en otras características. Veamos cómo hacerlo:

En este caso vamos a imprimir abracadabra utilizando una alineación:

 

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
#  format.py
#  
a = 'abra'
b = 'cad'
print('{0:<5}{1:^5}{0:>5}'.format(a, b))

 

Resultado: ‘abra cad abra’

De esta forma alineamos el primer ‘abra’ a la izquierda utilizando el símbolo ‘<‘. El ‘cad’ en el centro utilizando el símbolo ‘^’ y a la derecha el otro ‘abra’ utilizando el símbolo ‘>’ seguido de los dos puntos. El número 5 indica la cantidad de caracteres o espacios en cada elemento para su alineación. Es decir a mayor este número más espaciados se alinearan.

 

Creando y alineando tablas con formato

Estoy seguro que comprender esto te va a agradar! Vamos a crear una tabla con determinada información usando format en python y la vamos a imprimir usando el intérprete.

Tabla con números del ‘1 al 10’ mostrando el resultado de la elevación al cuadrado y al cubo:

 

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
#  format.py
#
for x in range(1,11):
    print ('{3}{0:2d}{3} {3}{1:3d}{3} {3}{2:4d}{3}'.format(x, x * x, x * x * x, '|'))

 

Resultado:

Si te fijas el bucle for está creando un rango del 1 al 10 para ‘x’ y dentro de los paréntesis de format hacemos el cálculo, primero presentamos la ‘x’ sola. Lo que nos genera la primer columna con los números del 1 al 10.

La segunda ‘x * x’ genera la segunda columna con los resultados de estos números elevados al cuadrado y la tercera (xxx) nos genera la columna del cubo.

{3}{0:2d}{3}   {3}{1:3d}{3}   {3}{2:4d}{3}.format(x, x * x, x * x * x, ‘|’)

Analizando el código de esta manera (por colores) se nos va a hacer más comprensible. El indicador {3} en azul corresponde al carácter ‘|’ que forma las columnas.

Los numeros 0, 1, 2 en verde corresponden al orden de los elementos dentro de format (‘x’ para 0), (‘xx’ para 1),(‘xx*x’ para 3).

Y finalmente luego de los dos puntos encontramos el 2d, 3d, 4d que corresponden a la cantidad de caracteres para indicar la alineación de los elementos según la cantidad de cifras de los números. La letra ‘d’ se utiliza para indicar que son datos enteros, en el caso de datos de texto (string) se utiliza ‘s’

Ordenando listas dentro de tablas usando .format y .join

Si tuviésemos varias listas con diferentes datos o diccionarios y quisiéramos ordenarlos dentro de una tabla resultará muy fácil utilizando la función .join y .format

Join nos permite convertir listas / tuplas en cadenas de texto y viceversa. Y esto nos brinda una ventaja:

Las listas son mutables, las cadenas no. Por lo que si convertimos una cadena en lista podremos modificarla. Y luego volver a convertirla en cadena.

lentes de solSi ajam, y adonde voy con esto? A que podemos imprimir listas como cadenas dentro de una tabla, uniendolas utilizando .join y dándoles un formato con .format. A la vez que podemos modificar las listas y volverlas a imprimir! «eres un genio chico!!!, lastima que seas tan pobre!»

Pillate ahora este ejemplo, tenemos una lista con los alumnos y sus notas de todo el año. Queremos imprimir estos datos en una tabla para que se nos vea mas presentable. Pues lo hacemos así, checa:

 

 

 

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 
#  format.py
#
ListasAlumnos = [['Juan', 'Carmelo', 5, 7, 9, 7], ['Laura', 'Jazmine', 7, 8, 5, 6.66],
 ['Dario', 'Villalobos', 5, 6, 3, 4.66], ['Marito', 'Tasolo', 4, 7, 9, 6.666],
  ['Esteban', 'Quito', 9, 9, 8, 8.66]]
Tabla = """\
+---------------------------------------------------------------------+
| Nombre    Apellido        Primero Segundo Tercero     Promedio anual|
|---------------------------------------------------------------------|
{}
+---------------------------------------------------------------------+\
"""
Tabla = (Tabla.format('\n'.join("| {:<8} {:<10} {:>8} {:>6} {:>7} {:>23} |".format(*fila)
 for fila in ListasAlumnos)))
print (Tabla)

Resultado:

format python con listas creando una tabla

Ahora vamos a aclarar este código como siempre. Primeramente hacer hincapié en las listas que tenemos con las notas de los alumnos, las mismas respetan el orden de los elementos, como ves comienzan por el nombre y terminan con el promedio anual. Eso se debe respetar porque no indicamos el orden dentro del format.

Tabla = (Tabla.format('\n'.join("| {:<8} {:<10} {:>8} {:>6} {:>7} {:>23} |".format(*fila)
 for fila in ListasAlumnos)))

Como ves asignamos a la variable tabla el formato de la tabla, correspondiente a una fila. Comienza con el salto de línea para que al repetir el bucle for imprima una línea por iteración de lista. Luego le damos el formato a los 6 elementos de cada listas ordenándolos en la tabla para finalmente crear un bucle for que va iterando la Lista e imprimiendo fila por fila dentro de la tabla que joineamos.

Esto es la tabla:

Tabla.format(formatodelafila(incluidoJOIN) .format(*fila) for fila in listaAlumnos))

Analiza el código por parte, y lo veras tu mismo. Porque aquí join está convirtiendo la lista en una cadena y uniendola al resto de la tabla imprimiendo la fila dentro de ella, más precisamente donde se encuentran las llaves.

A partir de aquí puedes darle una salida más «sublime» a tus programas con format en python! y que así sea!

Por supuesto puedes jugar con este código y agregarle al usuario una opción de editar la tabla o agregar un nuevo alumno simplemente a través de un input respetando el orden de los datos. Luego solo vuelves a imprimir la tabla. No lo hago aquí para no desviarme demasiado 😉

Adiooos!Esto ha sido todo, espero te haya gustado y por supuesto servido tanto como a mi ! Nos vemos en la siguiente entrada! No olvides suscribirte a mi loco blog!! Bye bye

 

 


 

Sigue leyendo!
Entrada anterior! Siguiente entrada (Módulo 2)!

Compartir es agradecer! :)

10 comentarios en “Format en Python 3: Explicación y creamos unas tablas de ejemplo!”

  1. Carlos Ernesto Custodio Cadena

    Voy entrando a esto de Python, pero me ha gustado mucho el lenguaje, creo que me quedare con el, muy entretenido y útil tu blog; estoy usando un viejo i5 2da Gen 64 bits, 4 GB, 500 GB, Ubuntu 20.04, Python 3.8, Spyder 3.3.6.
    Había configurado antes VS Code y Anaconda, pero definitivamente esta mejor el IDE de Spyder. espero progresar pronto en la comprensión del lenguaje y sus bastas librerias.

  2. Hola me gusta tu blog, auque llegue muy tarde jejeje, Por cierto das muchos tips en cuanto a este hermoso lenguaje Python, pero hasta el momento no he visto por ejmplo que hay otra forma de imprimir usando format…cheka esto;

    print ( f»Tu nombre es {Nombre} y tienes {Edad} años. Tu mascota se llama {NombreMascota}»)

    Como veras, antes de la comilla se antepone la palabra «f» y dentro las llaves solo de pone la variable que deseas imprimir, Python lo interpreta como una funcion Format.

  3. Bueno, pues ya termine con el módulo, en verdad resultan bastantes asequibles las lecciones. Sin embargo para aprender pues hay que practicar mucho, así que hay mucho trabajo por hacer.

    Vamos por la otra parte.

  4. Excelente la informacion ! me sirvio para entender, voy a guardarme la pagina y ver todo lo que haya para poder seguir avanzando y profundizando en este lenguaje. Gracias !

  5. Muy buenas, me ha servido mucho tu explicación. pero tengo un consulta, he intentado centrar la tabla en el medio de la pantalla con éxito pero las llaves {} no se centran quedan siempre en el margen izquierdo, puedes darme alguna idea? yo lo que hice fue tabular la tabla.

    un ejemplo para que se entienda lo que digo:
    _____________________________
    | __________________________ |
    | | | |
    | | -> WAIT | |
    | | -> GO | |
    | |__________________________|sc|
    |_____________________________|

    mi código:

    Tabla = «»»\
    \t\t ____________________________
    \t\t| ________________________ |
    \t\t| | | |
    \t\t{}
    \t\t| |________________________sc|
    \t\t|____________________________|\
    «»»
    Tabla = (Tabla.format(‘\n’.join(«| | {:>9} {:<12} | |".format(*fila) for fila in menu_ops)))
    print(Tabla)

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.