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:
import sys
import pixels
from pixels import *
def cambia_brillo(brillo: float): #sumarle el valor de todos los cananles o bajarle el valor de todos los canales
ancho = pixels.ancho
alto = pixels.alto
for x in range (ancho):
for y in range (alto):
r, g, b = pixels.lee(x,y)
r = max(0, min(255, r * brillo))
g = max(0, min(255, g * brillo))
b = max(0, min(255, b * brillo))
pixels.pinta(x,y, (int(r),int(g),int(b)))
def cambia_desplazamiento(desplazamiento: int): #sumarles o restarles un numero a los colores
ancho = pixels.ancho
alto = pixels.alto
for x in range (ancho):
for y in range (alto):
r, g, b = pixels.lee(x,y)
if desplazamiento > alto or desplazamiento > ancho:
print("La imagen se saldría del lienzo")
exit()
pixels.pinta(x + desplazamiento,y + desplazamiento,(int(r),int(g),int(b)))
def lee_argumentos() -> tuple[str, float, int]:
if len(sys.argv) != 4:
print("Se necesitan 3 elementos: la imagen en.gif, el cambio de brillo (número real) y el desplazamiento de colores (número entero):")
exit()
else:
imagen = sys.argv[1].strip()
brillo = float(sys.argv[2])
desplazamiento = int(sys.argv[3])
tuple = (imagen, brillo, desplazamiento)
return tuple
def main():
imagen, brillo, desplazamiento = lee_argumentos()
pixels.prepara(imagen)
cambia_brillo(brillo)
cambia_desplazamiento(desplazamiento)
pixels.espera()
if __name__ == "__main__": #si ejecuto este programa como programa principal, ejecutame lo demas.
main()
Análisis
Cumple con el enunciado
- cambia_brillo: La función cumple parcialmente con el enunciado. Multiplica cada componente RGB por el factor de brillo y lo limita entre 0 y 255, pero no se especifica qué hacer si el factor es negativo (aunque el enunciado no lo prohíbe, el código lo maneja correctamente).
-
cambia_desplazamiento: No cumple con el enunciado. En lugar de sumar el desplazamiento a los componentes RGB, el código intenta desplazar la posición de los píxeles (x + desplazamiento, y + desplazamiento), lo cual es incorrecto. Además, el condicional
if desplazamiento > alto or desplazamiento > anchoes irrelevante para el problema planteado. -
lee_argumentos: Cumple con el enunciado, pero el uso de
tuplecomo nombre de variable es incorrecto (conflictos con el tipotuplede Python).
Es fácil de leer y entender
-
Variables y comentarios: Los comentarios están en español y son claros, pero el nombre
tupleenlee_argumentospuede confundir a principiantes. -
Lógica de desplazamiento: La función
cambia_desplazamientoes difícil de entender porque mezcla conceptos de desplazamiento de píxeles (coordenadas) con ajuste de color, lo cual no corresponde al enunciado. -
Estructura general: La estructura del programa sigue el orden solicitado, pero la implementación de
cambia_desplazamientoes confusa.
Sigue buenas prácticas de programación
-
Wildcard import: El uso de
from pixels import *no es recomendable (sobreescribe variables y dificulta la lectura). -
Manejo de errores: En
cambia_desplazamiento, elexit()es abrupto y no se justifica (el enunciado no menciona restricciones en el desplazamiento). -
Redundancia: La variable
tupleenlee_argumentoses innecesaria (se puede retornar directamente(imagen, brillo, desplazamiento)).
Recomendaciones de mejora
-
Corregir
cambia_desplazamiento:- Eliminar el condicional
if desplazamiento > alto or desplazamiento > ancho. - Sumar el desplazamiento a cada componente RGB:
r + desplazamiento,g + desplazamiento,b + desplazamiento. - Limitar los valores entre 0 y 255 (como en
cambia_brillo).
- Eliminar el condicional
-
Evitar
tuplecomo nombre de variable:- Renombrar
tupleaargsovaloresenlee_argumentos.
- Renombrar
-
Eliminar
from pixels import *:- Usar solo
import pixelspara evitar conflictos y mejorar la claridad.
- Usar solo
-
Validar tipos de entrada:
- Asegurar que
sys.argv[2]ysys.argv[3]se conviertan correctamente afloateint(agregartry-exceptpara manejar errores).
- Asegurar que
-
Simplificar
lee_argumentos:- Retornar directamente la tupla sin asignarla a una variable:
return (imagen, brillo, desplazamiento).
- Retornar directamente la tupla sin asignarla a una variable:
-
Revisar indentación en
cambia_desplazamiento:- La llamada a
pixels.pintaestá fuera de los buclesfor, lo que causaría que solo se pinte un píxel (el último del bucle). Debe estar dentro del bucle para modificar todos los píxeles.
- La llamada a