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:

notas-2015-I.csv

notas-2013-II.csv

# 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)