#P1

#A

notas = open("notas.txt", "r")
notas1 = open("notas1.txt", "w")

alfabeto = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u" \
            "v", "w", "x", "y", "z", " "]

digitos = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]

for linea in notas:
    linea = linea[:-1]
    if len(linea) == 22:
        persona = linea[0:20]
        nota = linea[-2:]
        es_persona = True
        for letra in persona:
            if letra not in alfabeto:
                es_persona = False
        es_numero = True
        for digito in nota:
            if digito not in digitos:
                es_numero = False
        if es_numero:
            nota = int(nota)
            if nota >= 10 and nota <= 70 and es_persona:
                notas1.write(linea + "\n")


notas.close()
notas1.close()

#B

notas1 = open("notas1.txt", "r+")

total = 0
suma_notas = 0
aprobados = 0

for linea in notas1:
    linea = linea[:-1]
    nota = int(linea[-2:])

    total += 1
    suma_notas += nota

    if nota >= 40:
        aprobados += 1

notas1.write("\n")
notas1.write("Promedio de notas: " + str(suma_notas/total) + "\n")
notas1.write("Alumnos aprobados: " + str(100*aprobados/total) + "%\n")

notas1.close()

#C

notas1 = open("notas1.txt", "r+")

n = []

i = 0
for linea in notas1:
    if i == total:
        break
    linea = linea[:-1]
    nota = int(linea[-2:])
    n.append(nota)
    i += 1

mayor = max(n)

notas1.write("\n")
notas1.write("Alumnos con mayor nota:\n")

notas1 = open("notas1.txt", "r+")

i = 0
for linea in notas1:
    if i == total:
        break
    linea = linea[:-1]
    persona = linea[0:20]
    nota = int(linea[-2:])
    if nota == mayor:
        notas1.write(persona + "\n")
    i += 1

notas1.close()

#P2

def indice(valor, lista, i, j):
    medio = (i+j)/2
    if i > j:
        return -1
    if lista[medio] == valor:
        izq = indice(valor, lista, i, medio-1)
        if izq < medio and izq != -1:
            return izq
        return medio
    elif lista[medio] < valor:
        return indice(valor, lista, medio+1, j)
    return indice(valor, lista, i, medio-1)

#P3

def mediana(lista):
    lista_aux = []
    for x in lista:
        lista_aux.append(x)
    n = len(lista_aux)
    lista_aux.sort()
    return lista_aux[(n-1)/2]
