Skip to content

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'

  • 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:

***ERROR:***
 Error 1
Mensaje de error:
.F
======================================================================
FAIL: test_lee_formas_rect (test_argumentos.TestArgumentos.test_lee_formas_rect)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/tmp/_tempxfvv73ib/test_argumentos.py", line 27, in test_lee_formas_rect
    self.assertEqual(esperado, resultado)
    ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^
AssertionError: Lists differ: [{'tipo': 'rectángulo', 'x': 2, 'y': 3, 'ancho': 3, 'alto': 4, 'color': 'blue'}] != [{'tipo': 'rectangulo', 'x': 2, 'y': 3, 'ancho': 3, 'alto': 4, 'color': 'blue'}]

First differing element 0:
{'tipo': 'rectángulo', 'x': 2, 'y': 3, 'ancho': 3, 'alto': 4, 'color': 'blue'}
{'tipo': 'rectangulo', 'x': 2, 'y': 3, 'ancho': 3, 'alto': 4, 'color': 'blue'}

- [{'alto': 4, 'ancho': 3, 'color': 'blue', 'tipo': 'rectángulo', 'x': 2, 'y': 3}]
?                                                        ^

+ [{'alto': 4, 'ancho': 3, 'color': 'blue', 'tipo': 'rectangulo', 'x': 2, 'y': 3}]
?                                                        ^


----------------------------------------------------------------------
Ran 2 tests in 0.001s

FAILED (failures=1)



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:

#!/usr/bin/env python3
import sys
from pixels import tam_lienzo, pinta, espera

def lee_formas():

    args = sys.argv[1:]
    if not args:
        return []

    formas = []
    i = 0
    l = len(args)

    def leer_int(token, contexto):
        try:
            return int(token)
        except ValueError:
            print(f"Error: {contexto} debe ser un entero (valor: '{token}').")
            sys.exit(1)

    while i < l:
        tipo = args[i]
        if tipo == "cuad":
            if i + 3 >= l:
                print("Error: faltan parámetros para 'cuad'. Uso: cuad X Y LADO [color]")
                sys.exit(1)
            x = leer_int(args[i+1], "X de cuad")
            y = leer_int(args[i+2], "Y de cuad")
            lado = leer_int(args[i+3], "LADO de cuad")
            color = "black"
            if i + 4 < l and args[i+4] not in ("cuad", "rect"):
                color = args[i+4]
                i += 5
            else:
                i += 4
            formas.append({"tipo": "cuadrado", "x": x, "y": y, "lado": lado, "color": color})

        elif tipo == "rect":
            if i + 4 >= l:
                print("Error: faltan parámetros para 'rect'. Uso: rect X Y ANCHO ALTO [color]")
                sys.exit(1)
            x = leer_int(args[i+1], "X de rect")
            y = leer_int(args[i+2], "Y de rect")
            ancho = leer_int(args[i+3], "ANCHO de rect")
            alto = leer_int(args[i+4], "ALTO de rect")
            color = "black"
            if i + 5 < l and args[i+5] not in ("cuad", "rect"):
                color = args[i+5]
                i += 6
            else:
                i += 5
            formas.append({"tipo": "rectangulo", "x": x, "y": y, "ancho": ancho, "alto": alto, "color": color})

        else:
            print(f"Error: tipo de figura no reconocido: '{tipo}'. Usa 'cuad' o 'rect'.")
            sys.exit(1)

    return formas


def dibuja_cuadrado(x, y, lado, color="black"):

    if lado <= 0:
        return False

    ancho_lienzo, alto_lienzo = tam_lienzo()
    if x < 0 or y < 0 or x + lado > ancho_lienzo or y + lado > alto_lienzo:
        return False

    for i in range(lado):
        pinta(x + i, y, color)
        pinta(x + i, y + lado - 1, color)
        pinta(x, y + i, color)
        pinta(x + lado - 1, y + i, color)

    return True


def dibuja_rectangulo(x, y, ancho, alto, color="black"):

    if ancho <= 0 or alto <= 0:
        return False

    ancho_lienzo, alto_lienzo = tam_lienzo()
    if x < 0 or y < 0 or x + ancho > ancho_lienzo or y + alto > alto_lienzo:
        return False


    for i in range(ancho):
        pinta(x + i, y, color)
        pinta(x + i, y + alto - 1, color)

    for j in range(alto):
        pinta(x, y + j, color)
        pinta(x + ancho - 1, y + j, color)

    return True


def main():
    formas = lee_formas()
    if not formas:
        print("No hay formas. Fin.")
        return

    for f in formas:
        tipo = f["tipo"]
        if tipo == "cuadrado":
            ok = dibuja_cuadrado(f["x"], f["y"], f["lado"], f.get("color", "black"))
            print(f"cuadrado en ({f['x']},{f['y']}) lado={f['lado']} color={f.get('color','black')}: {'ok' if ok else 'fuera'}")
        elif tipo == "rectangulo":
            ok = dibuja_rectangulo(f["x"], f["y"], f["ancho"], f["alto"], f.get("color", "black"))
            print(f"rectangulo en ({f['x']},{f['y']}) {f['ancho']}x{f['alto']} color={f.get('color','black')}: {'ok' if ok else 'fuera'}")

    espera()


if __name__ == "__main__":
    main()