s2Eva_IT2018_T1 Niveles seguridad por ciudad

Propuesta de solución en Python:

Como referencia para el algoritmo se usa la tabla:

incidentes
ciudad robo vehículos asalto
Guayaquil 605 6345
Cuenca 123 676

El módulo cargarDatos() desde un archivo se guarda como ecu911.py
La sección no era necesario escribirla en la evaluación, se podría suponer que ya estaba escrita.

# CCPG1001-Fundamentos de programación FIEC-ESPOL
# 2Eva_IT2018_T1 Niveles seguridad por ciudad
import numpy as np
import ecu911 es ecu

def titulostabla(tabla_dic):
    ciudad = tabla_dic.keys()
    ciudad = list(ciudad)
    
    unaciudad = ciudad[0]
    unregistro = tabla_dic[unaciudad]
    
    tipodelito = unregistro.keys()
    tipodelito = list(tipodelito)
    
    titulos = [ciudad,tipodelito]
    return(titulos)

def crearMatriz(tabla_dic,titulos):
    ciudad = titulos[0]
    tipodelito = titulos[1]
    n = len(ciudad)
    m = len(tipodelito)
    
    tabla = np.zeros(shape=(n,m),dtype = int)
    f = 0
    while not(f>=n):
        c = 0
        unaciudad = ciudad[f]
        registro = tabla_dic[unaciudad]
        while not(c>=m):
            untipo = tipodelito[c]
            valor = registro[untipo]
            tabla[f,c] = valor
            c = c+1
        f = f+1
        
    return(tabla)

def ciudadesMenosSeguras(matriz, titulos, untipo, poblacion):
    ciudad = titulos[0]
    tipodelito = titulos[1]
    
    columna = tipodelito.index(untipo)
    incidentes = matriz[:,columna]
    indicador = incidentes/poblacion

    cual = np.argmax(indicador)
    insegura = ciudad[cual]
    # Tarea: encontrar las siguientes menos seguras
    return(insegura)

# PROGRAMA PRUEBA -------------------
# INGRESO

nombrearchivo = 'reporteincidentes.txt'
tabla = ecu.cargardatos(nombrearchivo)

# Usado si no dispone del módulo y archivo.txt
#tabla_dic = {
#    'Guayaquil':{'robo vehiculo':605, 'asalto':6345},
#    'Cuenca':   {'robo vehiculo':123, 'asalto': 676}
#    }
poblacion = np.array([2000, 1000])
untipo = 'asalto'

# PROCEDIMIENTO
titulos = titulostabla(tabla_dic)
matriz = crearMatriz(tabla_dic,titulos)
inseguras = ciudadesMenosSeguras(matriz, titulos, untipo, poblacion)

# SALIDA
print('Los títulos de la tabla son:')
print(titulos)
print('La matriz de datos: ')
print(matriz)
print('La menos segura: ')
print(inseguras)

Usando el módulo es necesario disponer de un archivo reporteincidentes.txt con datos, por facilidad en el mismo directorio de trabajo:

Guayaquil,605,6345
Cuenca,123,676

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.

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

>>> inversa('GATACA') = 'ACATAG'

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.

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 listado L :

1. Forme la cadena inversa de la secuencia S

2. La secuencia S pertenece a la especie buscada si:

a) la cadena de referencia R aparece exactamente dos veces en la segunda mitad de inversa y
b) al menos 4 veces en total.

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

Ejemplo:

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

SALIDA para Secuencia L[0]:
Secuencia: ATTTGCTTGCTATTTAAACCGGTTATGCATAGCGC
Inversa:   CGCGATACGTATTGGCCAAATTTATCGTTCGTTTA
Índices:   [0, 2, 7, 25, 29]

SALIDA para Secuencia L[1]:
Secuencia: ...
Índices:   ...

Referencia: Archivo original 1raEvaI_Term2018.pdf

s1Eva_IT2018_T1 Busca especie con ADN

