1Eva_IIT2018_T3 Compras ‘Black Friday’

1ra Evaluación II Término 2018-2019, Noviembre 23, 2018. CCPG001
(Editado para tarea, se mantiene el objetivo de aprendizaje)

Tema 3. (50 puntos) El Black Friday inaugura la temporada de compras navideñas con significativas rebajas en muchas tiendas minoristas y grandes almacenes. https://www.profesionalreview.com/2018/09/24/tiendas-donde-comprar-black-friday/

Sucede después de la celebración de Acción de Gracias en Estados Unidos.

Suponga que posee los datos de los productos de una tienda en los siguientes arreglos:

C: códigos de todos los productos (cadenas de caracteres)
P: precios en dólares para cada uno de los productos (valores con decimales).
D: descuentos asociados a cada producto (enteros entre 0 y 100)
S: nombre de la sección donde se encuentra cada producto (cadenas de caracteres)

Se requiere implementar las siguientes funciones:

  1.  calcularPrecio(codigo,C,P,D) que recibe un código y los arreglos C,P,D y retorna el precio final del producto, aplicando el descuento correspondiente.
    Para calcular el precio final, aplique las siguiente fórmula:
    precio_final = precio - precio*\frac{descuento}{100}
  2. calcularTotal(compras,C,P,D) que recibe una lista de compras con los códigos de los productos, los arreglos C,P,D y aplicando todos los descuentos calcula el valor total a pagar, .
  3. hallarSecciones(compras,C,S) que recibe una lista de compras con los códigos de los productos, los arreglos C y S y determina las secciones que deberán visitar durante las compras. La lista de visitas no tiene elementos repetidos.
  4. descuentosPorSección (D,S) que recibe los arrelgos D y S y retorna una tabla con el nombre de cada sección y la cantidad de productos que tienen más del 50% de descuento.

Realice un programa que inicialmente muestre una tabla con las secciones y cantidad de productos con más del 50% de descuento. Luego para las compras, permita ingresar los códigos de los productos, procese y muestre el valor total a pagar y las secciones que necesita visitar. El usuario terminará de ingresar las compras escribiendo ‘fin’.

Ejemplos de arreglos:

C = ['CTR-2424', 'SKU-5675', 'PSS-4542']
P = [ 56.65, 32.00, 22.22]
D = [0, 50, 10]
S = ['Ropa Niños', 'Juguetes', 'Hombre']

Rúbrica: numeral 1 (5 puntos), numeral 2 y 3 (10 puntos c/u), numeral 4 (15 puntos). programa (10 puntos)

1Eva_IIT2018_T2 Juego conocimiento (Ahorcado)

1ra Evaluación II Término 2018-2019, Noviembre 23, 2018. CCPG001
(Editado para tarea, se mantiene el objetivo de aprendizaje)

Tema 2. (30 puntos) Para un juego  llamado «conocimiento», dispone de una lista que contiene un número determinado de ‘palabras’
El juego tiene las siguientes reglas:

  1. Al inicio, se selecciona aleatoriamente una palabra secreto de la lista de palabras.
  2. Como una pista, aleatoriamente se escoge una letra de la palabra, que sea consonante y se la muestra entre los espacios por adivinar de secreto.
    Por ejemplo, si secreto es ‘ESPOL’ y la letra sorteada es ‘S’, se mostrará:

    '-S---'
  3. Se pide al jugador ingresar una letra, indiferente si es mayúscula o minúscula.
    Si la letra  e encuentra en secreto se muestra la letra adivinada en la posición que corresponde.

    Letra: L
    '-S--L'
  4. El máximo de intentos para el jugador es el doble de letras de la palabra secreto.
  5. Al final muestre si el usuario ganó o perdió y la cantidad de intentos usados,

Escriba un programa en Python para implemetar el juego.


