Les dejo una ayuda para el punto 5 del TP2, además de los datos de prueba de biblioteca que les dejé la otra vez. Si encuentran errores pueden dejar comentarios o avisarme por mail.
a) Recuerden que nbiblioteca (definido en biblioteca_borrador.py) es un nodo de árbol. En el punto 1a se define la función dato. Usándola obtenemos el dato relacionado al nodo, que es un objeto de tipo elementoBiblioteca. La clase elementoBiblioteca es muy sencilla, se puede consultar directamente su método texto.
b) Se puede usar la siguiente función. ¿Qué parámetro le pasaría?
def contarLibros(nodo):
if(nodo.dato().tipo()=='L'):
c = 1
else:
c = 0
p = nodo.hijoMI()
while(p):
c = c + contarLibros(p)
p = nodo.hermanoDerecho(p)
return c
c) Dado que no contamos con un método de eliminación simple (que elimine todo el subárbol), limítese a mencionar las dos operaciones que debería realizar una función mover(libro, origen, destino).
d) Podemos contar la cantidad total de capítulos con una función muy parecida a la del punto b y luego dividirla por la cantidad de libros.
e) Se puede usar la siguiente función:
def medirTextoYTitulos(nodo, enLibro=False):
"""
Mide la longitud del texto de los parrafos y los
titulos. El parametro enLibro debe ser True solo
si el nodo esta dentro de un libro
"""
if(nodo.dato().tipo()=='L'):
enLibro = True
if enLibro:
c = len(nodo.dato().texto())
else:
c = 0
p = nodo.hijoMI()
while(p):
c = c + medirTextoYTitulos(p, enLibro)
p = nodo.hermanoDerecho(p)
return c
y una variante de la siguiente:
def medirLibros(nodo):
if(nodo.dato().tipo()=='L'):
print " ", nodo.dato().texto(), medirTextoYTitulos(nodo)
p = nodo.hijoMI()
while(p):
medirLibros(p)
p = nodo.hermanoDerecho(p)
return c
f) Intente con lo siguiente.
def buscarLibro(buscarDesde, libro, camino=''):
nodo = buscarDesde
if(nodo.dato().tipo()=='L'):
if nodo.dato().texto() == libro.texto():
return camino
else:
return None
p = nodo.hijoMI()
while(p):
c = camino + '.' + buscarDesde.dato().texto()
c = buscarLibro(p, libro, c)
if c:
return c
p = nodo.hermanoDerecho(p)
return None
g) medirTextoYTitulos puede contar la cantidad de texto de un subárbol. Debería hacer una variante para que cuente solo los párrafos.
h) Es casi igual al punto g.
i) Usamos una estrategia similar a los anteriores, solo que no continuamos la recursión una vez encontrada una sección.
def seccionesPrimerNivel(nodo):
if(nodo.dato().tipo()=='S'):
return 1
p = nodo.hijoMI()
c = 0
while(p):
c = c + seccionesPrimerNivel(p)
p = nodo.hermanoDerecho(p)
return c
No hay comentarios.:
Publicar un comentario