Ejercicio: 1Eva_IT2018_T1 Busca especie con ADN

Propuesta de solución en Python:

primero se obtiene una secuencia del listado

i = 0
secuencia = Listado[i]

Para obtener la inversa se empieza copiando desde el último caracter de la secuencia con índice j=m-1, siendo m la cantidad de caracteres de la secuencia.

# calcula la inversa
m = len(secuencia)
inversa = ''
j = m-1
while not(j<0):
    inversa = inversa + secuencia[j]
    j = j-1

el resultado esperado es:

las secuencias que pertenecen son:  1
Secuencia:  ATTTGCTTGCTATTTAAACCGGTTATGCATAGCGC
indices de inversa: [0, 2, 7, 25, 29]
>>> 

El análisis se realiza en dos partes: desde j=0 hasta mitad = m//2. Luego desde la mitad hasta m.

Al comparar la referencia con una sección de la inversa, se pueden almacenar los índices de la coincidencia en otra lista.

Algoritmo en Python

# CCPG1001 Fundamentos de Programación FIEC-ESPOL
# 1Eva_IT2018_T1 Busca especie con ADN
# propuesta de solución: edelros@espol.edu.ec

# INGRESO
Listado = ['ATTTGCTTGCTATTTAAACCGGTTATGCATAGCGC', 
           'ATTAGCCGCTATCGA']
Referencia = 'CG'

# PROCEDIMIENTO
n = len(Listado)
tref = len(Referencia)
pertenece = []

i = 0
while not(i>=1):
    secuencia = Listado[i]
    indices   = []
    
    # calcula la inversa
    m = len(secuencia)
    inversa = ''
    j = m-1
    while not(j<0):
        inversa = inversa + secuencia[j]
        j = j-1
        
    # Analiza las partes, mitad
    mitad  = m//2
    veces1 = 0
    veces2 = 0
   
    j = 0    # primera mitad
    while not(j>=mitad):
        seccion = inversa[j:j+tref]
        if (seccion == Referencia):
            veces1 = veces1 + 1
            indices.append(j)
        j = j + 1

    j = mitad    # segunda mitad
    while not(j>=m):
        seccion = inversa[j:j+tref]
        if (seccion == Referencia):
            veces2 = veces2 + 1
            indices.append(j)
        j = j + 1

    # Revisa si pertenece a especie
    total = veces1 + veces2
    if (veces2==2 and total>=4):
        pertenece.append([secuencia, indices])

    # siguiente secuencia de listado
    i = i + 1 

# SALIDA
# print(pertenece)
tp = len(pertenece)
print('las secuencias que pertenecen son: ', tp)
i = 0
while not(i>=tp):
    print('Secuencia: ',pertenece[i][0])
    print('indices de inversa:',pertenece[i][1])
    i = i + 1

Tarea: Convertir a funciones las secciones de:

– Inversa de la secuencia creainversa(secuencia)

– Conteo de referencias en mitades de secuencia cuentareferencia(mitadsecuencia)

– Crear vector de índices donde se encuentra la referencia entregaindices(inversa)

s1Eva_IT2018_T2 Desempeño de jugadores mundial futbol

Ejercicio: 1Eva_IT2018_T2 Desempeño de jugadores mundial futbol

Propuesta de solución en Python:

Revisar las sugerencias en el enunciado, dividir el problema y simplificar las tablas para las pruebas de algoritmos, con lo que que se obtiene:

a) el pais con mas goles promedio:  Argentina
b) los jugadores efectivos de:  Brasil 0
c) jugadores amarrabalon:  ['Lionel Messi']
d) jugador con más pases acertados:  Lionel Messi
e) promedios mundiales:  [  33.66666667   88.33333333   64.          179.33333333]
f) : Lionel Messi no está por encima del promedio mundial
>>> 

visualizar la tabla de paises_jugadores es:

>>> pais_jugadores
[['Cristiano Ronaldo'], 
 ['Neymar Jr.'], 
 ['Lionel Messi']]

