Ejercicio: 3Eva2018TI_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.
Algoritmo en Python
# 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
>>>