Revisión automática de la práctica 03-imagen
Este es el resultado de una revisión automática de la prácica 03-imagen, 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'
- Comprobación con ficheros de plantilla
- Comprobación con ficheros de solución
- Revisión automática de programa
- Análisis
- Recomendaciones de mejora
Comprobación de archivos con extension '.py'
- Archivos Python excluidos de la búsqueda: pixels.py, invert.py
- Archivos Python encontrados (excluyendo esos): process.py
Correcto, se elige process.py como entrega.
Comprobación con ficheros de plantilla
Los archivos son diferentes de los de la plantilla.
Comprobación con ficheros de solución
Los archivos son diferentes de los de la solución.
Revisión automática de programa
Programa revisado:
#!/usr/bin/env python3
import sys
import pixels
def lee_argumentos() -> tuple[str, float, int]:
if len(sys.argv) != 4:
print("Uso: python process.py <foto> <brillo> <desplazamiento>", )
sys.exit(1)
foto = sys.argv[1]
brillo = float(sys.argv[2])
desplazamiento = int(sys.argv[3])
return foto, brillo, desplazamiento
def ajustar_brillo(factor: float) -> None:
for x in range(pixels.ancho):
for y in range(pixels.alto):
(r, g, b) = pixels.lee(x, y)
nuevo_r = min(255, int(r * factor))
nuevo_g = min(255, int(g * factor))
nuevo_b = min(255, int(b * factor))
pixels.pinta(x, y, (nuevo_r, nuevo_g, nuevo_b))
def desplazar_color(delta: int) -> None:
for x in range(pixels.ancho):
for y in range(pixels.alto):
(r, g, b) = pixels.lee(x, y)
r = max(0,min(255, r + delta))
g = max(0,min(255, g + delta))
b = max(0,min(255, b + delta))
pixels.pinta(x, y, (r, g, b))
def main():
foto, brillo, desplazamiento = lee_argumentos()
pixels.prepara(foto)
ajustar_brillo(brillo)
desplazar_color(desplazamiento)
pixels.espera()
if __name__ == "__main__":
main()
Análisis
Cumple con el enunciado
El programa no cumple exactamente con el enunciado en cuanto a los nombres de las funciones requeridas. El enunciado especifica que las funciones deben llamarse cambia_brillo y cambia_desplazamiento, pero el código usa ajustar_brillo y desplazar_color. Aunque la funcionalidad lógica es correcta (multiplicar por el factor de brillo y sumar el desplazamiento con límites 0-255), el incumplimiento en los nombres impide que el programa sea válido según las instrucciones.
Es fácil de leer y entender
El código es fácil de leer y entender para un principiante. Las funciones tienen nombres descriptivos (ajustar_brillo, desplazar_color), y los comentarios en el enunciado (aunque no están en el código) se alinean con la lógica implementada. Las variables (r, g, b, delta, factor) son claras y concisas. Sin embargo, el uso de nombres distintos a los especificados podría generar confusión al seguir el enunciado.
Sigue buenas prácticas de programación
El programa sigue buenas prácticas en cuanto al uso de bucles anidados para recorrer píxeles, validación de argumentos y manejo de errores con sys.exit(1). También aplica correctamente las operaciones de ajuste de brillo y desplazamiento, asegurando que los valores RGB estén dentro del rango 0-255. No obstante, no respeta las firmas exactas de las funciones requeridas, lo cual es un requisito explícito del enunciado.
Recomendaciones de mejora
-
Renombrar las funciones
ajustar_brilloydesplazar_coloracambia_brilloycambia_desplazamiento, respectivamente, para cumplir con las firmas especificadas en el enunciado. -
Eliminar la coma innecesaria en la llamada a
printdentro delee_argumentos:print("Uso: python process.py <foto> <brillo> <desplazamiento>") # Sin coma al final -
Verificar PEP8: Asegurarse de que el código siga las convenciones de estilo (espaciado en operadores, líneas no excesivamente largas, etc.). Por ejemplo:
# En lugar de: nuevo_r = min(255, int(r * factor)) # Puede usarse espaciado para mejorar legibilidad: nuevo_r = min(255, int(r * factor)) - Documentar funciones: Añadir comentarios o docstrings explicando qué hace cada función, especialmente para principiantes, para reforzar la comprensión.