las instrucciones desarrolladas por literal son:

# CCPG1001 Fundamentos de Programación FIEC-ESPOL
# 1Eva_IT2018_T2 Desempeño de jugadores mundial futbol
import numpy as np

# INGRESO
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]

analizapais = 'Brasil'
analizaposeebalon = 76
analizajugador = 'Lionel Messi'

# PROCEDIMIENTO
tamano = np.shape(desempeno)
tdf    = tamano[0]
tdc    = tamano[1]
tp     = len(paises)

# tabla ubicapais[unpais] = [desde,hasta,cuantos]
ubicapais = np.zeros(shape=(tp,3),dtype=int)
desde  = 0
unpais = 0
while not(unpais>=tp):
    jugadores = pais_jugadores[unpais]
    cuantos   = len(jugadores)
    hasta     = desde + cuantos
    ubicapais[unpais,0] = desde
    ubicapais[unpais,1] = hasta
    ubicapais[unpais,2] = cuantos
    desde  = hasta
    unpais = unpais + 1
    
# Agrupa jugadores
todosjugadores = []
unpais =  0
while not(unpais>=tp):
    jugadores = pais_jugadores[unpais]
    cuantos   = len(jugadores)
    quien = 0
    while not(quien>=cuantos):
        todosjugadores.append(jugadores[quien])
        quien = quien + 1
    unpais = unpais +1

# a) pais con mas goles promedio
fila = 0 # fila goles anotados
golesanotados = desempeno[fila]
prmGolAnota = np.zeros(tp,dtype = float)
unpais = 0
while not(unpais>=tp):
    desde   = ubicapais[unpais,0]
    hasta   = ubicapais[unpais,1]
    cuantos = ubicapais[unpais,2]
    
    golpais = golesanotados[desde:hasta]
    prmGolAnota[unpais] = np.sum(golpais)/cuantos
    
    unpais = unpais + 1
    
goleador = np.argmax(prmGolAnota)
nombregoleador = paises[goleador]

# b) Contar jugadores con mayor efectividad
# al promedio de analizapais
# donde = paises.index(buscapais)
donde  = -1
unpais = 0
while not(unpais>=tp or donde>=0):
    if (paises[unpais] == analizapais):
        donde = unpais
    unpais = unpais + 1

# efectividad del pais analizado
fila = tdf-1 # tiros al arco (última de desempeno)
tirosdirectos = desempeno[fila]

desde = ubicapais[donde,0]
hasta = ubicapais[donde,1]

anotados = golesanotados[desde:hasta]
directos = tirosdirectos[desde:hasta]
efectivopais = np.sum(anotados)/np.sum(directos)

#jugadores efectivos del pais analizado
cuentaefectivos = 0
quien = desde
while not(quien>=hasta):
    unaefectividad = golesanotados[quien]/tirosdirectos[quien]
    if (unaefectividad > efectivopais):
        cuentaefectivos = cuentaefectivos+1
    quien = quien + 1

# c) posesion balón
fila = 2 # fila de posesión de balón
poseebalon = desempeno[fila]
amarrabalon = []
quien = 0
while not(quien>=tdc):
    if (poseebalon[quien]>analizaposeebalon):
        amarrabalon.append(todosjugadores[quien])
    quien = quien +1
    
# d) jugador con más pases acertados
fila = tdf-2
pasesacertados = desempeno[fila]
quienacierta   = np.argmax(pasesacertados)
nombreacierta  = todosjugadores[quienacierta]

# e) promedios mundiales
promediomundial = np.sum(desempeno,axis =1)/tdc

# f) jugadores superior a promedio mundial
# donde = todosjugadores.index(analizajugador)
donde = -1
quien = 0
while not(unpais>=tp or donde>=0):
    if (todosjugadores[quien] == analizajugador):
        donde = unpais
    quien = quien + 1

