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)