Ejercicio 08 — Imprime una tabla alineada de productos y precios con formato numérico

Dificultad: rojo · Módulo 06 (Cadenas)

Enunciado

Imprime una tabla alineada de productos y precios con formato numérico

Cómo se resuelve

Imprimir una tabla alineada es el ejercicio “rojo” del módulo: junta alineación de texto con .ljust() y el mini-lenguaje de formato numérico de las f-strings.

  1. for nombre, precio in productos: — recorremos la lista de tuplas y desempaquetamos cada par (producto, precio) en dos variables de golpe.
  2. nombre.ljust(12) — “left justify”: rellena el nombre con espacios por la DERECHA hasta un ancho fijo de 12 caracteres. Así todos los nombres empiezan en la misma columna y los precios quedan alineados a la vez.
  3. f"{precio:>10,.2f}" — dentro de la f-string, tras los dos puntos va el formato: >10 alinea a la derecha en un ancho de 10; , mete el separador de miles (1299.00 se ve como “1,299.00”); .2f fuerza dos decimales fijos. Alinear los números a la derecha es lo que hace que las unidades, decenas y centenas cuadren en columna.
  4. Cada print compone una fila: nombre relleno a la izquierda + precio formateado a la derecha.

Trampa habitual: en C alinearías con printf("%-12s%10.2f", ...). Python ofrece dos rutas equivalentes: el método .ljust(12) sobre la cadena, o hacerlo también dentro de la f-string con {nombre:<12}. Mezclar ambos estilos funciona, pero conviene saber que < y > en la f-string hacen lo mismo que ljust/rjust.

Para practicar — cópialo y complétalo

Pega este esqueleto y completa los TODO. Es la mejor forma de aprender: inténtalo antes de mirar la solución.

# Curso de Python — Modulo 06: Cadenas: transformar y formatear
# Ejercicio 08 — PRACTICA (rellena los TODO)
# Enunciado: Imprime una tabla alineada de productos y precios con formato numérico
# Dificultad: rojo
# Ejecutar: python3 ej08_practica.py
 
# Lista hardcodeada de pares (producto, precio)
productos = [
    ("Manzana", 1.50),
    ("Leche", 0.99),
    ("Portatil", 1299.00),
]
 
# TODO: recorre los pares (nombre, precio) y por cada uno imprime una linea
#       nombre a la izquierda con ljust(12)
#       precio a la derecha con f"{precio:>10,.2f}" (ancho 10, miles, 2 decimales)
for nombre, precio in productos:
    print()  # reemplaza por el f-string con nombre.ljust(12) y precio formateado

Solución — cópiala y ejecútala

# Curso de Python — Modulo 06: Cadenas: transformar y formatear
# Ejercicio 08 — MODELO (resuelto)
# Enunciado: Imprime una tabla alineada de productos y precios con formato numérico
# Dificultad: rojo
# Ejecutar: python3 ej08_modelo.py
 
# Lista hardcodeada de pares (producto, precio)
productos = [
    ("Manzana", 1.50),
    ("Leche", 0.99),
    ("Portatil", 1299.00),
]
 
# ljust(12): nombre a la izquierda en un ancho fijo de 12
# f"{precio:>10,.2f}": precio a la derecha en ancho 10,
#                      con separador de miles (,) y 2 decimales
for nombre, precio in productos:
    print(f"{nombre.ljust(12)}{precio:>10,.2f}")

Cómo usarlo

Pega el código en un fichero y ejecútalo con tu toolchain habitual (o el botón de Ejecutar de tu editor). Antes de mirar la solución, intenta completar tú el esqueleto: es la mejor forma de aprender.

Conexiones