<jupyter_start><jupyter_text>Ejercicio La Biblioteca | Repaso Week 1 Precurso DSApr21 - The BridgeLa versión original de esta Práctica es en español por lo que respetaremos sus orígenes y a su autora, <NAME>, y lo dejaremos en este idioma. Disculpen las molestias que esto pudiera ocasionarle como estudiante.  ![biblioteca](https://static2.abc.es/media/familia/2018/11/02/AdobeStock_210538561-kJTF--620x349@abc.jpg) Es tu primer día de trabajo en la Biblioteca de tu barrio y ya tienes tu primera tarea. Te acaban de pasar una lista con libros y la lista de unidades disponibles.<jupyter_code>libros = ["El mal de Corcira", "Un mundo feliz", "Lolita", "Crimen y castigo", "Python from for to pro",\
          "El señor de los anillos", "Cien años de soledad", "<NAME>", "Lectura Fácil", "Seda",\
          "La chica de nieve", "El día que se perdió la cordura", "Data Science"]
biblioteca = [("El mal de Corcira",4),("Un mundo feliz", 2),("Lolita", 5),\
              ("Crimen y castigo",2),("Python from for to pro", 0),("El señor de los anillos", 6),\
              ("Cien años de soledad", 5),("<NAME>", 9),("Lectura Fácil", 4),("Seda", 2),\
              ("La chica de nieve", 6),("El día que se perdió la cordura", 3), ("Data Science", 0)]<jupyter_output><empty_output><jupyter_text>1. ¿Cuántos títulos diferentes tienen en esta biblioteca?<jupyter_code>#your code here
print(len(libros))<jupyter_output>13<jupyter_text>2. ¿Cuántas letras componen la palabra *Seda*?<jupyter_code>#your code here
print(len("seda"))<jupyter_output>4<jupyter_text>3. ¿Cuántas unidades hay del libro *Seda*?<jupyter_code>#your code here
print(f"There are {biblioteca[9][1]} of {biblioteca[9][0]} in the library")
for elem in biblioteca:
    if elem[0] == "Seda":
        print(f"There are {elem[1]} left")<jupyter_output>There are 2 of Seda in the library
There are 2 left<jupyter_text>4. Quien registraba los libros antes de ti dejo pendiente de añadir a la lista **libros** la variable **pendiente**, además debió confundir el famoso libro de George Orwell *1984*, con un número, asignándolo como un integer.¿Puedes cambiarlo y pasar a string este elemento y añadirlo a **libros**?<jupyter_code>pendiente = 1984

#your code here
pendiente = str(pendiente)
libros.append(pendiente)
print(libros)<jupyter_output>['El mal de Corcira', 'Un mundo feliz', 'Lolita', 'Crimen y castigo', 'Python from for to pro', 'El señor de los anillos', 'Cien años de soledad', '<NAME>', 'Lectura Fácil', 'Seda', 'La chica de nieve', 'El día que se perdió la cordura', 'Data Science', '1984']<jupyter_text>5. Te piden que añadas a esta lista el nuevo libro de Los Juegos del hambre que se titula *Balada de pájaros cantores y serpientes*. Has contado las unidades y han llegado 10.     a. Crea una variable con el título del libro, que se llame **libro_1**. Añade este elemento a la lista **libros**.    b. Crea una variable con el número de unidades, que se llame **uds_1**.    c. Crea una variable que sea una lista llamada **nuevo_libro** en el que su primer elemento sea **libro_1** y el segundo **uds_1**.     d. Convierte a **nuevo_libro** a tupla.    (muestra qué tipo es ahora esta variable)    e. Añade **nuevo_libro** a la lista **biblioteca**<jupyter_code>#your code here
libro_1 = "Balada de pájaros cantores y serpientes"
uds_1 = 10
nuevo_libro = [libro_1, uds_1]
nuevo_libro = tuple(nuevo_libro)
print(type(nuevo_libro))
biblioteca.append(nuevo_libro)
print(biblioteca)<jupyter_output><class 'tuple'>
[('El mal de Corcira', 4), ('Un mundo feliz', 2), ('Lolita', 5), ('Crimen y castigo', 2), ('Python from for to pro', 0), ('El señor de los anillos', 6), ('Cien años de soledad', 5), ('<NAME>', 9), ('Lectura Fácil', 4), ('Seda', 2), ('La chica de nieve', 6), ('El día que se perdió la cordura', 3), ('Data Science', 0), ('Balada de pájaros cantores y serpientes', 10)]<jupyter_text>6. Acaban de traer una unidad más de *El mal de Corcira*, añade una unidad más al segundo elemento del primer elemento de la lista **biblioteca**.<jupyter_code>biblioteca[0] = list(biblioteca[0])
biblioteca[0][1] += 1
biblioteca[0] = tuple(biblioteca[0])
print(biblioteca)
biblioteca[0][1]
biblioteca[0][1] = biblioteca[0][1] - 1<jupyter_output><empty_output><jupyter_text>¿Cómo se te ocurre que podrías alterar este dato?<jupyter_code>#your comment here
Pasando la tupla a lista<jupyter_output><empty_output><jupyter_text>Convierte la tupla en una lista para poder modificar el segundo elemento y añadir esta unidad. Asigna la tupla convertida a lista a la variable **tup_to_list** haz los cambios, agrega la unidad y vuelve a añadir la lista ya convertida en tupla a la lista **biblioteca**.<jupyter_code>#your code here
biblioteca[0] = list(biblioteca[0])
biblioteca[0][1] += 1
biblioteca[0] = tuple(biblioteca[0])
print(biblioteca)<jupyter_output>[('<NAME>', 6), ('Un mundo feliz', 2), ('Lolita', 5), ('Crimen y castigo', 2), ('Python from for to pro', 0), ('El señor de los anillos', 6), ('Cien años de soledad', 5), ('<NAME>', 9), ('Lectura Fácil', 4), ('Seda', 2), ('La chica de nieve', 6), ('El día que se perdió la cordura', 3), ('Data Science', 0), ('Balada de pájaros cantores y serpientes', 10)]<jupyter_text>Ahora, tenemos dos tuplas con el libro *El mal de Corcira*, pero esto no es lo que queremos. Elimina el primer elemento de la lista **biblioteca**.Hint: https://www.programiz.com/python-programming/methods/list/remove<jupyter_code>#your code here<jupyter_output><empty_output><jupyter_text>7. Te han pedido que localices los títulos de los libros de los que no disponen de unidades. Es decir, su segundo elemento, es igual a 0.<jupyter_code>#your code here
for book in biblioteca:
    if book[1] == 0:
        print(book[0])<jupyter_output>Python from for to pro
