Propuesta de solución en Python:
archivo de prueba: meshoratrabajada.txt
# CCPG1001-Fundamentos de programación FIEC-ESPOL # 2Eva_IT2018_T2 Pago nomina mensual # Propuesta modo simple pero larga # Tarea: Proponer simplificaciones a los algoritmos def calcularHoras(linea): linea = linea.strip('\n') partes = linea.split(',') fecha = partes[0] dia = int(partes[1]) esferiado = partes[2] ID = partes [3] nombre = partes[4] sucursal = partes[5] ciudad = partes[6] horas = int(partes[7]) trabajado = [ID,ciudad, 0,0,0,0] if (esferiado=='Si'): trabajado[5] = horas else: if (dia>=6): trabajado[4] = horas else: if (horas<=8): trabajado[2] = horas else: trabajado[2] = 8 trabajado[3] = horas-8 return(trabajado) def leerData(nomA): total = {} archivo = open(nomA,'r') # factores linea = archivo.readline() linea = linea.strip('\n') partes = linea.split(',') VH = float(partes[1]) linea = archivo.readline() linea = linea.strip('\n') partes = linea.split(',') HR = float(partes[1]) linea = archivo.readline() linea = linea.strip('\n') partes = linea.split(',') HER = float(partes[1]) linea = archivo.readline() linea = linea.strip('\n') partes = linea.split(',') HFDS = float(partes[1]) linea = archivo.readline() linea = linea.strip('\n') partes = linea.split(',') HF = float(partes[1]) # encabezado linea = archivo.readline() # datos linea = archivo.readline() parafecha = linea.split(',') parafecha = parafecha[0].split('-') mes = parafecha[1] anio = parafecha[2] while not(linea==''): trabajado = calcularHoras(linea) ID = trabajado[0] ciudad = trabajado[1] normal = trabajado[2]*VH*HR extra = trabajado[3]*VH*HER finsem = trabajado[4]*VH*HFDS feriado = trabajado[5]*VH*HF if not(ciudad in total): total[ciudad] = {ID:{'HR': normal, 'HER': extra, 'HFDS': finsem, 'HF': feriado}} else: if not(ID in total[ciudad]): total[ciudad][ID] = {'HR': normal, 'HER': extra, 'HFDS': finsem, 'HF': feriado} else: total[ciudad][ID]['HR'] = total[ciudad][ID]['HR'] + normal total[ciudad][ID]['HER'] = total[ciudad][ID]['HER'] + extra total[ciudad][ID]['HFDS'] = total[ciudad][ID]['HFDS'] + finsem total[ciudad][ID]['HF'] = total[ciudad][ID]['HF'] + feriado linea = archivo.readline() archivo.close() pagonomina = (total,mes,anio) return(pagonomina) def generareporte(nomA): pagonomina = leerData(nomA) total = pagonomina[0] mes = pagonomina[1] anio = pagonomina[2] ciudad = list(total.keys()) for lugar in ciudad: narchivo = lugar+mes+'-'+anio+'.txt' archivo = open(narchivo,'w') registro = total[lugar] # Tarea: Poner encabezado for empleado in registro: linea = empleado +','+str(total[lugar][empleado]['HR']) extra = total[lugar][empleado]['HER']+ total[lugar][empleado]['HFDS'] +total[lugar][empleado]['HF'] linea = linea+','+str(extra)+'\n' archivo.write(linea) archivo.close() mensaje = 'archivo guardado' return(mensaje) # PROGRAMA PRUEBA ------------------- # INGRESO nomA = 'meshoratrabajada.txt' # PROCEDIMIENTO mensaje = generareporte(nomA) # SALIDA print(mensaje)