Sugerencia: Realice una función cambialetra(secreto, letra, estado) para revisar si letra se encuentra en secreto y cambiar el estado del juego.
En el ejemplo, el estado contiene ‘-S—‘

Referencia: http://blog.espol.edu.ec/ccpg1001/2eva_it2005_t3-adivina-palabra-ahorcado/

1Eva_IIT2018_T1 Prueba de escritorio

1ra Evaluación II Término 2018-2019, Noviembre 23, 2018. CCPG001

Tema 1. (20 puntos)

(10 puntos) ¿Qué imprime el siguiente código? Justifique su respuesta

lista = [89, 45, 23, 17, 55, 95, 13, 41, 28, 11]
lista.sort()
promedio = sum(lista)//len(lista)
print(promedio)
menores = []
i = 0
while lista[i] < promedio:
    menores.append(lista[i])
    i +=1
print(menores)

(10 puntos) ¿Qué imprime el siguiente código? Justifique su respuesta

pal = 'Se van en sus naves'
b = pal[::-1].replace(' ', '').lower()
pal_b = pal.lower().replace(' ', '')
if pal_b == b:
    print('Es palíndromo')
else:
    print('No es palíndromo')
NOTA: Asuma que este tema NO tiemen errores de compilación. Si usted cree que hay algún error de compilación, consúltelo inmediatamente con su profesor

1Eva_IT2018_T2 Desempeño de jugadores mundial futbol

1ra Evaluación I Término 2018-2019, Junio 29, 2018. CCPG001
(Editado para tarea, se mantiene el objetivo de aprendizaje)

Tema 2. (50 puntos) Dispone de una tabla con el desempeño histórico (estadística) de los jugadores equipos (país) que participan en el Mundial de Futbol:

Los jugadores se encuentran ordenados por equipos siguiendo el orden del listado de países siguiente:

paises = ['Portugal', 'Brasil', … , 'Argentina']

Dispone de otra tabla con los equipos (país) y jugadores, conformada como una lista que contiene como elementos otras listas (lista de listas):

pais_jugadores = [prtgl, 
                  brsl,
                   …, 
                  argntn]

Cada elemento de la tabla pais_jugadores  contiene los nombres de los jugadores registrados en cada equipo:

 prtgl = ['Cristiano Ronaldo', …]
  brsl = ['Neymar Jr.', … ]
   …
argntn = [ …, 'Lionel Messi']

con los datos disponibles en las tablas y usando instruciones de Python, se requiere:

a. Determinar el país con el promedio de goles más alto.

\text{promedio de goles} =\frac{\text{goles anotados del país}}{\text{numero de jugadores del país}}

b. Contar cuántos jugadores españoles tienen una efectividad mayor que la efectividad promedio de España.

\text{efectividad} = \frac{\text{goles anotados}}{\text{Tiros directo al arco}}

c. Mostrar la lista con los nombres de los jugadores que tienen más del 76% de posesión del balón .

d. Mostrar el jugador con mayor porcentaje de pases acertados, indicando nombre y país al que pertenece.

e. Calcular el promedio mundial por cada una de las características.
( “Goles anotados», «…», «% posesión del balón», «% de pases acertados», «Tiros directos al arco» ).

f. Determine si cada una las características para el jugador «Lionel Messi» están por encima del correspondiente promedio mundial. Muestre el mensaje de respuesta correspondiente:

“Lionel Messi está/no está por encima del promedio mundial”

Sugerencia: Separe el trabajo de ubicar los jugadores de la tabla, del procesamiento de los datos de desempeño.
Para ubicar los jugadores realice una tabla siguiendo las siguientes instrucciones:

1. A partir de los datos pais_jugadores y las listas de jugadores, bosqueje la tabla que se forma como referencia.

2. Unifique en un vector jugadores a todos los de cada país.

3. Realice una tabla en cuyas filas ubique cada pais  con el índice [desde, hasta, cuantos] que indica las posiciones desde/hasta dónde se cuentan los jugadores para cada pais, además de la cantidad de jugadores.

