<jupyter_start><jupyter_text>Exercício 8: Rede Social 👑Você irá fazer uma rede social por meio de um vetor de pessoas *pessoas* e matriz *amizades*, similar ao apresentado abaixo:![Screenshot%20from%202021-03-10%2011-52-08.png](attachment:Screenshot%20from%202021-03-10%2011-52-08.png)em que, na matriz *amizades*, cada linha e coluna correspondem a pessoas que podem manter uma relação de amizade entre si. Além disso, a pessoas da i-ésima linha (e coluna!) corresponde a mesma pessoa na posição i no vetor *pessoas*. Exemplo, a pessoa na linha 0 (e coluna 0) é *Alice*, da mesma forma, a pessoa na linha e coluna 2 é a *Carol*.Nesta matriz o valor é 1 caso uma pessoa, representada na linha, e amiga da pessoa representada pela coluna. Por exemplo, *Alice* é amiga apenas de *Danielle* (veja a linha 0). Nesta rede social (assim como na vida 💁) pode ocorrer falta de reciprocidade entre as amizades, por exemplo: *Bob* é amigo de *Alice* mas *Alice* não é amiga de *Bob*.Aqui vai duas funções que você deverá fazer e testá-las por meio da matriz e vetor:- `exibe_amigos`: por meio do vetor *pessoas*, matriz *amizades* e o nome de uma pessoa, exibe o amigos desta pessoa. Você deverá armazenar esta lista de amigos em um vetor e retorná-lo.- `exibe_amigos_em_comum`: por meio do vetor *pessoas*, da matriz *amizades* e do nome de uma pessoa X e uma pessoa Y, exibe os amigos em comum entre essas duas pessoas. Você deverá armazenar essa lista de amigos em comum em um vetor e retorná-lo.Lembre-se de imprimir todas as saídas de forma que fique claro de qual entrada ela representa. A função *obtem_posicao_elemento* (exercício 3) poderá ajudar, porém *CHAME-A* e *não implemente novamente*. implemente sua função aqui!def exibe_amigos(pessoas, amizades, nome_pessoa):    indice = pessoas.index(nome_pessoa)    amigos = []    for ind, number in enumerate(amizades[indice]):        if number == 1:            amigos.append(pessoas[ind])    return amigosdef exibe_amigos_em_comum(pessoas, amizades, nome_pessoa_1, nome_pessoa_2):    indice_1 = pessoas.index(nome_pessoa_1)    indice_2 = pessoas.index(nome_pessoa_2)    amigos = []    for column in range(len(amizades)):        if amizades[indice_1][column] == 1 and amizades[indice_2][column] == 1:            amigos.append(pessoas[column])    return amigos<jupyter_code>#crie os testes aqui!

pessoas = ["Alice","Bob","Carol"]
amizades = [[0,1,0],
           [1,1,0],
            [1,1,0]]

amigos = exibe_amigos(pessoas, amizades,"Bob")
print(f"Amigos de Bob: {amigos}")

#Faça mais testes paara exibe_amigos e para exibe_amigos_em_comum

amigos = exibe_amigos(pessoas, amizades,"Carol")
print(f"Amigos de Carol: {amigos}")

amigos = exibe_amigos(pessoas, amizades,"Alice")
print(f"Amigos de Alice: {amigos}")

