In [ ]:
"""
IPython Notebook v4.0 para python 2.7
Librerías adicionales: Ninguna.
Contenido bajo licencia CC-BY 4.0. Código bajo licencia MIT. (c) Sebastian Flores.
"""
# Configuracion para recargar módulos y librerías
%reload_ext autoreload
%autoreload 2
from IPython.core.display import HTML
HTML(open("style/iwi131.css", "r").read())
Las Olimpiadas escolares nacionales se realizaron el año 2015 en Viña del Mar, la información se almacenó en una lista de tuplas de la forma (colegio, disciplina, participantes, puntos).
Un ejemplo de lo anterior:
olim2015 = [('Aleman', 'ajedrez', 8, 224),
('Pasteur', 'pinpon', 12, 38),
('Wilquimvoe', 'ajedrez', 5, 134),
('Mariano', 'natacion', 5, 500),
('LuisCampino', 'ajedrez', 10, 45),
('Wilquimvoe', 'pinpon',7, 434),
# ...
]
Para las olimpiadas del año 2014, sólo se almacenó el colegio y el número de participantes :
olim2014 = [('Aleman', 13),
('Comercial', 8),
('Pasteur', 4),
('RubenCastro', 10),
('LuisCampino', 5),
# ...
]
Los datos que aparecen son sólo de ejemplo, en realidad son muchos más.
Ahora, se le solicita a los alumnos de IWI-131 de la UTFSM desarrollar las funciones necesarias para satisfacer los siguientes requerimientos.
In [1]:
olim2015 = [('Aleman', 'ajedrez', 8, 224),
('Pasteur', 'pinpon', 12, 38),
('Wilquimvoe', 'ajedrez', 5, 134),
('Mariano', 'natacion', 5, 500),
('LuisCampino', 'ajedrez', 10, 45),
('Wilquimvoe', 'pinpon',7, 434),
# ...
]
olim2014 = [('Aleman', 13),
('Comercial', 8),
('Pasteur', 4),
('RubenCastro', 10),
('LuisCampino', 5),
# ...
]
Análisis:
In [11]:
def disciplina_impopular(olim2015):
# Obtener todas las disciplinas
lista_disciplinas = []
for colegio,disc,part,p in olim2015:
if disc not in lista_disciplinas:
lista_disciplinas.append(disc)
# Sumar participaciones de cada colegio
lista_disciplina_y_partipantes = []
for disciplina in lista_disciplinas:
suma = 0
for colegio,disc,part,p in olim2015:
if disc==disciplina:
suma += part
lista_disciplina_y_partipantes.append( (disciplina, suma) )
# Obtener el mínimo
min_part = float("inf")
min_disc = ""
for disc, part in lista_disciplina_y_partipantes:
if part < min_part:
min_disc = disc
min_part = part
# Regresar el minimo
return (min_disc, min_part)
# Probando la función
disc_impopular, part_impopular = disciplina_impopular(olim2015)
print "La disciplina con menor número de participantes es", disc_impopular, "con", part_impopular, "personas"
In [2]:
# Pregunta 2
def disciplina_popular_por_colegio(olim2015, colegio_buscado):
max_disc_nombre = ""
max_disc_participantes = -float("inf")
for colegio, disciplina, participantes, puntos in olim2015:
if participantes>max_disc_participantes and colegio==colegio_buscado:
max_disc_participantes = participantes
max_disc_nombre = disciplina
return (max_disc_nombre, max_disc_participantes)
# Probando la función
colegio = "Mariano" # "Mariano", etc..
disciplina, participantes = disciplina_popular_por_colegio(olim2015, colegio)
print "Para el colegio", colegio,
print "la disciplina con mayor número de participantes es", disciplina,
print "con", participantes, "personas"
In [14]:
# Pregunta 3
def colegios_aumento_participantes(olim2015, olim2014):
listado = []
for colegio2014,part2014 in olim2014:
suma=0
for colegio2015,actividad,part2015,puntaje in olim2015:
if colegio2014==colegio2015:
suma+=part2015
if suma>part2014:
listado.append(colegio2014) # No colegio2015, ojo!
return listado
# Probando la función
listado = colegios_aumento_participantes(olim2015, olim2014)
print listado