Ésta última tabla permitirá ubicar a los jugadores por países.

Para probar los algoritmos, puede usar los datos de las tablas simplificadas para prueba:

desempeno = np.array([[ 32, 24, 45],
                      [ 90, 84, 91],
                      [ 54, 60, 78],
                      [187,239,112]])
paises = ['Portugal', 'Brasil', 'Argentina']
prtgl =  ['Cristiano Ronaldo']
brsl =   ['Neymar Jr.' ]
argntn = ['Lionel Messi']

pais_jugadores = [prtgl, brsl, argntn]

Referencia: Archivo original 1raEvaI_Term2018.pdf

1Eva_IT2018_T1 Busca especie con ADN

1ra Evaluación I Término 2018-2019, Junio 29, 2018. CCPG001
(Editado para tarea, se mantiene el objetivo de aprendizaje)

Tema 1. (40 PUNTOS) La compañía ACME S.A. está desarrollando un nuevo método para detectar especies en base a su ADN

Para representar una especie por su ADN se utiliza una secuencia S compuesta únicamente de las letras A, C, G y T.

Se tienen como datos:

  • Un listado L de secuencias S y
  • una cadena de referencia R que identifica de forma única a la especie buscada. R no tiene letras repetidas.

La inversa de una secuencia S se determina con los símbolos en orden inverso a lo presentado. Ejemplo: inversa(GATACA) = ACATAG

Implemente un programa que muestre todas las secuencias S que pertenecen a la especie buscada y los índices en la inversa de donde aparece la cadena de referencia R .

Para realizar esta tarea, por cada secuencia S en L :

1. Forme la cadena inversa de la secuencia S .

2. Si la cadena R aparece exactamente dos veces en la segunda mitad de inversa y al menos 4 veces en total, la secuencia S pertenece a la especie buscada.

3. Si S pertenece a la especie buscada, muestre la secuencia S y los índices.

Ejemplo:

L = ['ATTTGCTTGCTATTTAAACCGGTTATGCATAGCGC', 
     'ATTAGCCGCTATCGA', 
     '…']
R = 'CG'

Salida:
Secuencia: ATTTGCTTGCTATTTAAACCGGTTATGCATAGCGC
Índices:   [0, 2, 7, 25, 29]

Secuencia: ...
Índices:   ...

Referencia: Archivo original 1raEvaI_Term2018.pdf

1Eva_IIT2017_T4 Prueba de Escritorio

1ra Evaluación II Término 2017-2018, Diciembre 1, 2017. CCPG001 – FIEC

Tema 4. (10 puntos)
1. Indique la salida por pantalla del siguiente código. Justifique su respuesta.

f=['a', 'c', 'z', 'm', 'k']
g=[3,4,5,6,5,7]
t=''
for c in f:
    a=f.index(c)
    b=g[:a]
    t=t+(c*len(b))
print(t)

2. Indique la salida por pantalla del siguiente código. Justifique su respuesta.

import numpy as np
vector = np.array([1,5,6,6,5,2,1,3,7,9,0,0,1,4,8])
print(np.unique(vector[vector%2==0]).size)

a = vector[vector%2==0]
b = np.unique(a)
print(a)
print(b)
print(b.size)

Referencia: Archivo original 1Eva_IIT2017.pdf

1Eva_IIT2017_T3 Venta combustibles

1ra Evaluación II Término 2017-2018, Diciembre 1, 2017. CCPG001 – FIEC

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

Tema 3. (40 puntos) Las ventas anuales (en galones) para las estaciones de gasolina en el país  se muestran en la matriz siguiente:

Ventas Primax Alborada PS Los Rios Mobil Cumbayá Lutexsa Cia Ltda Ps Remigio Crespo
Regular 239034 678493 896321 32438 554213
Extra 4568321 6745634 9754008 3242342 3456123
Super 234773 56743 123678 4783 90874
Premium 45672 45212 90781 3904 90431

