s3Eva_IIT2018_T2 Jugadores Sudamericano Sub-20
Ejercicio: 3Eva_IIT2018_T2 Jugadores Sudamericano Sub-20
Propuesta de solución en Python, se usa un archivo de prueba: br-ur.csv
# CCPG1001-Fundamentos de Programación - FIEC-ESPOL # 3Eva_IIT2018_T2 Jugadores Sudamericano Sub-20 def actualizaDiccionario(nomArchivo,dic): paises = list(dic.keys()) archivo = open(nomArchivo,'r') encabezado = archivo.readline() linea = archivo.readline() while not(linea==''): linea = linea.strip('\n') partes = linea.split(',') pais = partes[0] jugador = partes[1] if not(pais in paises): dic[pais]={jugador:{'TA':int(partes[2]), 'TR':int(partes[3]), 'Goles':int(partes[4]), 'Minutos':int(partes[5]), 'KM':float(partes[6]) } } else: jugadores = list(dic[pais].keys()) if not(jugador in jugadores): dic[pais][jugador] = {'TA':int(partes[2]), 'TR':int(partes[3]), 'Goles':int(partes[4]), 'Minutos':int(partes[5]), 'KM':float(partes[6]) } else: dic[pais][jugador]['TA'] = dic[pais][jugador]['TA'] + int(partes[2]) dic[pais][jugador]['TR'] = dic[pais][jugador]['TR'] + int(partes[3]) dic[pais][jugador]['Goles'] = dic[pais][jugador]['Goles'] + int(partes[4]) dic[pais][jugador]['Minutos'] = dic[pais][jugador]['Minutos'] + int(partes[5]), dic[pais][jugador]['KM'] = dic[pais][jugador]['KM'] + float(partes[5]) linea = archivo.readline() archivo.close() return(dic) def buenDeportista(jugador,dic): cumple = 0 paises = list(dic.keys()) for pais in paises: jugadores = list(dic[pais].keys()) if jugador in jugadores: tarjetas = dic[pais][jugador]['TA'] + dic[pais][jugador]['TR'] transcurrido = dic[pais][jugador]['Minutos'] registro = tarjetas/transcurrido if registro<(2/270): cumple=1 return(cumple) def jugadorAtleta(jugador,dic): cumple = 0 paises = list(dic.keys()) for pais in paises: jugadores = list(dic[pais].keys()) total = 0 for jugador in jugadores: total = total + dic[pais][jugador]['KM'] promedio = total/len(jugadores) if jugador in jugadores: if dic[pais][jugador]['KM']>=promedio and dic[pais][jugador]['Goles']>=1: cumple = 1 return(cumple) def paisBuenasPraticas(pais,dic): cumple = 0 paises = list(dic.keys()) if pais in paises: jugadores = list(dic[pais].keys()) k = len(jugadores) cuenta = 0 for jugador in jugadores: cuenta = cuenta + buenDeportista(jugador, dic) if (k==cuenta): cumple = 1 return(cumple) # PROGRAMA ----------------------- # INGRESO L = ['br-ur.csv'] #,'ec-vn.csv'] # PROCEDIMIENTO dic = {} n = len(L) i = 0 while not(i>=n): nomArchivo = L[i] actualizaDiccionario(nomArchivo,dic) i = i + 1 paises = list(dic.keys()) resultados = [] jugadoresatletas = [] for pais in paises: jugadores = list(dic[pais].keys()) k = len(jugadores) cuenta = 0 goles = 0 recorrido = 0 for jugador in jugadores: cuenta = cuenta + jugadorAtleta(jugador,dic) goles = goles + dic[pais][jugador]['Goles'] recorrido = recorrido + dic[pais][jugador]['KM'] goleskm = goles/recorrido if jugadorAtleta(jugador,dic)==1: jugadoresatletas.append([jugador,pais]) porcentaje = cuenta/k nominado = paisBuenasPraticas(pais,dic) resultados.append([pais,porcentaje,goleskm,nominado]) # SALIDA print('pais,porcentaje,goleskm,nominado') print(resultados) print('jugadores atletas') print(jugadoresatletas)
s3Eva_IIT2018_T1 texto aleatorio
Ejercicio: 3Eva_IIT2018_T1 texto aleatorio
Propuesta de solución en Python:
<Ejemplo:
El texto generado es: Hola Hola. Hola amigo-amiga Hola que- >>>
# CCPG1001-Fundamentos de Programación - FIEC-ESPOL # 3Eva_IIT2018_T1 texto aleatorio import random as rnd # INGRESO n = 10 # enunciado con 73 T = ['Hola','.','que','tal','-',',','amigo','amiga'] # PROCEDIMIENTO k = len(T) texto = '' simbolo = ',.-' antes = 0 cuenta = 0 while not(cuenta>=n): aleatorio = int(rnd.random()*k)+0 untermino = T[aleatorio] espalabra = not(untermino in simbolo) if cuenta == 0 and espalabra==1: texto = texto + untermino cuenta = cuenta + 1 antes = espalabra if cuenta >0: if espalabra == 1: if antes == 1: texto = texto + ' '+ untermino if antes == 0: texto = texto + untermino antes = 1 cuenta = cuenta+1 if espalabra==0 and antes==1: if untermino==',': texto = texto + ', ' if untermino=='.': texto = texto + '.\n' if untermino=='-': texto = texto +'-' antes = 0 cuenta = cuenta+1 # if espalabra==0 and antes ==0: # print('no se pueden juntar simbolos') # SALIDA print('El texto generado es: ') print(texto) # Archivo archivo = open('literatura.txt','w') archivo.write(texto) archivo.close()
s3Eva_IT2018_T2 Producción minera del país
Ejercicio: 3Eva_IT2018_T2 Producción minera del país
Solución propuesta en Python, el primer bloque corresponde solo a las funciones requeridas en el examen. El segundo bloque corresponde a un programa de prueba.
# CCPG1001-Fundamentos de Programación - FIEC-ESPOL # 3Eva_IT2018_T2 Producción minera del país import numpy as np # Literal a def extraerMinerales(discurso): palabras = discurso.split(' ') cuales = [] for unapalabra in palabras: # Tarea: verificar únicos if 'mral_' in unapalabra: mencionados = unapalabra[5:] mencionados = mencionados.title() cuales.append(mencionados) return(cuales) # literal b def calcularGanancias(P,C,T,precios): produccion = np.array(P) costosExtraccion = np.array(C, dtype=float) costosTransporte = np.array(T) # precio en forma de columna precios = np.transpose([precios]) ventas = produccion*precios costo = costosTransporte + costosExtraccion ganancia = ventas - costo return(ganancia) # literal c def gananciaTotal(ganancia, minerales): ganametal = np.sum(ganancia,axis =1) ascendente = np.argsort(ganametal) descendente = np.argsort(-ganametal) totalmetal = ganametal[descendente] # convierte arreglo para ascendente minerales = np.array(minerales) cualmetal = minerales[descendente] ganatotal = (totalmetal,list(cualmetal)) return(ganatotal) # literal d def top8(discurso,reporte): mencionados = extraerMinerales(discurso) totalmetal = reporte[0] cualmetal = reporte[1] interseccion = [] m = len(cualmetal) for i in range(0,m,1): if (cualmetal[i] in mencionados): interseccion.append(cualmetal[i]) mejoresmencionados = interseccion[:8] return (mejoresmencionados)
Programa de Prueba
Observación: las matrices C y T no tienen el mismo orden de magnitud a pesar de ser costos totales. Podría ser que el costo de extracción C sea por gramos, sin embargo las matrices se usan tal como fueron presentadas en el examen
# CCPG1001-Fundamentos de Programación - FIEC-ESPOL # PROGRAMA DE PRUEBA ----- discurso = 'y el dia de ayer descubrimos en la mina mirador que la cantidad de mral_oro' minerales = ['Oro', 'Plata', 'Cobre'] precios = [38.48, 3.43, 0.01] minas = ['MIRADOR', 'FRUTA_DEL_NORTE', 'LOMA_LARGA', 'otra'] P = [[ 13524000, 121072000, 1204000, 9632000], [ 28000000, 952000, 9632000, 96404000], [126980000, 896000, 92988000, 9604000]] C = [[ 12.32, 10.23, 23.23, 19.23], [ 3.13, 1.78, 2.45, 1.69], [ 8.32, 5.25, 6.32, 6.89]] T = [[ 43736616, 341786256, 5442080, 28241024], [ 76244000, 1827840, 13966400, 435746080], [156439360, 1121792,300723192, 10785292]] # PROCEDIMIENTO mencionados = extraerMinerales(discurso) ganancias = calcularGanancias(P,C,T,precios) ganatotal = gananciaTotal(ganancias, minerales) totalmetal = ganatotal[0] cualmetal = ganatotal[1] mejoresmencionados = top8(discurso,ganatotal) # SALIDA print('a) los minerales mencionados son: ') print(mencionados) print('b) las ganancias totales son:') print(ganancias) print('c) ganancias totales por metal') print(totalmetal) print(cualmetal) print('d) los 8 mejores mencionados: ') print(mejoresmencionados)
los resultados en pantalla son :
a) los minerales mencionados son: ['Oro'] b) las ganancias totales son: [[ 4.76666892e+08 4.31706429e+09 4.08878168e+07 3.42398317e+08] [ 1.97959969e+07 1.43751822e+06 1.90713576e+07 -1.05080362e+08] [ -1.55169568e+08 -1.11283725e+06 -2.99793318e+08 -1.06892589e+07]] c) ganancias totales por metal [ 5.17701732e+09 -6.47754890e+07 -4.66764983e+08] ['Oro', 'Plata', 'Cobre'] d) los 8 mejores mencionados: ['Oro'] >>>
s3Eva_IT2018_T3 Prueba de escritorio, listas, conjuntos
s3Eva_IT2018_T1 Choferes y Rutas Trailers
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 >>>
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)
s3Eva_IIT2017_T1 Mantenimiento vehículos
Ejercicio: 3Eva_IIT2017_T1 Mantenimiento vehículos
Propuesta de solución en Python:
# CCPG1001-Fundamentos de Programación - FIEC-ESPOL # 3Eva_IIT2017_T1 Mantenimiento vehículos # Tarea: Analizar el número de días def mantenimientos(strPlaca, dictHistorial, dictMantenimiento): resultado = [] # Estado del vehículo analizado estado = dictHistorial[strPlaca]['registro'] n = len(estado) # grupos por tipo mantenimiento preven = [] repara = [] nada = [] prev = dictMantenimiento['preventivo'] corr = dictMantenimiento['correctivo'] m = len(prev) q = len(corr) # Analiza cada parte del vehículo for i in range(0,n,1): parte = estado[i][0] dias = estado[i][1] usoKm = estado[i][2] # Analiza correctivos for j in range(0,q,1): c_parte = corr[j][0] c_dias = corr[j][1] c_usoKm = corr[j][2] if (parte == c_parte): if (usoKm >= c_usoKm): repara.append(parte) # Analiza preventivos for k in range(0,m,1): p_parte = prev[k][0] p_dias = prev[k][1] p_usoKm = prev[k][2] if (parte == p_parte): 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 como se requiere m = len(preven) q = len(repara) p = len(nada) for k in range(0,m,1): resultado.append((preven[k],'preventivo')) for j in range(0,q,1): resultado.append((repara[j],'correctivo')) for j in range(0,p,1): resultado.append((nada[j],'nada')) return(resultado) 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) 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)] } } 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)
s3Eva_IT2016_T1 Costo de mensaje
Ejercicio: 3Eva_IT2016_T1 Costo de mensaje
Propuesta de solución en Python:
se requiere los archivos y su contenido: costos.txt
10 0.2 0.5 0.3
mensaje01.txt
El cuerpo humano es el carruaje; el yo, el hombre que lo conduce; el pensamiento son las riendas, y los sentimientos, los caballos.
algoritmo:
# CCPG1001-Fundamentos de Programación - FIEC-ESPOL # 3Eva_IT2016_T1 Costo de mensaje # Tarea: revisar si es necesario el uso de # mayúsculas/minúsculas # literal a) def cargarDatos(nombreArchivo): archivo = open(nombreArchivo, 'r') unalinea = archivo.readline() unalinea = unalinea.strip('\n') m = int(unalinea) unalinea = archivo.readline() unalinea = unalinea.strip('\n') corta = float(unalinea) unalinea = archivo.readline() unalinea = unalinea.strip('\n') larga = float(unalinea) unalinea = archivo.readline() unalinea = unalinea.strip('\n') infinitivo = float(unalinea) archivo.close() tarifas = {'m':m, 'corta':corta, 'larga':larga, 'infinitivo':infinitivo} return(tarifas) def cargarDatos2(nombreArchivo): lista = [] archivo = open(nombreArchivo, 'r') unalinea = archivo.readline() while not(unalinea==''): unalinea = unalinea.strip('\n') lista.append(unalinea) unalinea = archivo.readline() archivo.close() tarifas = {'m':int(lista[0]), 'corta':float(lista[1]), 'larga':float(lista[2]), 'infinitivo':float(lista[3])} return(tarifas) def calcularCostos(tarifas, nombreArchivo): costo = 0 # Carga en una lista lista = [] archivo = open(nombreArchivo, 'r') unalinea = archivo.readline() while not(unalinea==''): unalinea = unalinea.strip('\n') lista.append(unalinea) unalinea = archivo.readline() archivo.close() #Procesar las lineas n = len(lista) i = 0 while not(i>=n): linea = lista[i] palabras = linea.split(' ') m = len(palabras) j = 0 while not(j>=m): palabras[j] = palabras[j].strip(',') palabras[j] = palabras[j].strip(';') palabras[j] = palabras[j].strip('.') tamano = len(palabras[j]) valor = 0 if (tamano tarifas['m']): valor = tarifas['larga'] k = len(palabras[j]) ultimas = palabras[j][k-2]+palabras[j][k-1] if (ultimas == 'ar' or ultimas=='er' or ultimas=='ir'): valor = tarifas['infinitivo'] costo = costo + valor j = j + 1 i = i + 1 return(costo) # PROGRAMA DE PRUEBA tarifas = cargarDatos('costos.txt') costo = calcularCostos(tarifas, 'mensaje01.txt') print(costo)
s3Eva_IT2017_T1 Archivos de notas por semestre
Ejercicio: 3Eva_IT2017_T1 Archivos de notas por semestre
Propuesta de solución en Python:
Para la prueba del algoritmo, se requiere los archivos:
# CCPG1001-Fundamentos de Programación - FIEC-ESPOL # 3Eva_IT2017_T1 Archivos de notas por semestre # Tarea: una vez comprendido los pasos, # simplificar de ser posible import numpy as np def academico(narchivos): notas = {} n = len(narchivos) for i in range(0,n,1): archivo = open(narchivos[i],'r') # semestre en el nombre nombre = narchivos[i] partes = nombre.split('.') semestre = partes[0][6:] # Datos del archivo linea = archivo.readline() while not(linea==''): linea = linea.strip('\n') partes = linea.split(',') quien = int(partes[0]) materia = partes[1] nota1 = int(partes[2]) nota2 = int(partes[3]) nota3 = int(partes[4]) estado = partes[5] califica = (materia,nota1,nota2, nota3,estado) # Revisar estudiante creado estudiantes = notas.keys() if not(quien in estudiantes): notas[quien] = {semestre:[califica]} else: cuando = notas[quien].keys() if (semestre in cuando): notas[quien][semestre].append(califica) else: notas[quien][semestre] = [califica] linea = archivo.readline() archivo.close() return(notas) def semestres(notas,matricula): estudiantes = notas.keys() cuando = () if (matricula in estudiantes): cuando = notas[matricula].keys() cuando = tuple(cuando) return(cuando) def nota_academico(notas,matricula,materia): califica = [] estudiantes = notas.keys() # Desarrollar tarea return(nota_final) def mas_aprobados(notas,semestre): # Separa dictadas y aprobadas en el semestre dictadas = [] estudiantes = notas.keys() for quien in estudiantes: cuando = notas[quien].keys() if (semestre in cuando): registradas = notas[quien][semestre] n = len(registradas) for i in range(0,n,1): if (registradas[i][4] == 'AP'): dictadas.append(registradas[i][0]) # Cuenta las repetidas m = len(dictadas) lista = list(set(dictadas)) conteo = {} for j in range(0,m,1): una = dictadas[j] if (una in conteo): conteo[una] = conteo[una]+1 else: conteo[una] = 1 # busca la mas aprobada mejor = '' if (len(conteo)>0): llaves = list(conteo.keys()) valores = np.array(conteo.values()) mejor = llaves[np.argmax(valores)] return(mejor) # PROGRAMA # INGRESO /siguiendo ejemplo de examen narchivos = ['notas-2015-I.csv', 'notas-2013-II.csv'] matricula = 201321454 materia = 'Fundamentos de Programación' semestre = '2015-I' # PROCEDIMIENTO notas = academico(narchivos) semestres = semestres(notas, matricula) nota_final = nota_academico(notas, matricula, materia) alto_AP = mas_aprobados(notas, semestre) # SALIDA print('las notas son: ') print(notas) print('--- para '+str(matricula) + ': ') print('semestres que estudió: ',semestres) print('notas final para '+materia+': ',nota_final) print('--- En el semestre '+semestre + ': ' ) print('la materia con alto indice de aprobación es: ', alto_AP)