# verifica cumplimiento de parámetros
cumple = ' está '
fila = 0
while not(fila>=tdf):
    caracteristica = desempeno[fila,donde]
    if (caracteristica< promediomundial[fila]):
        cumple = ' no está '
    fila = fila+1
mensaje = analizajugador + cumple + 'por encima del promedio mundial'

# SALIDA
print('a) pais con mas goles promedio: ', nombregoleador)
print('b) jugadores efectivos de: ', analizapais, cuentaefectivos)
print('c) jugadores amarrabalon: ', amarrabalon)
print('d) jugador con más pases acertados: ', nombreacierta)
print('e) promedios mundiales: ', promediomundial)
print('f) :', mensaje)

Tarea: Realice las modificaciones necesarias para realizar las funciones para las secciones de:

– crear tabla ubicapais(paises_jugadores)

agrupajugadores(paises_jugadores)

use las funciones realizadas en el programa.

Considerar cuando la respuesta de los algoritmos de búsqueda es -1, no se encontró el elemento en el conjunto. En la propuesta no se valida ésta situación, por ejemplo, si se pone ‘espana’ y no se eneuentra en la tabla.

s3Eva_IIT2017_T2 biblioteca videojuegos

Ejercicio: 3Eva_IIT2017_T2 biblioteca videojuegos

Propuesta de solución en Python:

archivo de prueba: videojuegos.csv

# CCPG1001-Fundamentos de Programación - FIEC-ESPOL
# 3Eva_IIT2017_T2 biblioteca videojuegos

import numpy as np

def juegosConsolas(nomArchivo, categoria, decada):
    productos = []
    equipos   = []
    listado   = []
    if (decada>99):
        decada = decada%100
    
    archivo = open(nomArchivo,'r')
    # encabezado
    linea = archivo.readline()
    # primera linea de datos
    linea = archivo.readline()
    while not(linea==''):
        linea  = linea.strip('\n')
        partes = linea.split(',')
        njuego = partes[0]
        anio   = int(partes[1])
        cons   = partes[2]
        calf   = float(partes[3])
        lista  = partes[4].split(';')
        categ  = lista[0]
        tags   = lista[1:]
        
        if (anio>=decada
            and anio<=(decada+10)
            and (categ==categoria)):
            
            if not(njuego in productos):
                productos.append(njuego)
            if not(cons in equipos):
                equipos.append(cons)
            listado.append([njuego,cons,calf])
            
        linea = archivo.readline()
    archivo.close()
    respuesta = (productos,equipos, listado)
    
    return(respuesta)

def crearMatriz(nomArchivo, categoria, decada):
    indices = juegosConsolas(nomArchivo,
                             categoria,
                             decada)
    filas    = indices[0]
    columnas = indices[1]
    datos    = indices[2]
    n = len(filas)
    m = len(columnas)
    matriz = np.zeros(shape=(n,m), dtype=float)
    q = len(datos)
    
    for i in range(0,q,1):
        f = filas.index(datos[i][0])
        c = columnas.index(datos[i][1])
        valor = datos[i][2]
        matriz[f,c] = valor
        
    return(matriz)

def mejoresJuegos(nomArchivo, categoria, decada):
    indices  = juegosConsolas(nomArchivo,
                              categoria,
                              decada)
    matriz   = crearMatriz(nomArchivo,
                           categoria,
                           decada)
    subtotal = np.sum(matriz, axis=0)
    conteo   = np.count_nonzero(matriz,axis=0)
    prom = subtotal/conteo
    
    indicesMax = prom.argsort()[-5::]
    n = len(indicesMax)

    narchivo = 'Mejores.txt'
    archivo = open(narchivo,'w')
    for i in range(0,n,1):
        cual = indicesMax[i]
        linea = indices[1][cual] + ',' + str(prom[cual]) + '\n'
        archivo.write(linea)
    archivo.close()
    
    respuesta = 'archivo creado'
    return(respuesta)