Las filas representan el tipo de gasolina y las columnas representan las estaciones de gasolina.

Adicionalmente  dispone de los vectores (en Numpy):

tipoGasolina = np.array(['Regular',
                         'Extra',
                         'Super',
                         ...,
                         'Premium'])
gasolinera = np.array(['Primax Alborada',
                       'PS Los Ríos',
                       'Móbil Cumbayá',
                       'Lutexa Cia Ltda',
                       ...,
                       'PS Remigio Crespo'])
distrito = np.array(['distrito1',
                     'distrito2',
                     'distrito1',
                     'distrito2',
                     ...,
                     'distrito4'])
ciudad = np.array(['Guayaquil',
                   'Babahoyo',
                   'Quito',
                   'Guayaquil',
                   ...,
                   'Cuenca'])

El vector tipoGasolina contiene los nombres de los tipos de gasolina comercializadas en el país.

Los vectores: gasolinera, distrito y ciudad, contienen el nombre de la estación, el distrito y la ciudad en la que se encuentra cada estación. Una ciudad se divide en varios distritos y tiene varias gasolineras, resultando en que los nombres en  distritos y ciudades se pueden repetir en los vectores.

Implemente un programa para responder a las siguientes preguntas:

a) Dado un tipo de gasolina, muestre por pantalla los nombres de todas las gasolineras que han vendido en el año más del promedio de venta en galones para ese tipo.

b) Dada una ciudad, y calcule cuántas de sus gasolineras en el año han vendido más de 15 millones de galones en total , considere todas las ventas para todos los tipos de gasolinas.

c) Muestre por pantalla el nombre de la ciudad que más galones ha vendido en el año de gasolina tipo ‘EcoPais’ en el distrito1.

Nota: Para los literales a y b, los valores de selección se deben ingresar por teclado. El programa se debe realizar en Python.

Rúbrica: literal a (12 puntos), b (13 puntos), c (20 puntos).


venta = np.array([
    [ 239034,  678493,  896321,   32438,  554213],
    [4568321, 6745634, 9754008, 3242342, 3456123],
    [ 234773,   56743,  123678,    4783,   90874],
    [  45672,   45212,   90781,    3904,   90431]])


tipoGasolina = np.array(['Regular',
                         'Extra',
                         'Super',
                         'Premium'])

gasolinera  = np.array(['Primax Alborada',
                        'PS Los Ríos',
                        'Móbil Cumbayá',
                        'Lutexa Cia Ltda',
                        'PS Remigio Crespo'])
distrito = np.array(['distrito1',
                     'distrito2',
                     'distrito1',
                     'distrito2',
                     'distrito4'])
ciudad =  np.array(['Guayaquil',
                    'Babahoyo',
                    'Quito',
                    'Guayaquil',
                    'Cuenca'])

Referencia: Archivo original 1Eva_IIT2017.pdf

1Eva_IIT2017_T2 Examen de sangre

1ra Evaluación II Término 2017-2018, Diciembre 1, 2017. CCPG001 – FIEC

Tema 2. (30 puntos) Un asistente de médico tiene la tarea de generar un informe de indicadores a partir del resultado de un examen de sangre  que lo recibe como una cadena de texto.

Los indicadores, por ejemplo: INR, WBC, RBC, TA, etc.,  se pueden identificar por estar siempre en mayúsculas. Todo indicador va seguido de un espacio, un número con decimales, otro espacio y las unidades de medida. Al final del reporte se encuentra el nombre del médico responsable.

Ejemplos:

resultado = "Resultado de Laboratorio 'Su Salud' Nombre del paciente: José Aimas E-mail del paciente: jose.aimas@gmail.com Resultados del laboratorio: INR 1.25 segundos BGT 180.12 mmol/dL HGB 13 g/dL ESR 3.2 mm/hora RBC 4000024.2 cel/ul TA 1.5 ng/dL WBC 123233.23 cel/uL. Los valores de éste informe no representan un diagnóstico. Firma médico responsable: Dr. Juan Pozo"

