{"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"provenance":[]},"kernelspec":{"name":"python3","display_name":"Python 3"},"language_info":{"name":"python"}},"cells":[{"cell_type":"markdown","source":["# Sobre o notebook\n","\n","A \"hora da prática\" é uma atividade do curso de Python para Data Science da Alura que contém diversos desafios envolvendo os aprendizados de cada aula.\n","\n","O notebook \"hora da prática\" é um notebook construído com espaço para as células dos desafios propostos no curso, com ele você tem espaço para construir e executar suas soluções"],"metadata":{"id":"_kwAaQ36gLQ1"}},{"cell_type":"markdown","source":["## Aula 1 - Bibliotecas"],"metadata":{"id":"Mc-KN0dA0Z83"}},{"cell_type":"markdown","source":["### Aquecimento"],"metadata":{"id":"Dq02fNPCl_JV"}},{"cell_type":"markdown","source":["#### Questão 1\n","\n","Escreva um código para instalar a versão `3.7.1` da biblioteca `matplotlib`"],"metadata":{"id":"l5eLWf0W0ikn"}},{"cell_type":"code","source":[],"metadata":{"id":"m4b6NquSaj3q"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["#### Questão 2\n","\n","Escreva um código para importar a biblioteca `numpy` com o alias `np`"],"metadata":{"id":"tQdX90Ue03c7"}},{"cell_type":"code","source":[],"metadata":{"id":"Gh8aZUwaakuT"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["#### Questão 3\n","Crie um programa que lê a seguinte lista de números e escolha um número desta aleatoriamente.\n","```\n","lista = [8, 12, 54, 23, 43, 1, 90, 87, 105, 77]\n","```"],"metadata":{"id":"gfg-aiip03vC"}},{"cell_type":"code","source":[],"metadata":{"id":"Sla71KJQalws"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["#### Questão 4\n","\n","Crie um programa que sorteia aleatoriamente um número inteiro menor que 100. \n","> Dica: use a função [`randrange()`](https://docs.python.org/3/library/random.html#random.randrange) da biblioteca `random`. Essa função recebe como parâmetro o valor limite para a escolha aleatória ou um intervalo se passado o limite mínimo e máximo. Por exemplo, `randrange(5)` gera valores inteiros menores que 5. \n"],"metadata":{"id":"oadrJbl704MM"}},{"cell_type":"code","source":[],"metadata":{"id":"UZSpqpOuanFT"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["#### Questão 5\n","Crie um programa que solicite à pessoa usuária digitar dois números inteiros e calcular a potência do 1º número elevado ao 2º. \n","> Dica: use a função [`pow()`](https://docs.python.org/3/library/random.html#random.randrange) da biblioteca `math` \n"],"metadata":{"id":"3RgyMaan04TD"}},{"cell_type":"code","source":[],"metadata":{"id":"UOzl8la0aoBd"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["### Aplicando a projetos"],"metadata":{"id":"ieCkWjvEmJU0"}},{"cell_type":"markdown","source":["#### Questão 6\n","Um programa deve ser escrito para sortear uma pessoa seguidora de uma rede social para ganhar um prêmio. A lista de participantes é numerada e devemos escolher aleatoriamente um número de acordo com a quantidade de participantes.\n","\n","Peça à pessoa usuária para fornecer o número de participantes do sorteio e devolva para ela o número sorteado."],"metadata":{"id":"0rS4QHP1mXQE"}},{"cell_type":"code","source":[],"metadata":{"id":"G4k5jUdAao8t"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["#### Questão 7\n","\n","Você recebeu uma demanda para gerar números de token para o acesso ao aplicativo de uma empresa. O token precisa ser par e variar de 1000 até 9998. Escreva um código que solicita à pessoa usuária o seu nome e gera uma mensagem junto a esse token gerado aleatoriamente:\n","\n","`\"Olá, [nome], o seu token de acesso é [token]! Seja bem-vindo(a)!\"`"],"metadata":{"id":"9D6cd4tomhSi"}},{"cell_type":"code","source":[],"metadata":{"id":"Y4ACJ4rEaqQW"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["#### Questão 8\n","Para diversificar e atrair novos clientes, uma lanchonete criou um item misterioso em seu cardápio chamado \"salada de frutas surpresa\". Neste item, são escolhidas aleatoriamente 3 frutas de uma lista de 12 frutas para compor a salada de frutas da pessoa cliente.\n","\n","Crie o código que faça essa seleção aleatória de acordo com a lista abaixo:\n","\n","```\n","frutas = [\"maçã\", \"banana\", \"uva\", \"pêra\", \n","          \"manga\", \"coco\", \"melancia\", \"mamão\",\n","          \"laranja\", \"abacaxi\", \"kiwi\", \"ameixa\"]\n","```"],"metadata":{"id":"FHJHH_WemhFJ"}},{"cell_type":"code","source":[],"metadata":{"id":"gR0BNVGoarOv"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["#### Questão 9\n","Você recebeu um desafio de calcular a raiz quadrada de uma lista de números, identificando quais resultaram em um número inteiro. A lista é a seguinte:\n","```\n","numeros = [2, 8, 15, 23, 91, 112, 256]\n","```\n","\n","Informe no final quais números possuem raízes inteiras e seus respectivos valores.\n","\n","> Dica: use a comparação entre a divisão inteira da raiz por 1 com o valor da raiz para verificar se o número é inteiro. Por exemplo:\n","```\n","num = 1.5\n","num_2 = 2\n","print(f'{num} é inteiro? :', num // 1 == num)\n","print(f'{num_2} é inteiro? :', num_2 // 1 == num_2)\n","```\n","Saída:\n","```\n","1.5 é inteiro? : False\n","2 é inteiro? : True\n","```"],"metadata":{"id":"m_voDwY9mhNJ"}},{"cell_type":"code","source":[],"metadata":{"id":"80eu9G8HaswW"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["#### Questão 10\n","Faça um programa para uma loja que vende grama para jardins. Essa loja trabalha com jardins circulares e o preço do metro quadrado da grama é de R$ 25,00. Peça à pessoa usuária o raio da área circular e devolva o valor em reais do quanto precisará pagar.  \n","\n","> Dica: use a variável [`pi`](https://docs.python.org/pt-br/3/library/math.html#math.pi) e o método [`pow()`](https://docs.python.org/3/library/random.html#random.randrange) da biblioteca `math`. O cálculo de área de um círculo é de: $Area = \\pi \\times r^2$"],"metadata":{"id":"dBl0iKd7mhYA"}},{"cell_type":"code","source":[],"metadata":{"id":"VK0RHwYIattI"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["## Aula 2 - Funções"],"metadata":{"id":"D9e3FqhO1S3X"}},{"cell_type":"markdown","source":["### Aquecimento"],"metadata":{"id":"DTBxjtxXa1dz"}},{"cell_type":"markdown","source":["#### Questão 1\n","\n","Escreva um código que lê a lista abaixo e faça:\n","\n","```\n","lista = [16, 14, 63, 65, 17, 99, 70, 11, 20, 48, 79, 32, 17, 89, 12, 25, 66]\n","```\n","\n","- A leitura do tamanho da lista\n","- A leitura do maior e menor valor\n","- A soma dos valores da lista\n","\n","Ao final exiba uma mensagem dizendo:\n","\n","```\n","\"A lista possui [tam] números em que o maior número é [maior] e o menor número é [menor]. A soma dos valores pares presentes nela é igual a [soma]\"\n","```\n","\n","> Dica: use as funções embutidas presentes na [documentação do Python](https://docs.python.org/3/library/functions.html)\n"],"metadata":{"id":"dedVZJ3fa1dz"}},{"cell_type":"code","source":[],"metadata":{"id":"KrGD5Nl5a1dz"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["#### Questão 2\n","\n","Escreva uma função que gere a tabuada de um número inteiro de 1 a 10, de acordo com a escolha da pessoa usuária. Como exemplo, para o número 7, a tabuada deve ser mostrada no seguinte formato:\n","```\n","Tabuada do 7:\n","7 x 0 = 0\n","7 x 1 = 7\n","[...]\n","7 x 10 = 70\n","```\n"],"metadata":{"id":"435rt7sha1dz"}},{"cell_type":"code","source":[],"metadata":{"id":"DxHuhb19a1d0"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["#### Questão 3\n","Crie a função que leia a lista abaixo e retorne uma nova lista com os múltiplos de 3:\n","\n","```\n","[97, 80, 94, 88, 80, 1, 16, 53, 62, 32, 24, 99]\n","```\n","\n","Utilize o `return` na função e salve a nova lista na variável `mult_3`."],"metadata":{"id":"OwoNphMPa1d0"}},{"cell_type":"code","source":[],"metadata":{"id":"kYrKxhd8a1d0"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["#### Questão 4\n","Crie uma lista dos quadrados dos números da seguinte lista `[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]`.\n","\n","Lembre-se de utilizar as funções lambda e `map()` para calcular o quadrado de cada elemento da lista.\n"],"metadata":{"id":"kFkuo_SUa1d0"}},{"cell_type":"code","source":[],"metadata":{"id":"Iav68EpKa1d0"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["### Aplicando a projetos"],"metadata":{"id":"PX7G0Qgha1d0"}},{"cell_type":"markdown","source":["#### Questão 5\n","\n","Você foi contratado(a) como cientista de dados de uma associação de skate. Para analisar as notas recebidas dos(as) skatistas em algumas competições ao longo do ano, você precisa criar um código que calcula a pontuação dos(as) atletas. Para isso, o seu código deve receber 5 notas digitadas pelas pessoas juradas.\n","\n","Para calcular a pontuação de um(a) skatista, você precisa eliminar a maior e a menor pontuação dentre as 5 notas e tirar a média das 3 notas que sobraram.\n","\n","Retorne a média para apresentar o texto:\n","`\"Nota da manobra: [media]\"`\n","\n"],"metadata":{"id":"oVWgrilxa1d0"}},{"cell_type":"code","source":[],"metadata":{"id":"1nbQ-hIRa1d0"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["#### Questão 6\n","\n","Para atender a uma demanda de uma instituição de ensino para a análise do desempenho de seus(suas) estudantes, você precisa criar uma função que receba uma lista de 4 notas e retorne:\n","- maior nota\n","- menor nota\n","- média\n","- situação (Aprovado(a) ou Reprovado(a))\n","\n","Para testar o comportamento da função, os dados podem ser exibidos em um texto:\n","```\n","\"O(a) estudante obteve uma media de [media], com a sua maior nota de [maior] pontos e a menor nota de [menor] pontos e foi [situacao]\"\n","```"],"metadata":{"id":"p3MnWjnda1d0"}},{"cell_type":"code","source":[],"metadata":{"id":"5Bx-K65ya1d0"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["#### Questão 7\n","\n","Você recebeu uma demanda para tratar 2 listas com os nomes e sobrenomes de cada estudante concatenando-as para apresentar seus nomes completos na forma `Nome Sobrenome`.\n","\n","As listas são:\n","```\n","nomes = [\"joão\", \"MaRia\", \"JOSÉ\"]\n","sobrenomes = [\"SILVA\", \"souza\", \"Tavares\"]\n","```\n","\n","O texto exibido ao fim deve ser parecido com:\n","```\n","\"Nome completo: Ana Silva\"\n","```\n","\n","> Dica: Utilize a função map para mapear os nomes e sobrenomes e as funções de string para tratar o texto."],"metadata":{"id":"_sPZj_x9a1d0"}},{"cell_type":"code","source":[],"metadata":{"id":"SdPq27E-a1d0"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["#### Questão 8\n","Como cientista de dados em um time de futebol, você precisa implementar novas formas de coleta de dados sobre o desempenho de jogadores e do time como um todo.\n","\n","Sua primeira ação é criar uma forma de calcular a pontuação do time no campeonato nacional a partir dos dados de gols marcados e sofridos em cada jogo.\n","\n","Escreva uma função chamada `calcula_pontos` que recebe como parâmetros duas listas de números inteiros, representando os gols marcados e sofridos pelo time em cada partida do campeonato.\n","\n","A função deve retornar a pontuação do time e o aproveitamento em percentual, levando em consideração que a vitória vale 3 pontos, o empate vale 1 ponto e a derrota 0 pontos. \n","\n","> Observação: Se a quantidade de gols marcados numa partida for maior que a de sofridos, o time venceu. Caso seja igual, o time empatou e se for menor, o time perdeu. Para calcular o aproveitamento devemos fazer a razão entre a pontuação do time pela pontuação máxima que ele poderia receber. \n","\n","Para teste, utilize as seguintes listas de gols marcados e sofridos\n","```\n","gols_marcados = [2, 1, 3, 1, 0]\n","gols_sofridos = [1, 2, 2, 1, 3]\n","```\n","\n","Provável texto exibido:\n","```\n","\"A pontuação do time foi de [pontos] e seu aproveitamento foi de [aprov]%\"\n","```\n"],"metadata":{"id":"vC2D83mCa1d0"}},{"cell_type":"code","source":[],"metadata":{"id":"zxOwouhta1d0"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["#### Questão 9\n","\n","Você recebeu o desafio de criar um código que calcula os gastos de uma viagem para um das quatro cidades partindo de Recife: Salvador, Fortaleza, Natal e Aracaju.\n","\n","O custo da diária do hotel é de 150 reais em todas elas e o consumo de gasolina na viagem de carro é de 14 km/l, sendo que o valor da gasolina é de 5 reais o litro. O gastos com passeios e alimentação a se fazer em cada uma delas por dia seria de `[200, 400, 250, 300]`, respectivamente.\n","\n","Sabendo que as distâncias entre Recife e cada uma das cidades é de aproximadamente `[850, 800, 300, 550]` km, crie três funções nas quais a 1ª calcule os gastos com hotel (`gasto_hotel`), a 2ª calcule os gastos com a gasolina (`gasto_gasolina`) e a 3ª os gastos com passeio e alimentação (`gasto_passeio`). \n","\n","Para testar, simule uma viagem de 3 dias para Salvador partindo de Recife. Considere a viagem de ida e volta de carro.\n","```\n","\"Com base nos gastos definidos, uma viagem de [dias] dias para [cidade] saindo de Recife custaria [gastos] reais\"\n","```\n"],"metadata":{"id":"QrBlxV7Da1d0"}},{"cell_type":"code","source":[],"metadata":{"id":"VQyaLsnWa1d0"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["#### Questão 10\n","\n","Você iniciou um estágio em uma empresa que trabalha com processamento de linguagem natural ([NLP](https://www.alura.com.br/artigos/guia-nlp-conceitos-tecnicas)). Sua líder requisitou que você criasse um trecho de código que recebe uma frase digitada pela pessoa usuária e filtre apenas as palavras com tamanho maior ou igual a 5, exibindo-as em uma lista. Essa demanda é voltada para a análise do padrão de comportamento de pessoas na escrita de palavras acima dessa quantidade de caracteres.\n","\n","> Dica: utilize as funções lambda e [`filter()`](https://docs.python.org/pt-br/3/library/functions.html?highlight=filter#filter) para filtrar essas palavras. Lembrando que a função embutida `filter()` recebe uma função (no nosso exemplo uma função lambda) e filtra um iterável de acordo com a função. Para tratar a frase use `replace()` para trocar a ',' '.', '!' e '?' por espaço.\n","\n","Use a frase `\"Aprender Python aqui na Alura é muito bom\"`para testar o código"],"metadata":{"id":"Uae8o3eMa1d1"}},{"cell_type":"code","source":[],"metadata":{"id":"_WxPiZWtpWoX"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":[],"metadata":{"id":"RNKCIcDJeBsX"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["## Aula 3 - Estrutura de dados compostas"],"metadata":{"id":"u_KhhnCfh3ST"}},{"cell_type":"markdown","source":["### Aquecimento"],"metadata":{"id":"6cya3lleh3SU"}},{"cell_type":"markdown","source":["#### Questão 1\n","\n","Crie um código para imprimir a soma dos elementos de cada uma das listas contidas na seguinte lista:\n","```\n","lista_de_listas = [[4,6,5,9], [1,0,7,2], [3,4,1,8]]\n","```"],"metadata":{"id":"MLv8mbbth3SU"}},{"cell_type":"code","source":[],"metadata":{"id":"P9dywp1xh3SU"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["#### Questão 2\n","\n","Crie um código para gerar uma lista que armazena o terceiro elemento de cada tupla contida na seguinte lista de tuplas:\n","```\n","lista_de_tuplas = [('Pedro', 1.74, 81), ('Júlia', 1.65, 67), ('Otávio', 1.81, 83)]\n","```"],"metadata":{"id":"C72i8R3Ih3SU"}},{"cell_type":"code","source":[],"metadata":{"id":"S9EL1Bvjh3SU"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["#### Questão 3\n","A partir da lista: `lista = ['Pedro', 'Júlia', 'Otávio', 'Eduardo']`, crie um código para gerar uma lista de tuplas em que cada tupla tenha o primeiro elemento como a posição do nome na lista original e o segundo elemento sendo o próprio nome."],"metadata":{"id":"e5ni69Lwh3SU"}},{"cell_type":"code","source":[],"metadata":{"id":"x3ckJThph3SU"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["#### Questão 4\n","Crie uma lista usando o list comprehension, que armazena somente o valor numérico de cada tupla caso o primeiro elemento seja 'Apartamento' a partir da seguinte lista de tuplas:\n","```\n","aluguel = [('Apartamento', 1700), ('Apartamento', 1400), ('Casa', 2150), ('Apartamento', 1900), ('Casa', 1100)]\n","```\n","\n"],"metadata":{"id":"mtuC2qBLh3SU"}},{"cell_type":"code","source":[],"metadata":{"id":"H1S8yT64h3SU"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["#### Questão 5\n","\n","Crie um dicionário usando o dict comprehension em que as chaves estão na lista `meses = ['Jan', 'Fev', 'Mar', 'Abr', 'Mai', 'Jun', 'Jul', 'Ago', 'Set', 'Out', 'Nov', 'Dez']` e os valores estão na lista `despesa = [860, 490, 1010, 780, 900, 630, 590, 770, 620, 560, 840, 360]`\n","\n"],"metadata":{"id":"Bd-Xp_iKh3SU"}},{"cell_type":"code","source":[],"metadata":{"id":"y7c5ickkh3SV"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["### Aplicando a projetos"],"metadata":{"id":"T9XuUQIph3SU"}},{"cell_type":"markdown","source":["#### Questão 6\n","\n","Uma loja possui um banco de dados com a informação de venda de cada representante e de cada ano e precisa filtrar somente os dados do ano 2022 com venda maior do que 6000. A loja forneceu uma amostra contendo apenas as colunas com os anos e os valores de venda para que você ajude a realizar a filtragem dos dados a partir de um código:\n","```\n","vendas = [('2023', 4093), ('2021', 4320), ('2021', 5959), ('2022', 8883), ('2023', 9859), ('2022', 5141), ('2022', 7688), ('2022', 9544), ('2023', 4794), ('2021', 7178), ('2022', 3030), ('2021', 7471), ('2022', 4226), ('2022', 8190), ('2021', 9680), ('2022', 5616)]\n","```\n","Crie uma lista usando list comprehension para filtrar os valores de 2022 e que sejam maiores que 6000.\n"],"metadata":{"id":"WrgAw6a0h3SV"}},{"cell_type":"code","source":[],"metadata":{"id":"jQvbtw2sh3SV"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["#### Questão 7\n","\n","Uma clínica analisa dados de pacientes e armazena o valor numérico da glicose em um banco de dados e gostaria de rotular os dados da seguinte maneira:\n","\n","- Glicose igual ou inferior a 70: 'Hipoglicemia'\n","- Glicose entre 70 a 99: 'Normal'\n","- Glicose entre 100 e 125: 'Alterada'\n","- Glicose superior a 125: 'Diabetes'\n","\n","A clínica disponibilizou parte dos valores e sua tarefa é criar uma lista de tuplas usando list comprehension contendo o rótulo e o valor da glicemia em cada tupla.\n","\n","```\n","glicemia = [129, 82, 60, 97, 101, 65, 62, 167, 87, 53, 58, 92, 66, 120, 109, 62, 86, 96, 103, 88, 155, 52, 89, 73]\n","```"],"metadata":{"id":"8Hl7OgcQh3SV"}},{"cell_type":"code","source":[],"metadata":{"id":"cIDqBZrxh3SV"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["#### Questão 8\n","Um e-commerce possui as informações de id de venda, quantidade vendida e preço do produto divididos nas seguintes listas:\n","\n","```\n","id = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]\n","quantidade = [15, 12, 1, 15, 2, 11, 2, 12, 2, 4]\n","preco = [93.0, 102.0, 18.0, 41.0, 122.0, 14.0, 71.0, 48.0, 14.0, 144.0]\n","```\n","\n","O e-commerce precisa estruturar esses dados em uma tabela contendo o valor total da venda, que é obtida multiplicando a quantidade pelo preço unitário. Além disso, tabela precisa conter um cabeçalho indicando as colunas: 'id', 'quantidade', 'preco' e 'total'. \n","\n","Crie uma lista de tuplas em que cada tupla tenha um id, quantidade, preço e valor total, na qual a primeira tupla é o cabeçalho da tabela.\n"],"metadata":{"id":"twYIfol8h3SV"}},{"cell_type":"code","source":[],"metadata":{"id":"XnmvwiIwh3SV"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["#### Questão 9\n","\n","Uma empresa possui filiais espalhadas nos estados da região sudeste do Brasil. Em uma das tabelas de cadastro das filiais, há uma coluna contendo a informação de qual é o estado a que pertence: \n","```\n","estados = ['SP', 'ES', 'MG', 'MG', 'SP', 'MG', 'ES', 'ES', 'ES', 'SP', 'SP', 'MG', 'ES', 'SP', 'RJ', 'MG', 'RJ', 'SP', 'MG', 'SP', 'ES', 'SP', 'MG']\n","```\n","\n","A empresa sempre está abrindo novas filiais, de modo que a tabela está constantemente recebendo novos registros e o gestor gostaria de possuir a informação atualizada da quantidade de filiais em cada estado. A partir da coluna com a informação dos estados, crie um dicionário usando dict comprehension com a chave sendo o nome de um estado e o valor sendo a contagem de vezes em que o estado aparece na lista.\n","\n","> Dica: Você pode fazer um passo intermediário para gerar uma lista de listas em que cada uma das listas possui o nome de apenas um estado com valores repetidos."],"metadata":{"id":"9tMZEiPzh3SV"}},{"cell_type":"code","source":[],"metadata":{"id":"qXU5UMUih3SV"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["#### Questão 10\n","\n","Nessa mesma tabela de cadastro de filiais, há uma coluna com as informações da quantidade de funcionários e o gestor gostaria de ter um agrupamento da soma de funcionários para cada estado. As informações contidas na tabela são: \n","\n","```\n","funcionarios = [('SP', 16), ('ES', 8), ('MG', 9), ('MG', 6), ('SP', 10), ('MG', 4), ('ES',9), ('ES', 7), ('ES', 12), ('SP', 7), ('SP', 11), ('MG',8), ('ES',8), ('SP',9), ('RJ', 13), ('MG', 5), ('RJ', 9), ('SP', 12), ('MG', 10), ('SP', 7), ('ES', 14), ('SP', 10), ('MG', 12)]\n","```\n","\n","A partir da lista de tuplas, crie um dicionário em que as chaves são os nomes dos estados únicos e os valores são as listas com o número de funcionários referentes ao estado. Crie também um dicionário em que as chaves são os nomes dos estados e os valores são a soma de funcionários(as) por estado.\n","\n","> Dica: Você pode fazer um passo intermediário para gerar uma lista de listas em que cada uma das listas possui apenas os valores numéricos de funcionários de cada estado.\n"],"metadata":{"id":"JONqYFZjh3SV"}},{"cell_type":"code","source":[],"metadata":{"id":"lq42ThQNh3SV"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["## Aula 4 - Lidando com exceções"],"metadata":{"id":"ckCXdwLdjYgM"}},{"cell_type":"markdown","source":["### Aquecimento"],"metadata":{"id":"OPBXL2tLjYgM"}},{"cell_type":"markdown","source":["#### Questão 1\n","\n","Faça um programa que solicite à pessoa usuária digitar dois números `float` e calcular a divisão entre esses números. O código deve conter um tratamento de erro, indicando o tipo de erro que foi gerado caso a divisão não seja possível de realizar.\n","\n","Teste o programa com o segundo valor numérico do input igual a 0 e também teste utilizando caracteres textuais no input para checar os tipos de erro que ocorrem."],"metadata":{"id":"7z7VpY0ujYgM"}},{"cell_type":"code","source":[],"metadata":{"id":"Zg1CLRTxjYgM"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["#### Questão 2\n","\n","Faça um programa que solicite à pessoa usuária digitar um texto que será uma chave a ser pesquisada no seguinte dicionário: `idades = {'Júlia': 16, 'Carol': 23, 'Alberto': 19, 'Roberta': 17}`, armazenando o resultado do valor em uma variável. O código deve conter um tratamento de erro `KeyError`, imprimindo a informação 'Nome não encontrado' caso ocorra o erro e imprimir o valor caso não ocorra nenhum.\n","\n","Teste o programa com um nome presente em uma das chaves do dicionário e com um que não esteja no dicionário para verificar a mensagem de erro.\n","\n"],"metadata":{"id":"KYgeJS5ljYgM"}},{"cell_type":"code","source":[],"metadata":{"id":"mcTh-_tDjYgM"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["#### Questão 3\n","Crie uma função que recebe uma lista como parâmetro e converta todos os valores da lista para `float`. A função deve conter um tratamento de erro indicando o tipo de erro gerado e retornar a lista caso não tenha ocorrido nenhum erro. Por fim, deve ter a cláusula `finally` para imprimir o texto: 'Fim da execução da função'."],"metadata":{"id":"tGQNNI_PjYgM"}},{"cell_type":"code","source":[],"metadata":{"id":"1oflR6ywjYgN"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["#### Questão 4\n","Crie uma função que recebe duas listas como parâmetros e agrupe os elementos um a um das listas, formando uma lista de tuplas de 3 elementos, onde o primeiro e segundo elemento da tupla são os valores na posição `i` das listas e o terceiro elemento é a soma dos valores na posição `i` das listas. A função deve conter um tratamento de erro indicando o tipo de erro gerado e retornar como resultado a lista de tuplas. Caso as listas enviadas como parâmetro tenham tamanhos diferentes, a função deve retornar um IndexError com a frase: 'A quantidade de elementos em cada lista é diferente.' \n","\n","Dados para testar a função:\n","\n","Valores sem erro:\n","```\n","lista1 = [4,6,7,9,10]\n","lista 2 = [-4,6,8,7,9]\n","```\n","Listas com tamanhos diferentes:\n","\n","```\n","lista1 = [4,6,7,9,10,4]\n","lista 2 = [-4,6,8,7,9]\n","```\n","Listas com valores incoerentes:\n","\n","```\n","lista1 = [4,6,7,9,'A']\n","lista 2 = [-4,'E',8,7,9]\n","```"],"metadata":{"id":"WWE44VS4jYgN"}},{"cell_type":"code","source":[],"metadata":{"id":"iMjbUztBjYgN"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["### Aplicando a projetos"],"metadata":{"id":"vNSw4u6hjYgN"}},{"cell_type":"markdown","source":["#### Questão 5\n","\n","Você recebeu como desafio desenvolver um código que contabiliza as pontuações de estudantes de uma instituição de ensino de acordo com suas respostas num teste. \n","\n","Este código deve ser testado para um exemplo de 3 estudantes com uma lista de listas em que cada lista possui as respostas de 5 questões objetivas de cada estudante. Cada questão vale um ponto e as alternativas possíveis são A, B, C ou D. \n","\n","Caso alguma alternativa em um dos testes não esteja entre as alternativas possíveis você deve lançar um **ValueError** com a mensagem `\"A alternativa [alternativa] não é uma opção de alternativa válida\"`. O cálculo das 3 notas só será realizado mediante as entradas com as alternativas A, B, C ou D em todos os testes.\n","\n","Se não for lançada a exceção, será exibida uma lista com as notas em cada teste.\n","\n","Os dados para o teste do código são:\n","\n","- **Gabarito da prova**:\n","```\n","gabarito = ['D', 'A', 'B', 'C', 'A']\n","```\n","Abaixo temos 2 listas de listas que você pode usar como teste\n","\n","- **Notas sem exceção:**\n","```\n","testes_sem_ex = [['D', 'A', 'B', 'C', 'A'], ['C', 'A', 'A', 'C', 'A'], ['D', 'B', 'A', 'C', 'A']]\n","```\n","- **Notas com exceção:**\n","```\n","testes_com_ex = [['D', 'A', 'B', 'C', 'A'], ['C', 'A', 'A', 'E', 'A'], ['D', 'B', 'A', 'C', 'A']]\n","```\n","\n","> Dica: Para verificar se uma entrada da lista não está entre as alternativas possíveis use a estrutura `lista[i] not in ['A','B','C','D']` (Por exemplo, `1 not in [2,3,4]`... Saída: `True`) "],"metadata":{"id":"AHC6OFQDjYgN"}},{"cell_type":"code","source":["# Função para correção das notas\n"],"metadata":{"id":"n7AJhrMpjYgN"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["# Testando no exemplo que não lança exceção\n"],"metadata":{"id":"o_05pMigo-tR"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["# Testando no exemplo que lança exceção\n"],"metadata":{"id":"PWeHm6Fjo-at"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["#### Questão 6\n","\n","Você está trabalhando com processamento de linguagem natural ([NLP](https://www.alura.com.br/artigos/guia-nlp-conceitos-tecnicas)) e, dessa vez, sua líder requisitou que você criasse um trecho de código que recebe uma lista com as palavras separadas de uma frase gerada pelo ChatGPT. \n","\n","Você precisa criar uma função que avalia cada palavra desse texto e verificar se o tratamento para retirar os símbolos de pontuação (',' '.', '!' e '?') foi realizado. Caso contrário, será lançada uma exceção do tipo **ValueError** apontando o 1º caso em que foi detectado o uso de uma pontuação por meio da frase `\"O texto apresenta pontuações na palavra \"[palavra]\".\"`.\n","\n","Essa demanda é voltada para a análise do padrão de frases geradas pela inteligência artificial.\n","\n","> Dica: Para verificar se uma ou mais das pontuações estão presentes em cada palavra, utilize a palavra chave `or` na condição if (Por exemplo, `('a' or 'b') in 'alura'` ... Saída: `True`) \n","\n","Os dados para o teste do código são:\n","\n","- **Lista tratada:**\n","```\n","lista_tratada = ['Python', 'é', 'uma', 'linguagem', 'de', 'programação', 'poderosa', 'versátil',\n","                  'e', 'fácil', 'de', 'aprender', 'utilizada', 'em', 'diversos', 'campos', 'desde',\n","                  'análise', 'de', 'dados', 'até', 'inteligência', 'artificial']\n","```\n","- **Lista não tratada:**\n","```\n","lista_nao_tratada = ['Python', 'é', 'uma', 'linguagem', 'de', 'programação', 'poderosa,', 'versátil',\n","                  'e', 'fácil,', 'de', 'aprender', 'utilizada', 'em', 'diversos', 'campos,', 'desde',\n","                  'análise', 'de', 'dados', 'até', 'inteligência', 'artificial!']\n","```\n"],"metadata":{"id":"AjQWxSIq28Ac"}},{"cell_type":"code","source":["# criando a função que recebe a lista de palavras\n"],"metadata":{"id":"gxVg1sc_xACI"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["# Testando no exemplo que não lança exceção\n"],"metadata":{"id":"gDvOq79slmlJ"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["# Testando no exemplo que lança exceção\n"],"metadata":{"id":"PQADJf42woaw"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["#### Questão 7\n","Você foi contratado como uma pessoa cientista de dados para auxiliar um laboratório que faz experimentos sobre o comportamento de uma cultura de fungos. O laboratório precisa avaliar constantemente a razão (divisão) entre os dados de pressão e temperatura do ambiente controlado recolhidos durante a experimentação para definir a melhor condição para os testes.\n","\n","Para cumprir com a demanda, você precisa criar uma função `divide_colunas` que recebe os dados das colunas de pressão e temperatura (que vem no formato de listas) e gerar uma nova coluna com o resultado da divisão. Os parâmetros da função são as duas listas e você deve tratar dentro dela ao menos 2 tipos de exceções:   \n","- Verificar se as listas têm o mesmo tamanho (ValueError)\n","- Verificar se existe alguma divisão por zero (ZeroDivisionError)\n","\n","Para testar a função, vamos realizar a divisão entre duas listas de dados coletados no experimento, com os valores de pressão e temperatura do ambiente controlado. \n","\n","Como teste, use os seguintes dados:\n","\n","- **Dados sem exceção:**\n","```\n","pressoes = [100, 120, 140, 160, 180]\n","temperaturas = [20, 25, 30, 35, 40]\n","```\n","- **Dados com exceção:**\n","1. Exceção de ZeroDivisionError \n","```\n","pressoes = [60, 120, 140, 160, 180]\n","temperaturas = [0, 25, 30, 35, 40]\n","```\n","2. Exceção de ValueError\n","```\n","pressoes = [100, 120, 140, 160]\n","temperaturas = [20, 25, 30, 35, 40]\n","```\n","\n","> Dica: Você pode usar `zip()` para parear os dados da lista_1 com a lista_2. Crie uma estrutura try-except que caso uma das exceções sejam lançadas, podemos ver o tipo de erro na saída.\n"],"metadata":{"id":"3IhndsTyzdRq"}},{"cell_type":"code","source":[],"metadata":{"id":"pYofyZVsuF2Y"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["# Testando no exemplo que não lança exceção\n"],"metadata":{"id":"gSvAEmxit1zI"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["# Testando no exemplo que lança exceção (ZeroDivisionError)\n"],"metadata":{"id":"bvebuMOot4ur"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["# Testando no exemplo que lança exceção (ValueError)\n"],"metadata":{"id":"sFsfTVHqt4d5"},"execution_count":null,"outputs":[]}]}