Foro de elhacker.net

Foros Generales => Dudas Generales => Mensaje iniciado por: Skewer en 26 Febrero 2020, 00:54 am



Título: Como puedo cambiar los diccionarios por listas en este programa
Publicado por: Skewer en 26 Febrero 2020, 00:54 am
print('Menú de opciones')
print('')
print('Escriba una de estas opciones: \n1: Estadisticos de personas \n2: Recomendador por genero y edad \n3: Ranking')
print('')
print('Estos son los géneros disponibles:\nAction  Adventure  Animation\nChildren’s  Comedy  Crime\nDocumentary  Drama  Fantasy\nFilm-Noir  Horror  Musical\nMystery  Romance  Sci-Fi\nThriller  War  Western')
print('')
n=str(input('Opción:'))

usuario=open('usuarios.csv')
notas=open('notas.csv')
peliculas=open('peliculas.csv')

if n=='1':
    print('Estadisticos de personas')
    genero=str(input('Ingrese genero de la persona:'))
    categoria=str(input('Ingrese genero pelicula:'))

    diccionario={}
   
    for linea in usuario:
        ax=linea.strip().split(',')
        if ax[1]==genero:
            diccionario[ax[0]]=[ax[2]]
    usuario.close()

    listacategoria=[]
   
    for linea in peliculas:
        ax2=linea.strip().split(',')
        if categoria in ax2[2]:
            listacategoria.append(ax2[0])
    peliculas.close()

   
    rev=''
    for linea in notas:
       ax3=linea.strip().split(',')
       if (ax3[1] in listacategoria) and (rev!=ax3[0]) and (ax3[0] in diccionario):
          diccionario[ax3[0]].append('v')
          rev=ax3[0]
    notas.close()

    #Dividimos los rangos etarios
    re_1=0
    re_18=0
    re_25=0
    re_35=0
    re_45=0
    re_50=0
    re_56=0
    for f in diccionario:
       if 'v' in diccionario[f]:
          if diccionario[f][0]=='1':
             re_1+=1   
          elif diccionario[f][0]=='18':
             re_18+=1
          elif diccionario[f][0]=='25':
             re_25+=1
          elif diccionario[f][0]=='35':
             re_35+=1
          elif diccionario[f][0]=='45':
             re_45+=1
          elif diccionario[f][0]=='50':
             re_50+=1
          elif diccionario[f][0]=='56':
             re_56+=1



    print('Rango menor 18:',re_1)
    print('Rango 18-24:',re_18)
    print('Rango 25-34:',re_25)     
    print('Rango 35-44:',re_35)     
    print('Rango 45-49:',re_45)   
    print('Rango 50-55:',re_50)   
    print('Rango mayor 56:',re_56)



elif n=='2':
    print('Recomendador por género y edad')
    Edad=int(input('Ingrese su edad:'))
    Gender=str(input('Ingrese su género:'))

    if Edad in range(1,18):
        Re='1'
    elif Edad in range(18,25):
        Re='18'
    elif Edad in range(25,35):
        Re='25'
    elif Edad in range(35,45):
        Re='35'
    elif Edad in range(45,50):
        Re='45'
    elif Edad in range(50,56):
        Re='50'
    elif Edad>=56:
        Re='56'


   
    IDE=[]
    for linea in usuario:
        ax4=linea.strip().split(',')
        if ax4[1]==Gender and ax4[2]==Re:
            IDE.append(ax4[0])
    usuario.close()       


   
    IDEPN={}
    for linea in notas:
        ax5=linea.strip().split(',')
        if (ax5[0] in IDE) and (ax5[1] not in IDEPN):
            IDEPN[ax5[1]]=[int(ax5[2]),(1)]
        elif (ax5[0] in IDE) and (ax5[1] in IDEPN):
            IDEPN[ax5[1]]=[int(IDEPN[ax5[1]][0])+int(ax5[2]),int(IDEPN[ax5[1]][1])+(1)]
    notas.close()
   
    diccionario2={}
    for y in IDEPN:
        if int(IDEPN[y][1])>=10:
            diccionario2[y]=float(IDEPN[y][0])/float(IDEPN[y][1])
   
   
    IDEmaxima=''
    maximo=-float('inf')
    for ID in diccionario2:
        if diccionario2[ID]>=maximo:
            maximo=diccionario2[ID]
            IDEmaxima=ID

    Pelicula_Recomendada=''
   
    for linea in peliculas:
        ax6=linea.strip().split(',')
        if IDEmaxima==ax6[0]:
            Pelicula_Recomendada=ax6[1]
    peliculas.close()       

    print(Pelicula_Recomendada)

