import platform
platform.python_version()

"""
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
"""


r = 5

a = (r**2) * 3.141596

print a

"""
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"])

print color_list_1

print color_list_1 - color_list_2

        # Resultado = []
        # for i in color_list_1:
            # if not color_list_1[i] in color_list_2:
                # Resultado += color_list_1[i]
                # else:
                   # pass
               # print Resultado

"""
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
"""


import os
wkd = os.getcwd()

wkd.split("/")
        




"""
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]

print my_list

suma = 0

for i in my_list:
    
    suma += i
    
print suma

    

"""
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
"""


print my_list
print elemento_a_insertar

my_list.insert(0, elemento_a_insertar)
my_list.insert(2, elemento_a_insertar)
my_list.insert(4, elemento_a_insertar)
my_list.insert(6, elemento_a_insertar)

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
"""


new_list = [[] for _ in range(N)]
for i, item in enumerate(my_list):
    new_list[i % N].append(item)
print new_list

"""
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
"""


print max(list_of_lists)

"""
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
"""


Dict = {}

Dict[1] = 1**2 
Dict[2] = 2**2 
Dict[3] = 3**2 
Dict[4] = 4**2 
Dict[5] = 5**2 


print Dict

"""
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
"""


new_dic = {}

new_dic.update(dictionary_list[0])
new_dic.update(dictionary_list[1])
new_dic.update(dictionary_list[2])


print new_dic

"""
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
"""



for i in range(0,len(dictionary_list)):
    
    n = dictionary_list[i]['numero']
    sqr = n**2
    dictionary_list[i]['cuadrado'] = sqr
    
print dictionary_list

"""
Explanation: Salida Esperada: [{'numero': 10, 'cantidad': 5, 'cuadrado': 100} , {'numero': 12, 'cantidad': 3, , 'cuadrado': 144}, {'numero': 5, 'cantidad': 45, , 'cuadrado': 25}]
End of explanation
"""


def loca(list1,list2):
    print list1 - list2
    
loca(color_list_1, color_list_2)

"""
Explanation: Manejo de Funciones
12. Defina y llame una función que reciba 2 parametros y solucione el problema 3
End of explanation
"""


def marx(lista):
    return max(lista)

print marx(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 dic(N):
    Dict ={}
    for i in range(1,N):
        Dict[i] = i**2
    return Dict

print dic(4)
        

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


