Ejercicio: 3Eva_IT2018_T1 Choferes y Rutas Trailers
Propuesta en Python, se incluye la función calcularFecha() se presenta para poder probar las funciones en el programa de prueba.
El archivo con datos de prueba usado es: rutasManejadas2018.txt
La propuesta considera el uso de listas, por ser parte de los ejercicios del proyecto para 3ra Evaluación.
# CCPG1001-Fundamentos de Programación - FIEC-ESPOL # 3Eva_IT2018_T1 Choferes y Rutas Trailers # literal a def cargarDatos(narchivo): loschoferes = [] tabla = {} archivo = open(narchivo,'r') cabecera = archivo.readline() linea = archivo.readline() while not(linea==''): linea = linea.strip('\n') partes = linea.split(',') ruta = partes[0] chofer = partes[1] fecha = partes[2] if not(chofer in loschoferes): loschoferes.append(chofer) if not(fecha in tabla): tabla[fecha] = {ruta:[chofer]} else: if not(ruta in tabla[fecha]): tabla[fecha][ruta] = [chofer] else: tabla[fecha][ruta].append(chofer) linea = archivo.readline() archivo.close() return((loschoferes,tabla)) # función para pruebas, no requerida en la evaluación import datetime as dtt def calcularFecha(unafecha,n): formato = '%d-%m-%Y' fecha = dtt.datetime.strptime(unafecha,formato) pasada = fecha - dtt.timedelta(days=n) pasadatxt = dtt.datetime.strftime(pasada,formato) return(pasadatxt) # literal b def encontrarChoferes(tabla,loschoferes,unafecha,unaruta,n): simanejaron = [] fechas = list(tabla.keys()) for i in range(1,n+1,1): pasada = calcularFecha(unafecha,i) if (pasada in fechas): trabajaron = tabla[pasada][unaruta] for unchofer in trabajaron: if not(unchofer in simanejaron): simanejaron.append(unchofer) nomanejaron = [] for unchofer in loschoferes: if not(unchofer in simanejaron): nomanejaron.append(unchofer) return(nomanejaron) # literal c def grabarArchivo(tabla,loschoferes,unafecha,n): narchivograba = unaruta+'_'+unafecha+'_'+str(n)+'.txt' archivo = open(narchivograba,'w') cabecera = 'Para la ruta '+unaruta+'\n' cabecera = cabecera + 'los choferes disponibles para la fecha '+unafecha+'\n' cabecera = cabecera + 'que no hayan manejado '+str(n)+' dias anteriores son: \n' archivo.write(cabecera) nomanejaron = encontrarChoferes(tabla,loschoferes,unafecha,unaruta,n) for cadachofer in nomanejaron: archivo.write(cadachofer+'\n') archivo.close() return(narchivograba)
programa de prueba, como trabajo extra, no requerido para el examen:
# CCPG1001-Fundamentos de Programación - FIEC-ESPOL # PROGRAMA PRUEBA ------- # INGRESO narchivo = 'rutasManejadas2018.txt' unafecha = '19-05-2018' unaruta = 'Guayaquil-Cuenca' n = 2 # PROCEDIMIENTO datos = cargarDatos(narchivo) loschoferes = datos[0] tabla = datos[1] nomanejaron = encontrarChoferes(tabla,loschoferes,unafecha,unaruta,n) elarchivo = grabarArchivo(tabla,loschoferes,unafecha,n) # SALIDA print('a) los choferes registrados son: ') print(loschoferes) print(' la tabla de trabajos es: ') print(tabla) print('b) los choferes que no manejaron en ') print(' '+unaruta+', '+str(n)+' dias antes del '+unafecha+': ') print(nomanejaron) print('c) resultados en el archivo: ', elarchivo)
Se muestra el resultado en pantalla del programa usando los datos de prueba del archivo:
a) los choferes registrados son: ['SMS', 'AGB', 'SMZ', 'EVN', 'AAQ'] la tabla de trabajos es: {'17-05-2018': {'Guayaquil-Cuenca': ['SMS', 'SMZ'], 'Guayaquil-Daule': ['EVN']}, '18-05-2018': {'Guayaquil-Cuenca': ['AGB'], 'Guayaquil-Daule': ['AAQ']}} b) los choferes que no manejaron en Guayaquil-Cuenca, 2 dias antes del 19-05-2018: ['EVN', 'AAQ'] c) resultados en el archivo: Guayaquil-Cuenca_19-05-2018_2.txt >>>