Skip to content

Revisión automática de la práctica 05-ordenabrillo-insercion

Este es el resultado de una revisión automática de la prácica 05-ordenabrillo-insercion, tal y como la hemos recogido de este repositorio de entrega. Por favor, ten en cuenta que al ser una revisión automática, realizada en parte con la ayuda de un asistente de inteligencia artificial generativa, puede incluir errores, y ser incorrecta. Pero leela con atención, porque creemos que puede tener información útil. Si tienes cualquier duda, o crees que la revisión es errónea, por favor, consulta con los profesores de la asignatura.


Comprobación de archivos con extension '.py'

  • Archivos Python excluidos de la búsqueda: pixels.py
  • Archivos Python encontrados (excluyendo esos): ordenabrilloinserccion.py

Correcto, se elige ordenabrilloinserccion.py como entrega.

Comprobación con ficheros de plantilla

Los archivos son diferentes de los de la plantilla.

Revisión automática de programa

Programa revisado:

import sys
from pixels import (genera_canvas_aleatorio, tam_lienzo,
                    pinta, espera, calcula_brillo)


def lee_orden():
    """Valida los argumentos de la línea de comandos y devuelve
     el orden de ordenación."""


def aplanar_canvas(canvas):
    """Devuelve una lista plana de píxeles a partir de
     un canvas bidimensional."""


def ordenar_pixeles_por_brillo_insercion(pixels, orden="ascendente"):
    """Ordena los píxeles por brillo en orden ascendente
     o descendente usando el algoritmo de inserción."""


def pintar_brillos_ordenados(pixels_ordenados):
    """Pinta los píxeles ordenados por brillo en el canvas."""


def main():
    orden = lee_orden()
    canvas = genera_canvas_aleatorio()
    espera()
    pixels_flat = aplanar_canvas(canvas)
    pixels_ordenados = ordenar_pixeles_por_brillo_insercion(pixels_flat, orden)
    pintar_brillos_ordenados(pixels_ordenados)
    espera()


if __name__ == "__main__":
    main()

Análisis

Cumple con el enunciado

El programa no cumple con el enunciado. Aunque la estructura básica del código está presente (definición de funciones, llamadas en main()), ninguna de las funciones requeridas tiene implementación. Las funciones lee_orden(), aplanar_canvas(), ordenar_pixeles_por_brillo_insercion() y pintar_brillos_ordenados() están vacías, por lo que el programa no realiza ninguna de las tareas solicitadas: no valida argumentos, no aplanar el canvas, no ordena píxeles ni los pinta. Al ejecutarse, fallaría al intentar usar valores no devueltos por las funciones vacías.

Es fácil de leer y entender

El código es parcialmente legible para un principiante. Los nombres de funciones y variables son descriptivos y coinciden con el enunciado, lo que ayuda a entender su propósito. Sin embargo, la ausencia total de implementación dificulta comprender cómo resolver el problema. Un alumno novato necesitaría ver ejemplos concretos de cómo interactuar con las funciones de pixels.py o cómo aplicar el algoritmo de inserción en este contexto.

Sigue buenas prácticas de programación

No sigue buenas prácticas en su estado actual. Aunque la estructura inicial (uso de if __name__ == "__main__":, comentarios descriptivos) es correcta, dejar funciones vacías sin siquiera esqueletos mínimos viola la práctica básica de implementar pasos incrementales. Además, no hay manejo de errores (ej.: en lee_orden() no se valida sys.argv), lo que generaría fallos en tiempo de ejecución.

Recomendaciones de mejora

  1. Implementa lee_orden() con validación básica:
    Usa sys.argv para verificar que se reciba "ascendente" o "descendente". Si no es válido, imprime print("Uso: python3 ordenabrillo.py [ascendente|descendente]") y usa sys.exit(1).

  2. Completa aplanar_canvas() con bucles anidados:
    Recorre el canvas bidimensional (fila por fila) y añade cada píxel a una lista nueva. Ejemplo:

    pixels = []
    for fila in canvas:
        for pixel in fila:
            pixels.append(pixel)
    return pixels
  3. Desarrolla el algoritmo de inserción en ordenar_pixeles_por_brillo_insercion():

    • Para cada píxel desde el segundo hasta el último:
      • Compara su brillo (usando calcula_brillo()) con los anteriores.
      • En modo "ascendente", mueve los píxeles con brillo mayor hacia la derecha.
      • En modo "descendente", haz lo contrario.
    • Usa un bucle while para desplazar elementos (como se enseña en el algoritmo clásico de inserción).
  4. Prueba cada función por separado:
    Antes de integrar todo en main(), verifica que aplanar_canvas() genere una lista correcta y que la ordenación funcione con una lista pequeña de píxeles de prueba.