2Eva_IT2019_T3 Prueba de escritorio, conjuntos

2da Evaluación I Término 2019-2020, Agosto 30, 2019

Tema 3. (10 puntos) ¿Qué muestra el siguiente código? Justifique su respuesta

A = {3, 6, 7, 13, 19}
B = {13, 15, 19, 23, 29}
C = A.union(B)- B.intersection(A)
D = A.symmetric_difference(B)
if C == D:
    print('Vaya a la oficina 2')
else:
    print('Regrese a la oficina 5')

Nota: Asuma que este tema NO tiene errores de compilación. Si usted cree que hay algún error de compilación, consúltelo inmediatamente con su profesor.

2Eva_IT2019_T2 Separar indicadores

2da Evaluación I Término 2019-2020, Agosto 30, 2019

Tema 2. (40 puntos) Dado el archivo indicadores.csv​ con el siguiente formato:

Indicador, columna, min1|max1|puntaje1, min2|max2|puntaje2, ..., minN|maxN|puntajeN

Ejemplo:

Indicador,Columna,Puntajes
Num_empresas,17,0|9|1,10|19|2,...
Num_coworkings,5,0|15|10,16|30|15,...

Y el archivo ​estadisticas.csv​ con el siguiente contenido de ejemplo:

Buenos Aires, México, Budapest, ... 
Ciudad,Indicador,valor 
Santiago de Chile,Num_empresas,58
Guayaquil,Inversion en $,17423...
Guayaquil,Num_coworkings,5

Nota: La primera línea del archivo ​estadisticas.csv​ tiene los nombres de todas las ciudades presentes en el archivo, mientras que la segunda línea es su cabecera. Una ciudad puede estar repetida en varias líneas del archivo pero con un indicador diferente.

Escriba un programa en Python que cree el diccionario ​indicadores​, el arreglo ​ciudades​ y la matriz ​M​ utilizados en el ​TEMA 1​.

Rúbrica: crear diccionario ( puntos), crear arreglo ( puntos), crear matriz ( puntos) Nota: puntos detallados no indicados en el impreso del examen original.

2Eva_IT2019_T1 Indicador de innovación por ciudad

2da Evaluación I Término 2019-2020, Agosto 30, 2019

Tema 1. (50 puntos) Asuma que tiene la matriz M cuyas filas representan ciudades del mundo, las columnas representan indicadores de innovación y cada celda contiene el valor que tiene la ciudad para un indicador.

Además, cuenta con el diccionario indicadores con el siguiente formato:

indicadores = {'Num_empresas':{'columna':17,
                               'puntaje':{(0,9):1,
                                          (10,19):2,
                                          ...}
                               },
               'Num_coworkings':{'columna':5,
                                 'puntaje':{(0,15):10,
                                            (16,30):15,...}
                                 },
               ...
               }

Finalmente, cuenta con un arreglo ciudades con los nombres de las ciudades en el mismo orden que aparecen en las filas de la matriz M.

Implemente las siguientes funciones:

a. obtenerPuntajes(M, indicadores, indicador) que recibe la matriz M , el diccionario de indicadores , y el nombre de un indicador; y devuelve un vector con el puntaje obtenido por cada ciudad en ese indicador.
Por ejemplo: Si una ciudad, tiene un valor de 15 para el indicador 'Num empresas', obtendrá 2 como puntaje.

b. crearMatrizPuntajes(M, indicadores) que recibe la matriz M y el diccionario de indicadores; y retorna una matriz de puntajes( P) cuyas filas representan ciudades, las columnas representan indicadores y el valor de cada celda representa el puntaje obtenido por esa ciudad en ese indicador.

c. topCiudades(P, minPuntaje, ciudades, K) que recibe una matriz de puntajes P, un puntaje mínimo, el arreglo con los nombres de las ciudades y un entero K; y retorna un arreglo con los nombres de las ciudades cuyo total de puntos en los primeros K indicadores (columnas) sea al menos minPuntaje.

d. numEmpresas(M, P, indicadores, N) que recibe la matriz M ,una matriz de puntajes P, el diccionario indicadores y un entero N. Encuentre las N ciudades con mayor puntaje total y retorne el número promedio de empresas (indicador 'Num empresas') de esas ciudades.

Rúbrica: literal a (14 puntos), literal b (12 puntos), literal c (10 puntos), literal d (14 puntos)


