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

Diagramas de flujo

Diagrama de flujo (actividad) del ejercicio 08

Diagrama de flujo (grafo) del ejercicio 08

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

Ejecútalo en el navegador

▶ Visualízalo paso a paso en Python Tutor — ve cómo cambian las variables línea a línea.

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