IIC2233 / syllabus-2019-1

Repositorio oficial del curso IIC2233 Programación Avanzada 🎉 🎊
43 stars 69 forks source link

Test funcion 2 #661

Closed fplois closed 5 years ago

fplois commented 5 years ago

Hola, queria saber por que razones podría no ejecutarse el test con la función 2, ya que cuando pruebo la función 2 directamente desde main.py, lo ejecuta y crea un archivo json. Pero cuando utilizo test.py no ejecuta mi función 2 y por lo tanto no crea un archivo son. Saludos.

Hernan4444 commented 5 years ago

Hola,

Recomiendo leer el archivo test.py y entender que está haciendo. En una parte del código se verifica si se está ocupando la estructura correctamente y en caso de no hacerlo, no prueba la función 2 y 3. Me tinca que está pasando eso.

De forma adicional, cuando indiques que algo no te funciona, siempre es bueno hacer push porque con lo que describes no podemos dar una respuesta 100% confiable mientras que viendo el código podemos dar una respuesta más adecuada a tu caso.

Saludos ✌️

fplois commented 5 years ago

hola, una duda de lo que dijiste, a que te refieres con usar al estructura correctamente?. De todas maneras hice push por si se el error se pueda deber a otra cosa. Gracias.

Hernan4444 commented 5 years ago

Hola,

Se refiere a que ocupen los 2 clases entregadas y los atributos indicados en el enunciado. Revisé tu código y no usas el clase Node y el atributo root no es una instancia de Node y por eso, test.py detecta eso y deja de corregir porque no se está cumpliendo los requisitos del enunciado.

Saludos :v:

fplois commented 5 years ago

hola, la clase Node es instancias dentro de funciones que son llamadas por build_and_save, igual no me las reconoce ?. a que te refieres con que el atributo root no es una instancia de Node, esta se la entro a la clase árbol. Saludos

iqacevedo commented 5 years ago

Hola @fplois !

El atributo root de la clase AlgarroboTree debe ser una instancia de la clase Node, eso se verifica ahí. Se espera que utilicen esa clase dentro de AlgarroboTree, por eso verificamos que estén utilizando esa clase y no otra para el root. Sobre lo que dices de build_and_save no entendí a que te refieres, ¿Podrías explicarlo mejor?

Quedo atento, Saludos !

fplois commented 5 years ago

Ya entendi lo del root y lo arregle, respecto a lo otro. Mi función build_and_save primero crea la clase Arbol y después llama a otra funciones que se encargan de generar el árbol y ver el balance. Dentro de estas funciones creo a todos los nodos con la clase Node y después con la clase Node genero el archivo json. Saludos

Hernan4444 commented 5 years ago

Hola,

Lo que hace build_and_save (tal como indicas) está super, pero debes asegurarte de usar la estructura que nosotros damos y no otra. Tal como se indica en el enunciado,se va a probar crear tu clase Arbol e insertar multiples nodos (con método insert y balance), luego utilizar los atributos right_child, left_child, root para acceder a los nodos insertados y validar que tengan el valor esperado. Por ejemplo test.py puede hacer:

tree = AlgarroboTree()
for n in range(1, 20): # Inserto del 1 al 20
    """
    como se insertan ordenados de menor a mayor, el balance no hará efecto
    """
    tree.insert(n)
    tree.balance()
if tree.root.left_child.left_child.left_child.left_child != 12:
    print("Árbol no valido")
    return False

Y con eso valido que la estructura está bien ocupada y se continúa con las otras funciones. Si falla ese validador, se asume que la estructura no está bien ocupada o no se está ocupando y se dejará de revisar los siguientes test.

Saludos ✌️

fplois commented 5 years ago

Disculpa volver a hacer otra consulta, hice un push ayer en la noche, estos comentarios que me indicas los haces con respecto a lo que subí ayer o uno anterior?.Es que cambie bastante mi función 2 con respecto al push anterior y ahora el test me indica que esta todo correcto. Gracias por la respuesta, Saludos.

Hernan4444 commented 5 years ago

Hola no he revisado el código que subiste ahora, lo digo general porque un alumno me mostró que estaba asumiendo que si el validador de test.py funciona, está todo perfecto, pero ese test.py no valida toooooodo.

Por ejemplo, el archivo dado solo valida que un árbol de 3 nodos esté correcto, pero no de 20 nodos y justamente la tarea de ese alumno no funcionó cuando validamos con 20 nodos, por eso preferí avisar aquí para que no se expongan a confiar que su estructura está bien validada si test.py funcionó, porque se pueden crear test distintos y ahí puede fallar.

saludos ✌️

fplois commented 5 years ago

Ok, Muchas gracias. Saludos

fplois commented 5 years ago

Una duda con respecto a la estructura, estaría bien que yo utilice las clases que nos dieron para generar el árbol y nodos pero que utilice los valores de los nodos en un diccionario para poder trabajar mas fácilmente con ellos, hacer el swap y comprobar si es Invalid Tree? Saludos

Hernan4444 commented 5 years ago

Si eso hace que no se ocupen los atributos obligatorios como corresponde, no es posible. El objetivo de la tarea es manejar estructura de árboles y navegar por ellos, con un diccionario no se logra esto a no ser que uses los atributos obligatorios como corresponde y además uses diccionario.

fplois commented 5 years ago

Para aclarar mi duda, es que yo utilizo todo lo que me dan en algún momento, como ejemplo: en la función 2 a partir del data = [1,2,3,4,5] yo lo agrego a mi clase árbol y insertando los nodos, pero después creo el diccionario de esta manera: diccionario[self.nodo.value] = [self.nodo.left_child.value, self.nodo.right_child.value], para trabajar mas failmente. de todas maneras utilizo las estructuras que me dan. Salludos

Hernan4444 commented 5 years ago

Lamento informar que está mal, porque con eso no se puede evaluar que sepan recorrer como corresponde un árbol. Se indica que left_child es una instancia de otro Nodo, lo cual implica que esta se está solicitando una estructura recursiva. Con lo que haces, si yo hago root.left_child.left_child.left_child.left_child.value no voy a llegar a ese nodo y por lo tanto, no se ocupa la estructura como corresponde.

fplois commented 5 years ago

hola, disculpa pero puedo dejar lo del swap implementado como ya lo tengo, con lo del diccionario y el árbol resultante, dejarlo como me lo indicas tu. De forma que lo pueda recorrer así : root.left_child.left_child.left_child.left_child.value. Saludos

Hernan4444 commented 5 years ago

Adelante, mientras asegures que el luego de utilizar los métodos insert y balance, yo puedo llegar a recorrer el árbol con los atributos root, left_child y right_child.