EJERCICIO1_PROG_GISG_EXTRAORDINARIO_2021
Primer ejercicio resuelto y comentado del examen extraordinario de Programación de GISDunknown
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