def colecciones(nomArchivo, palabras):
    respuesta = []
    
    archivo = open(nomArchivo,'r')
    # encabezado
    linea = archivo.readline()

    # primera linea de datos
    linea = archivo.readline()

    while not(linea==''):
        linea  = linea.strip('\n')
        partes = linea.split(',')
        lista  = partes[4].split(';')
        categ  = lista[0]
        tags   = lista[1:]
        if (palabras == tags):
            if not(njuego  in respusta):
                respuesta.append(njuego)
    
    return(respuesta)

# PROGRAMA ---------------------------
# INGRESO
nomArchivo = 'videojuegos.csv'
categoria  = 'RPG'
decada = 80

# PROCEDIMIENTO
respuesta1 = juegosConsolas(nomArchivo, categoria, decada)
respuesta2 = crearMatriz(nomArchivo, categoria, decada)
respuesta3 = mejoresJuegos(nomArchivo, categoria, decada)

# SALIDA
print('juegos y consolas de: ', decada, categoria)
print(respuesta1[0])
print(respuesta1[1])
print('matriz: ')
print(respuesta2)
print('seleccionados: ')
print(respuesta3)

3Eva_IIT2017_T2 Biblioteca videojuegos

3ra Evaluación II Término 2017-2018. Febrero 23, 2018 /CCPG001

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

Tema 2. (50 puntos) Suponga que tiene el archivo «videojuegos.csv»con información sobre todo el contenido de su biblioteca de videojuegos.

El archivo tiene la siguiente estructura:

videojuegos.csv
Nombre, Año, Consola, Calificación, Tags (separados por ;)
The Legend of Zelda,86,Famicon Disk System,3.5,RPG;Link;Zelda;Hyrile;Triforce
Double Dragon,87,Arcade,3.7,Beat-em up; Billy;Jimmy;Puñete
The Legend of Zelda,88,NES,4.3,RPG;Link;Zelda;Hyrule;Triforce
...
Halo 5:Guardians,15,Xbox One,4,FPS;Master Chief;Cortana;Covenant

Note que un juego aparecerá listado en el archivo una vez por cada consola en la que fué lanzado.
La categoría del juego se especifica siempre en el primer Tag. Por ejemplo, Double Dragon pertenece a la categoriía Beat-‘em up.

Desarrolle lo siguiente:

a) La función juegosConsolas(nomArchivo, categoria, decada) que recibe el nombre del archivo con la información de los videojuegos, una categoría y número de cuatro dígitos representando una década de años. La función retoma una tupla con 2 elementos. El primer elemento es la lista con los valores únicos  de todos lo juegos de esa década para esa categoría. El segundo elemento es la lista con valores únicos de todas las consolas que tienen juegos para esa década y categoría.

Por ejemplo, para llamar a juegosConsolas('videojuegos.csv','RPG',1980) retorna:

(['The legend of Zelda',  'Phantasy Star', ...], ['NES', 'Famicon Disk System', ...])

b) La función crearMatriz(nomArchivo, categoria, decada) que recibe el nombre del archivo con la información de los videojuegos, el nombre de una categoría de videojuegos y un número de cuatro dígitos representando una década de años. La función deberá leer el archivo y retornar una matriz donde las filas representan los juegos de categoria para la decada , las columnas representan las consolas que tienen juegos de categoria para la decada y las celdas son las calificaciones de cada juego para cada consola. Si un juego no existe para una consola, su calificación deberá ser cero (0).

c) La función mejoresJuegos(nomArchivo, categoria, decada) que recibe el nombre del archivo con la información de los videojuegos, el nombre de una categoría de videojuegos y un número de cuatro dígitos representando una década de años. La función deberá generar el archivo “Mejores.txt” con los cinco mejores juegos de la decada para la categoria , ordenados de mayor a menor por su calificación promedio. Para calcular el promedio de un juego, considere únicamente las consolas en las que fue lanzado (no considere los valores cero). El archivo tendrá la siguiente estructura:

NombreNombre,Promedio_calificación