print(f"Amigos de Alice e Carol: {exibe_amigos_em_comum(pessoas, amizades, 'Alice', 'Carol')}")<jupyter_output>Amigos de Bob: ['Alice', 'Bob']
Amigos de Carol: ['Alice', 'Bob']
Amigos de Alice: ['Bob']
Amigos de Alice e Carol: ['Bob']<jupyter_text>Unidade 3  Exercício 2: Operações em stringNesse exercício você irá implementar duas funções que auxiliarão nos exercícios posteriores:- **elimina_caracteres** (2 parâmetros) Elimina todas as ocorrências dos caracteres especificados de um texto. Tanto o texto quanto os caracteres a serem removidos são passados como parâmetros. Exemplo: `elimina_caracteres('correndo contra o tempo', 'coe')` devem resultar na string `rrnd cntra tmp`. Não altere o *for* já criado! O método *.replace* pode te ajudar! consulte [documentação](https://docs.python.org/3.5/library/stdtypes.htmlstring-methods) ou os [slides](https://daniel-hasan.github.io/cefet-web-grad/classes/python2/5).    DICA: Será necessario usar o *.replace* uma vez para cada caractere especificado (ou seja, dentro de um laço).<jupyter_code>def elimina_caracteres(texto, caracteres_para_eliminar):
    text = texto
    for caracter_eliminar in caracteres_para_eliminar:
        text = text.replace(caracter_eliminar, "")
    return text
# Faça os testes 
resultado_1 = elimina_caracteres('correndo contra o tempo', 'coe')
resultado_2 = elimina_caracteres('trigo para tigres tristes', 'ieo') #saída: trg para tgrs trsts

#lembre-se de imprimir os resultados
print(resultado_1)
print(resultado_2)<jupyter_output>rrnd ntra  tmp
trg para tgrs trsts<jupyter_text>- **substitua_caracteres**: (3 parâmetros) Dado um texto, uma string de procura e uma string de reposição, sendo que a string de procura e reposição são de mesmo tamanho. Substitua no texto o caractere na posição i da string de procura pelo caractere na mesma posição i na string de reposição. O texto, os caracteres a serem procurados no texto e os caracteres a serem colocados no lugar serão passados como parâmetro.    Exemplo:  `substitua_caracteres('o sapo nao lava o pe', 'aoe', 'iiu')` devem resultar na string `'i sipi nii livi i pu'`.    DICA: Será necessario usar o *.replace* uma vez para cada caractere especificado (ou seja, dentro de um laço).<jupyter_code>def substitua_caracteres(texto, caracteres_procura, caracteres_substituir_por):
    text = texto

    for i in range(len(caracteres_procura)):
        caractere_procura = caracteres_procura[i]
        caractere_substituir_por = caracteres_substituir_por[i]
        text = text.replace(caractere_procura, caractere_substituir_por)
        
    return text
#testes! Faça mais para verificar todos os casos.
# Lembre-se de imprimir o resultado.

resultado_1 = substitua_caracteres('o sapo nao lava o pe', 'aoe', 'iiu')
resultado_2 = substitua_caracteres('ana comprou uma ariranha', 'aoi', 'uee') #saida: unu cempreu umu urerunhu

print(resultado_1)
print(resultado_2)<jupyter_output>i sipi nii livi i pu
unu cempreu umu urerunhu<jupyter_text>Exercício 3: Palíndromos 👑Segundo a [Oxford Languages](https://languages.oup.com/google-dictionary-pt/), *palíndromos* são textos que se pode ler, indiferentemente, da esquerda para a direita ou vice-versa. Por exemplo: "arara", "asa", "mirim"... E também as frases: "A cara rajada da jararaca", "Socorram-me, subi no ônibus em Marrocos"...Perceba que, em frases, deve-se ignorar a pontuação, acentuação, espaços e maiúsculas/minúsculas.Implemente a função *verifica_palindromo* que recebe como parâmetro uma string (texto ou única palavra) e retorna *true* caso o parâmetro seja um palíndromo ou *false*, caso contrário. As funções do exercício anterior podem lhe ajudar para processamento de string, para isso *chame-as* e *não implemente-as*. Ignore as seguintes pontuações: `, - ! ?` e o espaço em branco. Além disso, acentos agudos, til e circunflexo em vogais devem ser ignorados.<jupyter_code>#implemete sua função aqui!
def verifica_palindromo(texto:str)->bool:
    text = texto.lower()

    text = elimina_caracteres(text, " ,-!?")

    text = substitua_caracteres(text, "óõô", "ooo")
    text = substitua_caracteres(text, "áãâ", "aaa")
    text = substitua_caracteres(text, "éê", "ee")
    text = substitua_caracteres(text, "íî", "ii")
    text = substitua_caracteres(text, "úû", "uu")

    for index in range(len(text)):
        inverse_index = len(text) - index - 1

        if(text[index] != text[inverse_index]):
            return False

    return True
#testes
print(verifica_palindromo("após a sopa"))
print(verifica_palindromo("azul"))
print(verifica_palindromo("arara"))<jupyter_output>True
False
True<jupyter_text>Exercício 5: Funções como parâmetro 2Você irá implementar a função *executa_operacao_vetor* que recebe como parâmetro uma operação (função) e dois vetores, *vetor1* e *vetor2*, de mesmo tamanho, e executa uma operação entre os elementos da mesma posição deste vetor. Esta operação é uma função que será chamada para cada posição deste vetor (ex: *operacao(vetor1[i], vetor2[i])*) e retornará o resultado desta operação. Caso os dois vetores sejam de tamanho diferentes, deve-se exibir uma *mensagem de erro* e não realizar a operação.Veja o exemplo abaixo, considerando a operação soma (implementada no exercício 0.2).![Screenshot%20from%202021-03-10%2015-05-05.png](attachment:Screenshot%20from%202021-03-10%2015-05-05.png)Você deverá implementar a função *executa_operacao_vetor* e três operações distintas (por exemplo, *soma(a, b)*, *multiplica(a, b)* e *subtrai(a, b)*), cada uma, criando uma função de forma uma diferente, siga o tutorial e o exercício anterior.PS: Lembre-se de sempre rodar a função antes e trocar os null<jupyter_code>#implemente sua função aqui!
def soma(a, b):
    return a+b

def multiplica(a, b):
    return a*b

def subtrai(a, b):
    return a-b

def executa_operacao_vetor(operacao, vetor_1, vetor_2):
    if len(vetor_1) != len(vetor_2):
        raise Exception("Os vetores passados são de tamanho diferentes")

    vetor = []

    for index in range(len(vetor_1)):
        vetor.append(operacao(vetor_1[index],vetor_2[index]))

    return vetor
#testes! Lembre-se de testar todas as funções e imprimir o resultado

vetor_1 = [4,2,-1,10]
vetor_2 = [10,2,3,5]

print(executa_operacao_vetor(soma, vetor_1, vetor_2))
print(executa_operacao_vetor(subtrai, vetor_1, vetor_2))
print(executa_operacao_vetor(multiplica, vetor_1, vetor_2))
#Lançamento de exceção

print(executa_operacao_vetor(soma, [1,2], []))<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.09835355285961872, 'fraction_numerical': 0.01733102253032929, 'mean_word_length': 5.030698889614631, 'pattern_counts': {'":': 0, '<': 17, '<?xml version=': 0, '>': 18, 'https://': 3, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '5', 'dir': 'jupyter-structured-clean-dedup', 'id': '490717', 'license': 'CC-BY-4.0', 'n_tokens_mistral': 3598, 'n_tokens_neox': 3469, 'n_words': 1054, 'path': 'python_bas.ipynb', 'repo_name': 'IagorSs/roteiro-projetos', 'size': '9232'}