resultado = "Resultado de Laboratorio 'Sana' Nombre del paciente: Ginger Irene Cruz Jurado Edad: 25 años E-mail: giircrju@espol.edu.ec Resultados: Azucar BGT 180.12 mmol/dL Hemoglobina HGB 13 g/dL Hormonal TA 1.5 ng/dL Médico responsable Dr. Karina Elizabeth Plaza"

Nota: La cantidad de indicadores puede variar. Los puntos no solo aparecen en los decimales, sino también para separar párrafos o en otras ocasiones como las direcciones de e-mail.

Escriba un programa que muestre la información desglosada, el nombre del médico, una recomendación mostrada como doble asterisco en el indicador y descrita al final

Se recomienda al paciente ir al endocrinólogo si su nivel de azúcar (BGT), está por encima de los 150 mmol/dL.

Ejemplo:

INFORME DE LABORATORIO
**********************
INR	     1.25 	segundos
BGT 	   180.12 	mmol/dL
HGB	    13		g/dL
ESR	     3.2 	mm/hora
RBC	4000024.2 	cel/ul
TA 	     1.5 	ng/dL
WBC 	123233.23 	cel/uL
Médico: Juan Pozo

** Su nivel de azúcar es alto, se recomienda ir al endocrinólogo .

Rúbrica: Descomponer y recorrer texto (4 puntos), revisar mayúsculas (5 puntos), valor indicador (4 puntos), unidad indicador (4 puntos), nombre de médico (5 puntos), recomendación (3 puntos), salida (5).

No es necesario presentar el informe en el formato descrito, pero si lo hace, obtendrá 2 puntos extras en el examen.

Referencia: Archivo original 1Eva_IIT2017.pdf

1Eva_IIT2017_T1 Taller de juguetes en polo norte

1ra Evaluación II Término 2017-2018, Diciembre 1, 2017. CCPG001 – FIEC
(Editado para tarea, se mantiene el objetivo de aprendizaje)

Tema 1 (20 puntos)
Para una época muy agitada en el taller de «Papá Noél» del Polo Norte, se contrata un nuevo administrador.

Se deben realizar varias tareas, cuyos  tiempos de inicio y duración se registran en minutos.

tareas = ['pintar soldados',
          'hornear galletas',
          'armar muñecos',
          'cortar papel de regalo',
           ..., ]
inicio   = [678, 200, 240, 423, ...]
duracion = [300, 800, 456, 112, ...]

Por ejemplo, la tarea 'pintar soldados' empieza en el minuto 678 del día, y tiene duración de 300 minutos.

Se debe planificar la mayor cantidad de tareas que se pueden realizar en un día de 1440 minutos, considerando los tiempos de finalización y con preferencia por las tareas que terminan más temprano en el día.

El tiempo de finalización de tarea se calcula como el minuto de inicio+ los minutos de duración.

Ejemplo: la tarea 'pintar soldados' termina en el minuto 978 = (678+300) del día.

Escriba un programa que dada la información de tareas, inicio y duración, permita planificar y mostrar el orden de ejecución de las tareas:

+--------------+
|Tareas del día|
+--------------+
1. Cortar papel de regalos
2. Vestir muñecas
3. ...

Nota: asuma que:

  • no existen tareas que finalizan en el mismo minuto
  • en el taller trabajan muchos duendes, no es problema planificar tareas simultáneas.
  • no es necesario que se planifiquen todas las tareas en un mismo dia.

Rúbrica: vector finalización (3 puntos), ordenar (4 puntos) y seleccionar tarea (5 puntos),  verificar limite dia (2 puntos), buscar nombres de tarea (4 puntos), salida (4 puntos),

Referencia: Archivo original 1Eva_IIT2017.pdf