EJERCICIO1_PROG_GISG_EXTRAORDINARIO_2021

Primer ejercicio resuelto y comentado del examen extraordinario de Programación de GISD
mail@pastecode.io avatar
unknown
python
2 years ago
4.0 kB
1
Indexable
Never
import csv


#EJERCICIO 1 

def obtener_equipos(csv_reader: csv) -> list[ str ]:
    '''
    Obtenemos todos los equipos diferentes del archivo CSV.
    '''
    equipos = []
    cursor: bool = True
    
    lineas_equipo: dict[equipos : str] = []
    for row in csv_reader:

        if cursor: 
            '''
            No procesamos la primera línea del CSV pues contiene los nombres de 
            las columnas.
            '''
            cursor = False
            continue

        for i in range(0,2): 

            if row[i] not in equipos:
                equipos.append(row[i])
                

        #(equipos.append(row[i] ) for i in row[0:1] if row[i] not in equipos) 

        cursor += 1 

    return equipos, lineas_equipo

    
def obtener_resultados(equipo: str, lineas: list[ list [ str ]]) -> list[ str ]:
    '''
    Itera sobre las líneas del archivo CSV que contienen un equipo determinado,
    sin ese equipo, obteniendo el conjunto de resultados que tiene cada segundo 
    equipo:


    EJEMPLO
    Si tenemos que lineas son las lineas del archivo CSV en las que ha jugado 
    españa, quitando la columna "españa", obtenemos los resultados donde el 
    otro equipo es Italia, Croacia, etc. 

    -Portugal,España,0-1 --> Portugal,0-1 

    '''
    resultados: list[ str ] = [] 
    
    for linea in lineas:
        if equipo == linea[0]: 
            #Ahora solo hay un equipo, por lo que se encuentra en la pos 1.
            resultados.append(linea[2])
    
    return resultados


 

def obtener_diccionario(equipo: str, csv_reader: csv, equipos: list[ str ]) -> dict:
    '''
    Para un equipo determinado ({equipo}) obtenemos el diccionario correspondiente
    a los resultados que ha tenido {equipo} con los demás equipos según la 
    información del archivo CSV.
    '''
    diccionario_equipo: dict[str : list[ str ]] = {}
    contrincantes_lineas: list[ str ] = []

    for row in csv_reader:
        '''
        Guardo todas las líneas donde aparece {equipo}, y las guardo sin {equipo}.
        '''
        for i in range(0,1): #{equipo} está en la 1ra o 2da columna.

            if row[i] == equipo:
                '''
                Si equipo está en posición 1, entonces borro posición 1.
                Si está en 2,borro posición 2.
                '''
                row_aux = row
                row.remove(i)
                contrincantes_lineas.append(row_aux)

    for equipo_2 in equipos:   
        '''
        Obtengo todos los resultados de equipo_2 contra equipo:
        '''
        diccionario_equipo[equipo_2] = obtener_resultados(equipo_2, 
                                                    contrincantes_lineas
                                                    )   
    return diccionario_equipo   
        
    


def ej_1 (ruta: str) -> dict[ str : dict[ str : list[ str ] ] ]:

    with open("prueba.csv", encoding = "utf_8")  as file:

        csv_reader: csv = csv.reader( file, delimiter = ',')
        #Obtengo la lista de todos los equipos diferentes:
        equipos: list = obtener_equipos(csv_reader)
        #Inicializo diccionario que devolverá la función:
        dict_return: str = {}
        
        for equipo in equipos:
            '''
            Relleno los valores del diccionario, con otros diccionarios en función 
            del equipo.
            '''
            
            dict_return[equipo] = obtener_diccionario(equipo, 
                                        csv_reader,
                                        equipos
                                        )
            


            pass
            
        file.close()
        return dict_return



#EJERCICIO 2

def probabilidad_victoria(diccionario: dict, seleccion: str, contrincante: str):
    
    pass

#EJERCICIO 3

class Partido():

    pass