Referencias: https://www.distrito100.com/, https://www.eluniverso.com/noticias/2019/04/21/nota/7292456/guayaquil-da-primer-paso-busca-innovacion/

 

1Eva_IT2019_T4 Prueba de escritorio, arreglos

1ra Evaluación I Término 2019-2020, Julio 5, 2019

Tema 4. (10 puntos) ¿Qué muestra el siguiente código? Justifique su respuesta

import numpy as np

arr = np.array([3,2,1,5,4,2,4,1])
d = 'eaiuo'
p = '*'

for a in range(arr[arr <= 3].size):
  p = p + d[a]*(arr == a).sum() + ​'​\n'
print(p)

1Eva_IT2019_T3 Componentes para Vehículos

1ra Evaluación I Término 2019-2020, Julio 5, 2019

(Editado para tarea, se mantiene el objetivo de aprendizaje)

Tema 3. (50 puntos)

La fábrica ACME se encarga de fabricar diversos componentes para vehículos. Para esto, tiene varias líneas de fabricación.

Asuma que tiene los siguientes arreglos:

P  = np.array(["ct-32", "mto-990", "ct-32"...])
PF = np.array([789, 1500, 900 ...])
PD = np.array([26, 35, 70, ...])
D  = np.array([300, 12, 100, ...])
CF = np.array([1000, 2000, 1100, ...])

Donde​ P​ es un arreglo con los códigos de las piezas fabricadas.
El arreglo​ PF tiene la cantidad total de piezas fabricadas en el día.
El arreglo​ PD indica la cantidad de piezas defectuosas por producto en el día.
El arreglo​ D ​indica el día del año de fabricación de la pieza (1 a 365).
Finalmente, el arreglo ​CF ​indica cuales la capacidad máxima de productos que se pueden fabricar, para cada tipo de pieza, en un día determinado.

​ Un mismo producto se puede fabricar varias veces al año pero no varias veces en un mismo día.

a. ​Escriba una función llamada​ produccionAnual(codigo,P,PF) que retorne la cantidad total de piezas ​código​ fabricadas en el año.

b. El rendimiento de fabricación de un producto se mide de la siguiente forma:

Escriba la función rendimientoPromedio(codigo, P, PF, PD, CF, D)​ que retorna el rendimientopromedio diario para ​codigo​. El rendimiento promedio diario es igual a rendimiento/total_dias_fabricacion.

c. ​Escriba la función ​porcentajeAnualDefecto(codigo, P, PD, PF)​, que retorna el porcentaje de defectos que tiene un ​código​. El porcentaje de defectos se calcula como sigue:

\text{porcentaje defectos} = \frac{\text{total piezas defectuosas}}{\text{total piezas fabricadas}}(100)

d. Escriba la función ​productosDefectuosos(codigos, P, PF, PD, porcentajemax)​, que retorna un arreglo con los códigos de los productos que están en la lista ​codigos​ y que tengan porcentaje de defectos mayor a l valor dado por la variable «porcentajemax»​.

e. ​Escriba la función ​minimoPorcentajeDefecto(P, PF, PD)​, que retorna como resultado el código del producto con el menor porcentaje anual de defectos.

Rúbrica: literal a (6 puntos), literal b (12 puntos), literal c (12 puntos), literal d (10 puntos), literal d (10 puntos).

1Eva_IT2019_T2 Consumo de datos por Aplicación

1ra Evaluación I Término 2019-2020, Julio 5, 2019

(Editado para tarea, se mantiene el objetivo de aprendizaje)

Tema 2. (20 puntos)  Asuma que tiene una lista con el consumo de datos de las aplicaciones en su celular durante un mes, semejante a lo mostrado en el siguiente ejemplo:

junio = ['Facebook-10Megas',
         'Spotify-55Megas',
         'Spotify-112Megas',
         'Whatsapp-12Megas',
         ...
         ]

Observe que las aplicaciones en la lista se pueden repetir.

Muestre por pantalla la cantidad de “Megas” que ha utilizado durante el mes por cada aplicación.

1Eva_IT2019_T1 Juego de las Ruedas

1ra Evaluación I Término 2019-2020, Julio 5, 2019

(Editado para tarea, se mantiene el objetivo de aprendizaje)

Tema 1. (20 puntos) Escriba un programa que implemente el “Juego de las Ruedas”.

Para esto genere aleatoriamente una lista de 15 elementos, donde cuatro elementos deben decir “Rueda” y los otros once “X”.

