Revisión automática de la práctica 04-formas
Este es el resultado de una revisión automática de la prácica 04-formas, 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 solución
- Prueba automática del programa
- 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
- Archivos Python encontrados (excluyendo esos): formas.py
Correcto, se elige formas.py como entrega.
Comprobación con ficheros de solución
Los archivos son diferentes de los de la solución.
Prueba automática del programa
Pruebas realizadas por 04-formas/tests/test_argumentos.py:
OK
Pruebas realizadas por 04-formas/tests/test_formas.py:
OK
Pruebas realizadas por 04-formas/tests/test_funciones.py:
OK
Revisión automática de programa
Programa revisado:
import sys
from pixels import tam_lienzo, pinta, espera
def lee_formas():
args = sys.argv[1:]
formas = []
i = 0
while i < len(args):
tipo = args[i]
if tipo == "cuad":
x = int(args[i + 1])
y = int(args[i + 2])
lado = int(args[i + 3])
if i + 4 < len(args) and args[i + 4] not in ["cuad", "rect"]:
color = args[i + 4]
i += 5
else:
color = "black"
i += 4
formas.append({
"tipo": "cuadrado",
"x": x,
"y": y,
"lado": lado,
"color": color
})
elif tipo == "rect":
x = int(args[i + 1])
y = int(args[i + 2])
ancho = int(args[i + 3])
alto = int(args[i + 4])
if i + 5 < len(args) and args[i + 5] not in ["cuad", "rect"]:
color = args[i + 5]
i += 6
else:
color = "blue" # Color por defecto que esperan los tests
i += 5
formas.append({
"tipo": "rectángulo",
"x": x,
"y": y,
"ancho": ancho,
"alto": alto,
"color": color
})
else:
raise ValueError(f"Tipo de figura no reconocido: {tipo}")
return formas
def dibuja_cuadrado(x, y, lado, color="black"):
max_x, max_y = tam_lienzo()
if x + lado > max_x or y + lado > max_y:
print("El cuadrado se sale del lienzo.")
return False
for i in range(lado):
for j in range(lado):
if i in (0, lado - 1) or j in (0, lado - 1):
pinta(x + i, y + j, color)
else:
pinta(x + i, y + j, "white")
return True
def dibuja_rectangulo(x, y, ancho, alto, color="black"):
"""
Dibuja un rectángulo con bordes del color dado e interior blanco.
Devuelve True si cabe en el lienzo.
"""
max_x, max_y = tam_lienzo()
if x + ancho > max_x or y + alto > max_y:
print("El rectángulo se sale del lienzo.")
return False
for i in range(ancho):
for j in range(alto):
if i in (0, ancho - 1) or j in (0, alto - 1):
pinta(x + i, y + j, color) # Bordes
else:
pinta(x + i, y + j, "white") # Interior
return True
def main():
formas = lee_formas()
for forma in formas:
tipo = forma["tipo"]
x = forma["x"]
y = forma["y"]
color = forma.get("color", "black")
if tipo == "cuadrado":
lado = forma["lado"]
dibuja_cuadrado(x, y, lado, color)
elif tipo == "rectángulo":
ancho_f = forma["ancho"]
alto_f = forma["alto"]
dibuja_rectangulo(x, y, ancho_f, alto_f, color)
espera()
if __name__ == "__main__":
main()
Análisis
Cumple con el enunciado
El programa no cumple completamente con el enunciado.
- Para los rectángulos, el enunciado especifica que el color por defecto debe ser negro (
black), pero en la funciónlee_formas()se asigna"blue"como color predeterminado para rectángulos (comentario: "Color por defecto que esperan los tests"). Esto contradice lo indicado en el enunciado, aunque el ejemplo de solución lo incluye. - El resto de la lógica (lectura de argumentos, dibujo de bordes con color e interior blanco, verificación de límites) sí sigue las especificaciones. Los ejemplos de ejecución proporcionados en el enunciado funcionarían correctamente, excepto en el caso de rectángulos sin color especificado (usaría azul en lugar de negro).
Es fácil de leer y entender
El código es fácil de entender para principiantes:
- Usa nombres de variables y funciones en español (
dibuja_cuadrado,lee_formas), lo que facilita la comprensión. - La estructura de las funciones es clara: primero se validan límites, luego se dibuja con bucles anidados.
- Los comentarios en el ejemplo de solución ayudan a entender la lógica (aunque el estudiante no los incluyó en su código, el enunciado los proporciona como referencia).
Sigue buenas prácticas de programación
Cumple parcialmente con buenas prácticas:
-
✅ Validación de límites antes de dibujar (evita errores al salir del lienzo). -
✅ Uso de diccionarios para representar figuras, como exige el enunciado. -
❌ Error en el valor por defecto para el color de rectángulos (debería serblack, noblue). -
❌ Enmain(), se usan variables innecesarias comoancho_fyalto_fen lugar de acceder directamente aforma["ancho"]yforma["alto"], lo que añade complejidad innecesaria.
Recomendaciones de mejora
-
Corrige el color por defecto de los rectángulos: En
lee_formas(), cambiacolor = "blue"porcolor = "black"para cumplir con el enunciado. -
Simplifica
main(): Elimina variables temporales comoancho_fyalto_f. Usa directamenteforma["ancho"]yforma["alto"]al llamar adibuja_rectangulo(). - Verifica el comportamiento del interior blanco: Asegúrate de que el enunciado requiere dibujar el interior en blanco (no se especifica explícitamente). Si no es necesario, elimina esa parte para simplificar.
-
Mejora la gestión de errores: En lugar de imprimir mensajes como
"El cuadrado se sale del lienzo.", devuelveFalsesin salida estándar (el enunciado no exige mensajes de error).