# ---
# jupyter:
#   jupytext:
#     text_representation:
#       extension: .py
#       format_name: light
#       format_version: '1.5'
#       jupytext_version: 1.14.4
#   kernelspec:
#     display_name: Python 3
#     language: python
#     name: python3
# ---

# # Ejercicio La Biblioteca | Repaso Week 1
# ## Precurso DSNov20 - The Bridge
#
# La 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.

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),("Harry Potter", 9),("Lectura Fácil", 4),("Seda", 2),\
              ("La chica de nieve", 6),("El día que se perdió la cordura", 3), ("Data Science", 0)]

# 1. ¿Cuántos títulos diferentes tienen en esta biblioteca?

#your code here
print(len(libros))

print(len(biblioteca))

# 2. ¿Cuántas letras componen la palabra *Seda*? 

#your code here
x = len("Seda")
print(x)

print(len(biblioteca[9][0]))

for _ in biblioteca:
    print(_)

for u in biblioteca:
    if u[0] == "Seda":
        print(len(u[0]))

# 3. ¿Cuántas unidades hay del libro *Seda*?

#your code here
for u in biblioteca:
    if u[0] == "Seda":
        print(u[1])

# 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**?

pendiente = 1984

#your code here
pendiente = str(pendiente)
libros.append(pendiente)

print(libros)

libros

# 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** 

libros

#your code here
libro_1 = "Balada de pájaros cantores y serpientes"
libros.append(libro_1)
libros

uds_1 = 10

nuevo_libro = [libro_1, uds_1]
print(type(nuevo_libro))
nuevo_libro = tuple(nuevo_libro)
print(type(nuevo_libro))

biblioteca.append(nuevo_libro)
biblioteca

nuevo_libro2 = (libro_1, uds_1)
print(type(nuevo_libro2))
nuevo_libro2


type(nuevo_libro2[0])

# 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**.

biblioteca

t = list(biblioteca[0])
t

t[1] = t[1] + 1
t

t = tuple(t)
t

biblioteca[0] = t
biblioteca

# Busca en google este error y explica porqué no se puede añadir una unidad más. ¿Se te ocurre cómo podrías alterar este dato?

# +
#your comment here
#done!
# -

# 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**.

# +
#your code here
#done above!
# -

# 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

#your code here
y = ('El mal de Corcira', 5)
biblioteca.append(y)
biblioteca

biblioteca.pop()

i = ('El mal de Corcira', 5)
biblioteca.remove(i)


biblioteca

# 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. 

biblioteca

for elem in biblioteca:
    if elem[1] == 0:
        print(elem[0])

# 8. ¿Cómo meterías estos dos elementos en una lista llamada **missing**?

# +
#your code here
missing = []

for elem in biblioteca:
    if elem[1] == 0:
        print("elem:", elem)
        libro_sin_unidad = elem[0]
        print("libro_sin_unidad:", libro_sin_unidad)
        missing.append(libro_sin_unidad)
        print("missing:", missing)
        print("##################")
# -

# 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`. 

print(libros)
print()
print(biblioteca)


def inventario(titulo, cantidad = 1, libros = libros, biblioteca = biblioteca):
    if titulo not in libros:
        libros.append(titulo)
        biblioteca.append((titulo, cantidad))
    else:
        for tup in biblioteca:
            if tup[0] == titulo:
                lista = list(tup)
                lista[1]+=cantidad
                biblioteca.append(tuple(lista))
                biblioteca.remove(tup)
                break              
    return libros, biblioteca


# Pruébalo añadiendo el título de "Guía del Autopista Galáctico", cantidad 42.

libros, biblioteca = inventario("Guía del Autopista Galáctico", 42)

biblioteca[-1]

# ### Bonus Track. 

# 10. ¿Cuál es el libro con más unidades? ¿Cuál es la media de libros por título?

unidades = []
for tupl in biblioteca:
    unidades.append(tupl[1])

for i, uni in enumerate(unidades):
    if uni == max(unidades):
        print(f"El libro con más unidades es {biblioteca[i][0]} con {uni} unidades")

import statistics as stats
print(f"La media de libros por título es: {round(stats.mean(unidades), 4)} unidades")

# 11. ¿Cuál tiene el título más largo y cuál el más corto?

# +
longitud = []
for libro in libros:
    longitud.append(len(libro))

for i, lon in enumerate(longitud):
    if lon == max(longitud):
        print(f"El título más largo es {libros[i]}")
    if lon == min(longitud):
        print(f"El título más corto es {libros[i]}")

StarcoderdataJupyterScriptsDedupFiltered