Luego el programa deberá pedirle al jugador que ingrese por teclado índices entre 0 y 14 (​validar) correspondientes a la posición de la rueda.

  • Asuma que el jugador siempre ingresa índices distintos.
  • Si el índice ingresado por el usuario corresponde al de una “Rueda”, gana $1000.
  • Si el jugador encuentra las cuatro “Ruedas” se gana un carro. ​
  • El jugador tiene siete intentos para hallar las cuatro “Ruedas”.
  • El juego termina cuando encuentra las cuatro “Ruedas” o ha usado todos los intentos​.

En cada intento muestre por pantalla el número total de “Ruedas” encontradas hasta el momento. Al final muestre  el premio que recibe el jugador (cantidad de dólares o la palabra “carro” si encontró las cuatro ruedas).

3Eva_IIT2018_T2 Jugadores Sudamericano Sub-20

3ra Evaluación II Término 2018-2019. 15-Febrero-2019 /CCPG001

Tema2. (60 puntos) Asuma que tiene un archivo por cada partido jugado en el Sudamericano Sub-20. Cada archivo tiene información con datos de los jugadores que participaron en el partido con el siguiente formato:

Ejemplo:
Pais,Jugador,Tarjetas_Amarillas,Tarjetas_Rojas,Goles,Minutos,KM_recorridos
...
Ecuador,Jose Cifuentes,1,0,0,75,6.3
Uruguay,Sebastian Caceres,2,1,0,90,7
Ecuador,Leonardo Campana,0,0,1,87,10
...

Implemente las siguientes funciones:

1.  actualizaDiccionario(nomArchivo,dic) que recibe el nombre de un archivo con los datos del partido y actualiza el diccionario de totales por jugador que tiene el siguiente formato:

dic = {'Ecuador': {'Leonardo Campana': {'TA': 0,
                                        'TR': 0,
                                        'Goles': 1,
                                        'Minutos': 87,
                                        'KM': 10.0}},
       'Uruguay': {'Sebastian Caceres': {'TA': 2,
                                         'TR': 1,
                                         'Goles': 0,
                                         'Minutos': 90,
                                         'KM': 7.0}
                   }
       }

2. buenDeportista(jugador, dic) que recibe el nombre de un jugador y el diccionario de totales y determina si ese jugador puede ser catalogado como un «buen deportista»; la función retorna «True» o «False» . Un jugador se considera «buen deportista»si ha recibido menos de dos tarjetas por cada 270 minutos de juego.

3.JugadorAtleta(jugador,dic) que recibe el nombre de un jugador y el diccionario de totales, determinando si el jugador ha corrido como mínimo el promedio de lo que han corrido los jugadores de su pais y ha anotado al menos un gol; la función retorna «True» o «False»

4. paisBuenasPracicas(pais,dic) que recibe el nombre de un país y el diccionario de totales, analizando si ese país puede ser nominado para el «Best Practices award». Un país puede ser nominado a este premio si TODOS los jugadores del país pueden ser catalogados como «buen deportista». La funcion retorna «True»o «False»

Escriba un programa que:

5. Forme el diccionario de totales a partir de una lista con los nombres de los archivos de datos de los partidos. Asuma que tiene una lista para esta tarea:

L = ['br-ur.csv', ...,'ec-vn.csv']

6. Muestre los siguiente datos por país:

a. Porcentaje de jugadores atletas. es decir e número de jugadores atletas dividido para el total de jugadores del país.

b. Goles por Km recorrido, es decir el número de goles del país dividido para el total de Km recorridos por todos sus jugadores

7. Muestre los países nominados para el «Best Practices award

8 Muestre la nómina de jugadores atletas con su respectivo país.

Rúbrica: numeral 1(15 puntos), numeral 2 (9 puntos), numeral 3 (9 puntos), numeral 4( 9 puntos), numeral 5(2 puntos), numeral 6 (5 puntos cada literal), numeral 7 (3 puntos), numeral 8 (3 puntos).


Referencia: Ecuador clasifica al mundial de Polonia sub-20 tras empate de Colombia y Uruguay. https://www.eluniverso.com/deportes/2019/02/10/nota/7183619/ecuador-clasifica-mundial-polonia-sub-20-tras-empate-colombia

 

s3Eva_IIT2018_T2 Jugadores Sudamericano Sub-20

Ejercicio: 3Eva_IIT2018_T2 Jugadores Sudamericano Sub-20