Data Science<jupyter_text>8. ¿Cómo meterías estos dos elementos en una lista llamada **missing**?<jupyter_code>#your code here
missing = []
for book in biblioteca:
    if book[1] == 0:
        missing.append(book[0])
print(missing)<jupyter_output>['Python from for to pro', 'Data Science']<jupyter_text>9. Como en cualquier jornada de trabajo, recibes miles de email, hay uno que no habías visto pero en el que tu jefa te pide hacer un pequeño programita (función) que recoja el título de un libro y la cantidad de libros, este último parámetro por defecto será 1, chequée si tenemos ese título en la lista `libros` y si lo tenemos, sume esa cantidad a su cantidad en la lista `biblioteca` y si no, añada el título a `libros` y en una tupla nueva con la cantidad correspondiente a la lista `biblioteca`.<jupyter_code>#your code here
def check_book(titulo, cantidad):
    comparable = []
    for books in biblioteca:
        comparable.append(books[0])
    if titulo not in comparable:
        new_one = (titulo, cantidad)
        biblioteca.append(new_one)
        biblioteca[-1] = tuple(biblioteca[-1])
    else:
        for i, books in enumerate(biblioteca):
            if books[0] == titulo:
                biblioteca[i] = list(biblioteca[i])
                biblioteca[i][1] = biblioteca[i][1] + cantidad
                biblioteca[i] = tuple(biblioteca[i])<jupyter_output><empty_output><jupyter_text>Pruébalo añadiendo el título de "Guía del Autopista Galáctico", cantidad 42.<jupyter_code>#your code here
check_book("Guía del Autopista Galáctico", 42)
print(biblioteca)<jupyter_output>[('El <NAME>', 5), ('Un mundo feliz', 2), ('Lolita', 5), ('Crimen y castigo', 2), ('Python from for to pro', 0), ('El señor de los anillos', 6), ('Cien años de soledad', 5), ('<NAME>', 9), ('Lectura Fácil', 4), ('Seda', 2), ('La chica de nieve', 6), ('El día que se perdió la cordura', 3), ('Data Science', 0), ('Balada de pájaros cantores y serpientes', 10), ('Guía del Autopista Galáctico', 42)]<jupyter_text>Bonus Track10. ¿Cuál es el libro con más unidades? ¿Cuál es la media de libros por título?<jupyter_code>#your code here
def libro_más_unidades(biblios):
    unidades = []
    for books in biblios:
        unidades.append(biblios[1])
    mas_unidades = print("El libro con más unidades", biblioteca[(unidades.index(max(unidades))-1)][0], biblioteca[(unidades.index(max(unidades))-1)][1], "unidades" )
    return mas_unidades

        
libro_más_unidades(biblioteca)

def media_libros(bib):
    total_libros = 0
    for books in bib:
        total_libros = total_libros + books[1]
    media = total_libros // len(bib)
    respuesta = print("media de libros:", media)
    return respuesta
media_libros(biblioteca)<jupyter_output>El libro con más unidades Guía del Autopista Galáctico 42 unidades
media de libros: 6<jupyter_text>11. ¿Cuál tiene el título más largo y cuál el más corto?<jupyter_code>#your code here
def libro_mas_largo(bibl):
    longitud = []
    for books in bibl:
        longitud.append(len(books[0]))
    mas_largo = bibl[longitud.index(max(longitud))][0]
    return mas_largo
libro_mas_largo(biblioteca)

def libro_mas_corto(bibl):
    longitud = []
    for books in bibl:
        longitud.append(len(books[0]))
    mas_largo = bibl[longitud.index(min(longitud))][0]
    return mas_largo
print(libro_mas_largo(biblioteca))
print(libro_mas_corto(biblioteca))<jupyter_output>Balada de pájaros cantores y serpientes
Seda
{'fraction_non_alphanumeric': 0.124101894186806, 'fraction_numerical': 0.020465926409753973, 'mean_word_length': 4.814556962025317, 'pattern_counts': {'":': 1, '<': 64, '<?xml version=': 0, '>': 64, 'https://': 2, 'lorem ipsum': 0, 'www.': 1, 'xml': 0}, 'pii_count': 1, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '16', 'dir': 'jupyter-structured-clean-dedup', 'id': '408039', 'license': 'MIT', 'n_tokens_mistral': 3496, 'n_tokens_neox': 3417, 'n_words': 1099, 'path': 'week2_precurse_python_II/day2_python_VI/solutions/Ejercicio_Biblioteca.ipynb', 'repo_name': 'paleomau/MGOL_BOOTCAMP', 'size': '9249'}