Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. #
  2. # Python 3.3
  3. #
  4. # (C) Ricardo
  5. #uma rede social e um conjunto de redes pessoais uma rede pessoal e formada por um usuario e todos os seus amigos relacionados. A figura exemplifica a ideia:
  6. #uma rede social pode ser modelada como um grafo e implementada como uma matriz de adjacencias
  7. #-dado o arquivo bdusuario.txt contendo os nomes dos usuarios na forma de uma matriz de adjacencias, faça
  8. #a)construa as funcoes lerede() e salvarede() que leem e salvam a rerde social de e para bdrede
  9. #b)construa a funcao amigoscomuns(usuario,usuario) que retorne quantos amigoss comuns existem entre os usuarios
  10. #c)construa a funcao notifica(usuarioa,usuariob) que exibe a msg usuariob solicita que usuarioa adicione como amigo somente se os amigos comuns dos usuarios a e b totalizarem 30% ou mais da quantidade de amigos do usuario b
  11. #d)construa a funcao aceitatodos que aceitaria todos os pedidos de amizades descobertos na letra c alterando a configuracao da rede social
  12. #e) construa um programa pytghon que modele, carregue e processe a rede social usando as funcoes dos itens a,b,c e d na seqencia
  13. #f) caminho(usuarioA, usuarioB, rede, usuarioS) - retorna a sequencia de nós + equivalente ao menor caminho entre o Usuario A e o Usuario B
  14.  
  15. def leUsuarios():
  16.     conteudo = ''
  17.     auxlst=[]
  18.    
  19.     arq = open('bdusuario.txt', 'rt')
  20.     conteudo = arq.readline()
  21.     while conteudo != '':
  22.         conteudo = conteudo[:-1]
  23.         auxlst.append(conteudo)
  24.         conteudo = arq.readline()
  25.     arq.close()    
  26.     return auxlst
  27.  
  28. def leRede():
  29.     conteudo = ''
  30.     auxlst=[]
  31.     auxdic={}
  32.     arq = open('bdrede.txt', 'rt')
  33.     conteudo = arq.readline()
  34.     while conteudo != '':
  35.         conteudo = conteudo[0:-1]
  36.         auxlst.append(conteudo.split(','))
  37.         conteudo = arq.readline()
  38.     arq.close()
  39.     for i in range(0,5):
  40.         for j in range(0,5):
  41.             auxlst[i][j] = int(auxlst[i][j])
  42.     tbUsuarios = leUsuarios()
  43.  
  44.     for j in range(0,5):
  45.         auxdic[tbUsuarios[j]]=auxlst[j]
  46.     return auxdic
  47.  
  48. def notifica(u1, u2, redeamigos, solicitacoes):
  49.     r = redeamigos[u1]
  50.     s = redeamigos[u2]
  51.     qtdB = 0
  52.     qtdAB = 0
  53.     amigosComunsA = 0
  54.     amigosComunsB = 0
  55.    
  56.     for j in range(0,5):
  57.         if(s[j] == 1):
  58.             qtdB+=1
  59.  
  60. #    print('Quantidade de amigos de B: ', qtdB)
  61.     amigosComunsA = amigosComuns(u1, u2, redeamigos)
  62.     amigosComunsB = amigosComuns(u1, u2, redeamigos)
  63. #    print('Amigos em comuns de A: ', amigosComunsA)
  64. #    print('Amigos em comuns de B: ', amigosComunsB)
  65.  
  66.  
  67.     porcentagem =((amigosComunsA+amigosComunsB)*100)/qtdB
  68.     print("%s notifica %s que o adicione como amigo." %(u2, u1))
  69.     if(porcentagem >= 30):
  70.         solicitacoes[u1].append(u2)
  71.    
  72.    
  73.     return True
  74.  
  75.  
  76.    
  77.  
  78. def salvaRede(redeamigos):
  79.     #arq = open('./bdrede.txt', 'w+')
  80.    
  81.     return 0
  82.  
  83. def amigosComuns(u1, u2, redeamigos):
  84.     r = redeamigos[u1]
  85.     s = redeamigos[u2]
  86.     amigosComuns=0
  87.     for j in range(0,5):
  88.         if(r[j] == s[j]):
  89.             amigosComuns+=1
  90.    
  91.     return amigosComuns
  92.  
  93. def aceitaTodos(solicitacoes, redeamigos, redesocial):
  94.     keys = solicitacoes.keys()
  95.     posicao = 0
  96.     #print('Solicitacoes:', solicitacoes)
  97.    
  98.     #print(redeamigos)
  99.     for j in list(keys):
  100.         if(len(solicitacoes[j]) > 0):
  101.             for k in range(len(solicitacoes[j])):
  102.                 posicao = redesocial.index(solicitacoes[j][k])
  103.                 redeamigos[j][posicao]=1
  104.                 print('%s adicionou %s como amigo.' %(j, solicitacoes[j][k]))      
  105.     #print(redeamigos)
  106.     salvaRede(redeamigos)
  107.    
  108.    
  109.  
  110.     return 0
  111.  
  112.  
  113.  
  114.  
  115.  
  116. def main():
  117.     redeamigos = leRede()
  118.     redesocial = leUsuarios()
  119.     solicitacoes = {}
  120.     for j in redesocial:
  121.         solicitacoes[j] = []
  122.    
  123.     print('Rede amigos: ', redeamigos)
  124.     print('Rede social: ', redesocial)
  125.     print('Amigos em comuns: ',amigosComuns('Ana', 'Lucia', redeamigos))
  126.     notifica('Ana', 'Lucia', redeamigos, solicitacoes)
  127.     notifica('Ana', 'Joao', redeamigos, solicitacoes)
  128.     aceitaTodos(solicitacoes, redeamigos, redesocial)
  129.     #print(solicitacoes)
  130.  
  131.     return 0
  132.  
  133.  
  134. main()