Ejercicio: 3Eva2017TII_T1 Mantenimiento vehículos

Se requiere observar los mantenimientos como:
dictMantenimiento = {
'preventivo': [('llantas', 60, 4500),
('bujias', 45, 3000)],
'correctivo': [('llantas', 90, 6000),
('zapatas', 120, 10000)]
}
y un historial de vehículos de ejemplo:
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)]
}
}
Propuesta de solución en Python:
literal a
Se desarrolla la función mantenimiento(), seleccionando el registro desde el historial:
# Registro de vehículo
registro = dictHistorial[strPlaca]['registro']
n = len(registro)
tomando como referencia los datos del diccionario Mantenimiento. para los tipos preventivo y correctivo
es_prev = dictMantenimiento['preventivo']
es_corr = dictMantenimiento['correctivo']
Luego se revisa si la parte del registro se encuentra en el listado de preventivo, correctivo o no requiere nada de mantenimiento.
for i in range(0,n,1): # parte del vehículo
parte = registro[i][0]
dias = registro[i][1]
usoKm = registro[i][2]
primero se revisa si la parte es de reparar,
for j in range(0,q,1): # correctivos
if (parte == es_corr[j][0]):
c_dias = es_corr[j][1]
c_usoKm = es_corr[j][2]
if (usoKm >= c_usoKm):
repara.append(parte)
de la misma forma si es de prevenir, o no pasa nada.
Al final de la función se convierte cada parte del resultado en tuplas como pide el enunciado.
literal b
El análisis se realiza sobre los resultados de la función anterior como punto de partida:
diagnostico = mantenimientos(strPlaca,
dictHistorial,
dictMantenimiento)
Si el resultado de la parte es para mantenimiento preventivo, se añade a color amarillo, procediendo de forma semejante con los otros colores
if (diagnostico[i][1]== 'preventivo'):
resultado['amarillo'].append(diagnostico[i][0])
Tarea: Analizar considerando también el número de días. Completar los otros literales usando las respuestas anteriores.
el resultado del algoritmo, usando los datos de ejemplo es:
El diagnóstico de la placa : GEC-2411
[('llantas', 'correctivo'), ('zapatas', 'nada')]
El equivalente en semaforo : GEC-2411
{'amarillo': [], 'rojo': ['llantas'], 'verde': ['zapatas']}
clientes por dar servicio correctivo de llantas
['GEC-2411']
Algoritmo en Python con todos los literales
# CCPG1001-Fundamentos de Programación - FIEC-ESPOL
# 3Eva_IIT2017_T1 Mantenimiento vehículos
# Tarea: Analizar el número de días
# literal a
def mantenimientos(strPlaca, dictHistorial, dictMantenimiento):
resultado = []
# Registro de vehículo
registro = dictHistorial[strPlaca]['registro']
n = len(registro)
# grupos por tipo mantenimiento
preven = []
repara = []
nada = []
es_prev = dictMantenimiento['preventivo']
es_corr = dictMantenimiento['correctivo']
m = len(es_prev)
q = len(es_corr)
for i in range(0,n,1): # parte del vehículo
parte = registro[i][0]
dias = registro[i][1]
usoKm = registro[i][2]
for j in range(0,q,1): # correctivos
if (parte == es_corr[j][0]):
c_dias = es_corr[j][1]
c_usoKm = es_corr[j][2]
if (usoKm >= c_usoKm):
repara.append(parte)
for k in range(0,m,1): # preventivos
if (parte == es_prev[k][0]):
p_dias = es_prev[k][1]
p_usoKm = es_prev[k][2]
if (usoKm >= p_usoKm and not(parte in repara)):
preven.append(parte)
# Revisa si lo añade a "nada"
if not(parte in repara) and not(parte in preven):
nada.append(parte)
# Convierte a tuplas
for k in range(0,len(preven),1):
resultado.append((preven[k],'preventivo'))
for j in range(0,len(repara),1):
resultado.append((repara[j],'correctivo'))
for j in range(0,len(nada),1):
resultado.append((nada[j],'nada'))
return(resultado)
# literal b
def semaforo(strPlaca, dictHistorial, dictMantenimiento):
resultado = {'amarillo':[],
'rojo':[],
'verde':[]}
diagnostico = mantenimientos(strPlaca,
dictHistorial,
dictMantenimiento)
n = len(diagnostico)
for i in range(0,n,1):
if (diagnostico[i][1]== 'preventivo'):
resultado['amarillo'].append(diagnostico[i][0])
if (diagnostico[i][1]== 'correctivo'):
resultado['rojo'].append(diagnostico[i][0])
if (diagnostico[i][1]== 'nada'):
resultado['verde'].append(diagnostico[i][0])
return(resultado)
# literal c
def recomendar(strparte, strtipoMantenimiento,
dictHistorial, dictMantenimiento):
darservicio = []
for cliente in dictHistorial:
colores = semaforo(cliente,
dictHistorial,
dictMantenimiento)
if (strtipoMantenimiento=='preventivo'):
partes = colores['amarillo']
if (strparte in partes):
darservicio.append(cliente)
if (strtipoMantenimiento=='correctivo'):
partes = colores['rojo']
if (strparte in partes):
darservicio.append(cliente)
return(darservicio)
# INGRESO
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)]
}
}
# un vehículo
strPlaca = 'GEC-2411'
strparte = 'llantas'
strtipoMantenimiento = 'correctivo'
# PROCESAMIENTO
diagnostico = mantenimientos(strPlaca,
dictHistorial,
dictMantenimiento)
colores = semaforo(strPlaca, dictHistorial,
dictMantenimiento)
darservicio = recomendar(strparte,
strtipoMantenimiento,
dictHistorial,
dictMantenimiento)
# SALIDA
print('El diagnóstico de la placa : ', strPlaca)
print(diagnostico)
print('El equivalente en semaforo : ', strPlaca)
print(colores)
print('clientes por dar servicio',
strtipoMantenimiento + ' de ' + strparte)
print(darservicio)