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())






IWI131

Programación de Computadores

Sebastián Flores

http://progra.usm.cl/

https://www.github.com/usantamaria/iwi131

Actividad 3 - Tuplas y Listas

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), 
            # ...
           ]

Actividad 3 - Tuplas y Listas

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), 
            # ...
           ]

Actividad 3 - Tuplas y Listas

Pregunta 1

Indicar cuál es la disciplina deportiva con menor número de participantes y cuántos son.

Actividad 3 - Tuplas y Listas

Análisis de pregunta 1

Análisis:

  • ¿Forma más fácil de resolver el problema? -> Función.
  • Input:
    • Lista olim2015 con elementos en formato (colegio, disciplina, participantes, puntos)
  • Output:
    • Regresar tupla con la disciplina deportiva con menor numero de participantes y cuántos son.

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"


La disciplina con menor número de participantes es natacion con 5 personas

Actividad 3 - Tuplas y Listas

Pregunta 2

Para un colegio indicar la disciplina deportiva con mayor número de participantes y la cantidad de participantes.

Actividad 3 - Tuplas y Listas

Análisis de pregunta 2

  • ¿Forma más fácil de resolver el problema? -> Función.
  • Input:
    • Lista olim2015 con elementos en formato (colegio, disciplina, participantes, puntos)
  • Output:
    • Tupla con la disciplina deportiva con mayor numero de participantes para un colegio dado y cuantos son.

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"


Para el colegio Mariano la disciplina con mayor número de participantes es natacion con 5 personas

Actividad 3 - Tuplas y Listas

Pregunta 3

Listados de los colegios que han aumentado el volumen de participantes desde la edición anterior.

Actividad 3 - Tuplas y Listas

Análisis de pregunta 3

  • ¿Forma más fácil de resolver el problema? -> Función.
  • Input:
    • Lista olim2015 con elementos en formato (colegio, disciplina, participantes, puntos)
    • Lista olim2014 con elementos en formato (colegio, total_participantes)
  • Output:
    • Imprimir en pantalla los colegios que han aumentado el volumen de participantes desde la edición anterior.

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


['Pasteur', 'LuisCampino']