Ejercicio: 3Eva2017TII_T2 biblioteca videojuegos

Propuesta de solución en Python:
archivo de prueba: videojuegos.csv
literal a
La función juegosConsolas(nomArchivo, categoria, decada) que recibe el nombre del archivo con la información de los videojuegos, una categoría y número de cuatro dígitos representando una década de años.
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:]
La función retorna una tupla con 2 elementos. El primer elemento es la lista con los valores únicos de todos lo juegos de esa década para esa categoría. El segundo elemento es la lista con valores únicos de todas las consolas que tienen juegos para esa década y categoría.
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])
Por ejemplo, para llamar a juegosConsolas('videojuegos.csv','RPG',1980) retorna:
(['The legend of Zelda', 'Phantasy Star', ...], ['NES', 'Famicon Disk System', ...])
literal b
La función crearMatriz(nomArchivo, categoria, decada) que recibe el nombre del archivo con la información de los videojuegos, el nombre de una categoría de videojuegos y un número de cuatro dígitos representando una década de años.
indices = juegosConsolas(nomArchivo,
categoria,
decada)
filas = indices[0]
columnas = indices[1]
datos = indices[2]
n = len(filas)
m = len(columnas)
La función deberá leer el archivo y retornar una matriz donde las filas representan los juegos de categoría para la década , las columnas representan las consolas que tienen juegos de categoría para la década y las celdas son las calificaciones de cada juego para cada consola. Si un juego no existe para una consola, su calificación deberá ser cero (0).
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
literal c
La función mejoresJuegos(nomArchivo, categoria, decada) que recibe el nombre del archivo con la información de los videojuegos, el nombre de una categoría de videojuegos y un número de cuatro dígitos representando una década de años.
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
La función deberá generar el archivo “Mejores.txt” con los cinco mejores juegos de la década para la categoría, ordenados de mayor a menor por su calificación promedio. Para calcular el promedio de un juego, considere únicamente las consolas en las que fue lanzado (no considere los valores cero). El archivo tendrá la siguiente estructura:
NombreNombre,Promedio_calificación
Algoritmo en Python
El algoritmo con las partes integradas es:
# CCPG1001-Fundamentos de Programación - FIEC-ESPOL
# 3Eva_IIT2017_T2 biblioteca videojuegos
import numpy as np
# litera a
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)
# literal b
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)
# literal c
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)
# literal d
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)