Propuesta de solución en Python, se usa un archivo de prueba: br-ur.csv

# CCPG1001-Fundamentos de Programación - FIEC-ESPOL
# 3Eva_IIT2018_T2 Jugadores Sudamericano Sub-20

def actualizaDiccionario(nomArchivo,dic):
    paises  = list(dic.keys())
    archivo = open(nomArchivo,'r')
    encabezado = archivo.readline()
    linea   = archivo.readline()
    while not(linea==''):
        linea   = linea.strip('\n')
        partes  = linea.split(',')
        pais    = partes[0]
        jugador = partes[1]
        if not(pais in paises):
            dic[pais]={jugador:{'TA':int(partes[2]),
                                'TR':int(partes[3]),
                                'Goles':int(partes[4]),
                                'Minutos':int(partes[5]),
                                'KM':float(partes[6])
                                  }
                       }
        else:
            jugadores = list(dic[pais].keys())
            if not(jugador in jugadores):
                dic[pais][jugador] = {'TA':int(partes[2]),
                                      'TR':int(partes[3]),
                                      'Goles':int(partes[4]),
                                      'Minutos':int(partes[5]),
                                      'KM':float(partes[6])
                                      }
            else:
                dic[pais][jugador]['TA']    = dic[pais][jugador]['TA'] + int(partes[2])
                dic[pais][jugador]['TR']    = dic[pais][jugador]['TR'] + int(partes[3])
                dic[pais][jugador]['Goles'] = dic[pais][jugador]['Goles'] + int(partes[4])
                dic[pais][jugador]['Minutos'] = dic[pais][jugador]['Minutos'] + int(partes[5]),
                dic[pais][jugador]['KM']    = dic[pais][jugador]['KM'] + float(partes[5])
        linea = archivo.readline()
    archivo.close()
    return(dic)

def buenDeportista(jugador,dic):
    cumple = 0
    paises = list(dic.keys())
    for pais in paises:
        jugadores = list(dic[pais].keys())
        if jugador in jugadores:
            tarjetas = dic[pais][jugador]['TA'] + dic[pais][jugador]['TR']
            transcurrido = dic[pais][jugador]['Minutos']
            registro = tarjetas/transcurrido
            if registro<(2/270):
                cumple=1
    return(cumple)

def jugadorAtleta(jugador,dic):
    cumple = 0
    paises = list(dic.keys())
    for pais in paises:
        jugadores = list(dic[pais].keys())
        total = 0
        for jugador in jugadores:
            total = total + dic[pais][jugador]['KM']
        promedio = total/len(jugadores)
        if jugador in jugadores:
            if dic[pais][jugador]['KM']>=promedio and dic[pais][jugador]['Goles']>=1:
                cumple = 1
    return(cumple)

def paisBuenasPraticas(pais,dic):
    cumple = 0
    paises = list(dic.keys())
    if pais in paises:
        jugadores = list(dic[pais].keys())
        k = len(jugadores)
        cuenta = 0
        for jugador in jugadores:
            cuenta = cuenta + buenDeportista(jugador, dic)
        if (k==cuenta):
            cumple = 1
    return(cumple)

# PROGRAMA -----------------------
# INGRESO
L = ['br-ur.csv'] #,'ec-vn.csv']

# PROCEDIMIENTO
dic = {}
n = len(L)
i = 0
while not(i>=n):
    nomArchivo = L[i]
    actualizaDiccionario(nomArchivo,dic)
    i = i + 1

paises = list(dic.keys())
resultados = []
jugadoresatletas = []
for pais in paises:
    jugadores = list(dic[pais].keys())
    k = len(jugadores)
    cuenta = 0
    goles = 0
    recorrido = 0
    
    for jugador in jugadores:
        cuenta = cuenta + jugadorAtleta(jugador,dic)
        goles = goles + dic[pais][jugador]['Goles']
        recorrido = recorrido + dic[pais][jugador]['KM']
        goleskm = goles/recorrido

        if jugadorAtleta(jugador,dic)==1:
            jugadoresatletas.append([jugador,pais])

    porcentaje = cuenta/k
    nominado = paisBuenasPraticas(pais,dic)
    resultados.append([pais,porcentaje,goleskm,nominado])

# SALIDA
print('pais,porcentaje,goleskm,nominado')
print(resultados)
print('jugadores atletas')
print(jugadoresatletas)