s3Eva_IIT2017_T2 biblioteca videojuegos

Ejercicio: 3Eva_IIT2017_T2 biblioteca videojuegos

Propuesta de solución en Python:

archivo de prueba: videojuegos.csv

# CCPG1001-Fundamentos de Programación - FIEC-ESPOL
# 3Eva_IIT2017_T2 biblioteca videojuegos

import numpy as np

def juegosConsolas(nomArchivo, categoria, decada):
    productos = []
    equipos   = []
    listado   = []
    if (decada>99):
        decada = decada%100
    
    archivo = open(nomArchivo,'r')
    # encabezado
    linea = archivo.readline()
    # primera linea de datos
    linea = archivo.readline()
    while not(linea==''):
        linea  = linea.strip('\n')
        partes = linea.split(',')
        njuego = partes[0]
        anio   = int(partes[1])
        cons   = partes[2]
        calf   = float(partes[3])
        lista  = partes[4].split(';')
        categ  = lista[0]
        tags   = lista[1:]
        
        if (anio>=decada
            and anio<=(decada+10)
            and (categ==categoria)):
            
            if not(njuego in productos):
                productos.append(njuego)
            if not(cons in equipos):
                equipos.append(cons)
            listado.append([njuego,cons,calf])
            
        linea = archivo.readline()
    archivo.close()
    respuesta = (productos,equipos, listado)
    
    return(respuesta)

def crearMatriz(nomArchivo, categoria, decada):
    indices = juegosConsolas(nomArchivo,
                             categoria,
                             decada)
    filas    = indices[0]
    columnas = indices[1]
    datos    = indices[2]
    n = len(filas)
    m = len(columnas)
    matriz = np.zeros(shape=(n,m), dtype=float)
    q = len(datos)
    
    for i in range(0,q,1):
        f = filas.index(datos[i][0])
        c = columnas.index(datos[i][1])
        valor = datos[i][2]
        matriz[f,c] = valor
        
    return(matriz)

def mejoresJuegos(nomArchivo, categoria, decada):
    indices  = juegosConsolas(nomArchivo,
                              categoria,
                              decada)
    matriz   = crearMatriz(nomArchivo,
                           categoria,
                           decada)
    subtotal = np.sum(matriz, axis=0)
    conteo   = np.count_nonzero(matriz,axis=0)
    prom = subtotal/conteo
    
    indicesMax = prom.argsort()[-5::]
    n = len(indicesMax)

    narchivo = 'Mejores.txt'
    archivo = open(narchivo,'w')
    for i in range(0,n,1):
        cual = indicesMax[i]
        linea = indices[1][cual] + ',' + str(prom[cual]) + '\n'
        archivo.write(linea)
    archivo.close()
    
    respuesta = 'archivo creado'
    return(respuesta)

def colecciones(nomArchivo, palabras):
    respuesta = []
    
    archivo = open(nomArchivo,'r')
    # encabezado
    linea = archivo.readline()

    # primera linea de datos
    linea = archivo.readline()

    while not(linea==''):
        linea  = linea.strip('\n')
        partes = linea.split(',')
        lista  = partes[4].split(';')
        categ  = lista[0]
        tags   = lista[1:]
        if (palabras == tags):
            if not(njuego  in respusta):
                respuesta.append(njuego)
    
    return(respuesta)

# PROGRAMA ---------------------------
# INGRESO
nomArchivo = 'videojuegos.csv'
categoria  = 'RPG'
decada = 80

# PROCEDIMIENTO
respuesta1 = juegosConsolas(nomArchivo, categoria, decada)
respuesta2 = crearMatriz(nomArchivo, categoria, decada)
respuesta3 = mejoresJuegos(nomArchivo, categoria, decada)

# SALIDA
print('juegos y consolas de: ', decada, categoria)
print(respuesta1[0])
print(respuesta1[1])
print('matriz: ')
print(respuesta2)
print('seleccionados: ')
print(respuesta3)