d) La función colecciones(nomArchivo, palabras) que recibe el nombre del archivo con la información de los videojuegos y una lista de palabras. La función deberá retornar otra lista de valores únicos con los nombres de todos los juegos que sus Tags contengan todos los términos de la lista palabras .

Rúbrica: literal a (15 puntos), literal b (17 puntos), literal c (18 puntos), literal d Bono (5 puntos)

Referencia: Archivo original 3Eva_IIT2017.pdf

3Eva_IIT2017_T1 Mantenimiento vehículos

3ra Evaluación II Término 2017-2018. Febrero 23, 2018 /CCPG001

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

Tema 1. (40 puntos)  CuidaVehículo.com requiere una aplicación para gestionar el mantenimento vehículos clasificados por tipo: ‘preventivos‘ y ‘correctivos‘ .

Dispone de la tabla de mantenimientos recomendados por tipo para cada parte del vehículo. La tabla contiene los parámetros que considera el número de días y recorrido en Kilómetros desde el último mantenimiento.

El historial registra la placa del vehículo, el cliente, parte, tiempo y recorrido desde el último mantenimiento.

Las tablas son siempre usadas como parámetros de ingreso en las funciones y se almacenan en diccionarios con la estructura mostrada:

dictMantenimiento = {
    'preventivo': [('llantas',  60,  4500),
                   ('bujias',   45,  3000)],
    'correctivo': [('llantas',  90,  6000),
                   ('zapatas', 120, 10000)]
    }

dictHistorial = {
    'GEC-2411': {
        'propietario': 'Eduardo Cueva',
        'registro': [('llantas',  12, 32500),
                     ('zapatas', 180, 500)]
        },
    'GAA-0321': {
        'propietario': 'Andrea Martinez',
        'registro': [('bujias',   40, 500),
                     ('zapatas', 120, 100)]
        }
    }

a) Elabore una función mantenimientos(strPlaca, dictHistorial, dictMantenimiento) que dada una placa de vehículo, realiza una lista de las partes con el tipo de mantenimiento recomendado: ‘preventivo‘, ‘correctivo‘ o ‘ninguno‘.

Solo un tipo de mantenimiento se realiza para cada parte del vehículo, considerando siempre el parámetro de recorrido en Kilómetros. En el caso que una parte supera el parámetro para ambos tipos de mantenimiento, se da prioridad al mantenimiento ‘correctivo‘.

El resultado es una lista de tuplas con las partes y tipo de mantenimiento.

b) Escriba una función semaforo(strPlaca, dictHistorial, dictMantenimiento) que establece un código de colores para cada tipo de mantenimiento: , amarillo: ‘preventivo‘ , rojo: ‘correctivo‘ y verde: ‘ninguno‘.

El resultado es un diccionario que tiene como clave el color y como datos una lista con las partes correspondientes a cada tipo de mantenimiento.

c) Realice una función recomendar(strparte, strtipoMantenimiento, dictHistorial, dictMantenimiento) que entrega una lista de placas de vehículos que requieren el tipo de mantenimiento para una parte dada.

Rúbrica: literal a (15 puntos), literal b (15 puntos), literal c (10 puntos)

Referencia: Archivo original 3Eva_IIT2017.pdf

3Eva_IIT2017_T3 Prueba de escritorio, listas

3ra Evaluación II Término 2017-2018. Febrero 23, 2018 /CCPG001

Tema 3. (10 puntos)

a) Considere las siguente instrucciones en python. Justifique su respuesta de la salida en pantalla.

a = 'ABACDEF'
b = [4,2,1,3,2,2,3]

d = ''
for i in a:
    if i not in d:
        d += i*b[ list(a).index(i)]
    else:
        d = d.replace(i,'')
        
print(d)

b)  indique la salida por pantalla de las siguientes instrucciones en python. Justifique su respuesta

a = [1,3,5,6,8]

b = []
for i in range(len(a)):
    b.append(i)
    b.insert(i,len(b))

print(b)

Referencia: Archivo original 3Eva_IIT2017.pdf