elif n=='3':
    print('Ranking')
    categoria2=str(input('Ingrese genero pelicula:'))
   
    idn=[]
    for linea in peliculas:
        ax7=linea.strip().split(',')
        if categoria2 in ax7[2]:
            idn.append(ax7[0])
   
    dicnota={}
    for linea in notas:
        ax8=linea.strip().split(',')
        if (ax8[1] in idn) and (ax8[1] not in dicnota):
            dicnota[ax8[1]]=[int(ax8[2]),int(1)]
        elif (ax8[1] in idn)and (ax8[1]in dicnota):
            dicnota[ax8[1]]=[int(dicnota[ax8[1]][0])+int(ax8[2]),int(dicnota[ax8[1]][1])+int(1)]

    promedio={}
    for f in dicnota:
        if int(dicnota[f][1])>=10:
            promedio[f]=(float(dicnota[f][0])/float(dicnota[f][1]))

    import operator #sacado de internet https://www.analyticslane.com/2019/01/14/ordenacion-de-diccionarios-en-python-mediante-clave-o-valor/
    promedio_orden=sorted(promedio.items(),key=operator.itemgetter(1), reverse=True)


    cont=0
    toppelis=[]

    for linea in promedio_orden:
        cont+=1
        toppelis.append([linea[0],linea[1]])
        if cont==10:
            break

    peliculas3=open('peliculas.csv')
    for a in peliculas3:
        axtop=a.strip().split(',')
        if toppelis[0][0]==axtop[0]:
            toppelis[0][0]=axtop[1]
    peliculas3.close

    peliculas3=open('peliculas.csv')
    for a in peliculas3:
        axtop=a.strip().split(',')
        if toppelis[1][0]==axtop[0]:
            toppelis[1][0]=axtop[1]
    peliculas3.close

    peliculas3=open('peliculas.csv')
    for a in peliculas3:
        axtop=a.strip().split(',')
        if toppelis[2][0]==axtop[0]:
            toppelis[2][0]=axtop[1]
    peliculas3.close

    peliculas3=open('peliculas.csv')
    for a in peliculas3:
        axtop=a.strip().split(',')
        if toppelis[3][0]==axtop[0]:
            toppelis[3][0]=axtop[1]
    peliculas3.close

    peliculas3=open('peliculas.csv')
    for a in peliculas3:
        axtop=a.strip().split(',')
        if toppelis[4][0]==axtop[0]:
            toppelis[4][0]=axtop[1]
    peliculas3.close


    peliculas3=open('peliculas.csv')
    for a in peliculas3:
        axtop=a.strip().split(',')
        if toppelis[5][0]==axtop[0]:
            toppelis[5][0]=axtop[1]
    peliculas3.close

    peliculas3=open('peliculas.csv')
    for a in peliculas3:
        axtop=a.strip().split(',')
        if toppelis[6][0]==axtop[0]:
            toppelis[6][0]=axtop[1]
    peliculas3.close

    peliculas3=open('peliculas.csv')
    for a in peliculas3:
        axtop=a.strip().split(',')
        if toppelis[7][0]==axtop[0]:
            toppelis[7][0]=axtop[1]
    peliculas3.close

    peliculas3=open('peliculas.csv')
    for a in peliculas3:
        axtop=a.strip().split(',')
        if toppelis[8][0]==axtop[0]:
            toppelis[8][0]=axtop[1]
    peliculas3.close

    peliculas3=open('peliculas.csv')
    for a in peliculas3:
        axtop=a.strip().split(',')
        if toppelis[9][0]==axtop[0]:
            toppelis[9][0]=axtop[1]
    peliculas3.close


    arch=open('top'+categoria2+'.txt','w')
    arch.write('1,'+str(toppelis[0][0])+','+str(round(toppelis[0][1],2))+'\n')
    arch.write('2,'+str(toppelis[1][0])+','+str(round(toppelis[1][1],2))+'\n')
    arch.write('3,'+str(toppelis[2][0])+','+str(round(toppelis[2][1],2))+'\n')
    arch.write('4,'+str(toppelis[3][0])+','+str(round(toppelis[3][1],2))+'\n')
    arch.write('5,'+str(toppelis[4][0])+','+str(round(toppelis[4][1],2))+'\n')
    arch.write('6,'+str(toppelis[5][0])+','+str(round(toppelis[5][1],2))+'\n')
    arch.write('7,'+str(toppelis[6][0])+','+str(round(toppelis[6][1],2))+'\n')
    arch.write('8,'+str(toppelis[7][0])+','+str(round(toppelis[7][1],2))+'\n')
    arch.write('9,'+str(toppelis[8][0])+','+str(round(toppelis[8][1],2))+'\n')
    arch.write('10,'+str(toppelis[9][0])+','+str(round(toppelis[9][1],2))+'\n')
    arch.close()

else:
    print('Entrada inválida')