import sys
print('{0[0]}.{0[1]}'.format(sys.version_info))

"""
Explanation: Taller 1: Básico de Python

Funciones
Listas
Diccionarios

Este taller es para resolver problemas básicos de python. Manejo de listas, diccionarios, etc.
El taller debe ser realizado en un Notebook de Jupyter en la carpeta de cada uno. Debe haber commits con el avance del taller. Debajo de cada pregunta hay una celda para el código.
Basico de Python
1. Qué versión de python está corriendo?
End of explanation
"""


pi = 3.1416
radio = 5
area= pi * radio**2

print(area)

"""
Explanation: 2. Calcule el área de un circulo de radio 5
End of explanation
"""


color_list_1 = set(["White", "Black", "Red"]) 
color_list_2 = set(["Red", "Green"])
color_list_1 - color_list_2

"""
Explanation: 3. Escriba código que imprima todos los colores de que están en color_list_1 y no estan presentes en color_list_2
Resultado esperado : 
{'Black', 'White'}
End of explanation
"""


path = 'C:/Users/Margarita/Documents/Mis_documentos/Biologia_EAFIT/Semestre_IX/Programacion/'
size = len (path)
guardar =  ""
for i in range(3,size):
    if path[i] != '/':
        guardar = guardar + path[i]
    else:
        print(guardar)
        guardar = ""



"""
Explanation: 4 Imprima una línea por cada carpeta que compone el Path donde se esta ejecutando python
e.g. C:/User/sergio/code/programación
Salida Esperada:
+ User
+ sergio
+ code
+ programacion
End of explanation
"""


my_list = [5,7,8,9,17]

sum_list = sum (my_list)

print(sum_list)

"""
Explanation: Manejo de Listas
5. Imprima la suma de números de my_list
End of explanation
"""


elemento_a_insertar = 'E'
my_list = [1, 2, 3, 4]

"""
Explanation: 6. Inserte un elemento_a_insertar antes de cada elemento de my_list
End of explanation
"""


elemento_a_insertar = 'E'
my_list = [1, 2, 3, 4]
size = len (my_list)
carpeta = []
for i in range(size):
    carpeta = carpeta + [elemento_a_insertar,my_list[i]]
my_list = carpeta
print (my_list)

"""
Explanation: La salida esperada es una lista así: [E, 1, E, 2, E, 3, E, 4]
End of explanation
"""


N = 3
my_list = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n']

"""
Explanation: 7. Separe my_list en una lista de lista cada N elementos
End of explanation
"""


N=3 
lista=[]
listaa = []
my_list = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n']
size = len(my_list)

for i in range(N):
    lista = lista + [listaa]
for i in range (size):
    lista[i%N] = lista[i%N] + [my_list[i]]
print(lista)

"""
Explanation: Salida Epserada: [['a', 'd', 'g', 'j', 'm'], ['b', 'e', 'h', 'k', 'n'], ['c', 'f', 'i', 'l']]
End of explanation
"""


list_of_lists = [ [1,2,3], [4,5,6], [10,11,12], [7,8,9] ]

"""
Explanation: 8. Encuentra la lista dentro de list_of_lists que la suma de sus elementos sea la mayor
End of explanation
"""


list_of_lists = [ [1,2,3], [4,5,6], [10,11,12], [7,8,9] ]
size = len(list_of_lists)
carpeta = list_of_lists[1]
for i in range(size):
    if sum(list_of_lists[i]) > sum(carpeta):
        carpeta = list_of_lists[i]
print(carpeta)

"""
Explanation: Salida Esperada: [10, 11, 12]
End of explanation
"""


N = 5

"""
Explanation: Manejo de Diccionarios
9. Cree un diccionario que para cada número de 1 a N de llave tenga como valor N al cuadrado
End of explanation
"""


N = 5
diccio = {}
for i in range(1,N+1):
    diccio [i]= i**2
print(diccio)

"""
Explanation: Salida Esperada: {1:1, 2:4, 3:9, 4:16, 5:25}
End of explanation
"""


dictionary_list=[{1:10, 2:20} , {3:30, 4:40}, {5:50,6:60}]

"""
Explanation: 10. Concatene los diccionarios en dictionary_list para crear uno nuevo
End of explanation
"""


dictionary_list=[{1:10, 2:20} , {3:30, 4:40}, {5:50,6:60}]
final= {}
for i in dictionary_list:
    for k in i:
        final[k] = i[k] 
print(final)

"""
Explanation: Salida Esperada: {1: 10, 2: 20, 3: 30, 4: 40, 5: 50, 6: 60}
End of explanation
"""


dictionary_list=[{'numero': 10, 'cantidad': 5} , {'numero': 12, 'cantidad': 3}, {'numero': 5, 'cantidad': 45}]

"""
Explanation: 11. Añada un nuevo valor "cuadrado" con el valor de "numero" de cada diccionario elevado al cuadrado
End of explanation
"""


def diferencia_conjuntos(color_list_1, color_list_2):
     print (color_list_1 - color_list_2)

# Implementar la función
diferencia_conjuntos(    
    color_list_1 = set(["White", "Black", "Red"]) , 
    color_list_2 = set(["Red", "Green"]))       
        

"""
Explanation: Salida Esperada: [{'numero': 10, 'cantidad': 5, 'cuadrado': 100} , {'numero': 12, 'cantidad': 3, , 'cuadrado': 144}, {'numero': 5, 'cantidad': 45, , 'cuadrado': 25}]
Manejo de Funciones
12. Defina y llame una función que reciva 2 parametros y solucione el problema 3
End of explanation
"""


def max_list_of_lists(list_of_lists):
    size = len(list_of_lists)
    carpeta = list_of_lists[1]
    for i in range(size):
        if sum(list_of_lists[i]) > sum(carpeta):
            carpeta = list_of_lists[i]
    print(carpeta)

# Implementar la función
list_of_lists = [ [1,2,3], [4,5,6], [10,11,12], [7,8,9] ]
max_list_of_lists (list_of_lists)

"""
Explanation: 13. Defina y llame una función que reciva de parametro una lista de listas y solucione el problema 8
End of explanation
"""


def diccionario_cuadradovalor(N):
    diccio = {}
    final = {}
    for i in range(1,N+1):
        final = diccio [i]= i**2
    print(diccio)

#Implementar la función:
N = 5
diccionario_cuadradovalor(N)

"""
Explanation: 14. Defina y llame una función que reciva un parametro N y resuleva el problema 9
End of explanation
"""


