Python: Revisei conceitos básicos importantes do python. Aprendi sobre manipulação de arquivos, comprehension, orientação a objetos e principalmente programação funcional, destacando como uma tarefa pode ser reduzida a apenas uma linha de código pela abstração que a linguagem oferece.
Jupyter: Aprendi sobre como a ferramenta é interessante para organizar arquivos e executar códigos Python célula por célula, tornando o entendimento mais fácil, além de dar suporte ao markdown no mesmo arquivo, o que possibilita uma boa documentação do código.
Pandas: Aprendi vários comandos da biblioteca, e como ela torna a manipulação dos dados de arquivos muito mais fácil. Essa diferença ficou nítida comparando a manipulação de um arquivo .csv somente com python no exercício de ETL, para a utilização do Pandas na execução do desafio.
Matplotlib: Aprendi vários comandos da biblioteca, para transformar os dados obtidos com o Pandas em gráficos dos mais variados tipos, melhorando significativamente a visualização dos dados.
6. Implementar uma função que recebe uma lista e uma função, e aplica a função recebida na lista - neste exercício a função recebida eleva os itens da lista ao quadrado.
8. Implementar uma função que recebe um número variável de parâmetros nomeados e não nomeados e imprime o valor de cada parâmetro recebido.
9. Implementar a classe Lampada com os metodos liga, desliga e esta_ligada, e testar conforme solicitado.
10. Implementar uma função que recebe uma string de números separados por vírgula e retorna a soma de todos eles.
11. Implementar uma função que recebe uma lista e retorna 3 listas, a lista original dividida em 3 partes iguais.
13. Calcule o valor mínimo, valor máximo, valor médio e a mediana de uma lista com valores aletórios.
15. Implementar as classes Pato e Pardal, que herdam da superclasse Passaro os metodos voar e emitir_som, e testar conforme solicitado.
16. Implementar a classe Pessoa, com o atributo privado nome, e utilizar properties para obter e alterar o atributo.
17. Implementar a classe Calculo que possui os métodos adicao() e subtracao(). Ambos aceitam dois parâmetros e devem retornar a soma e a subtração deles, respectivamente.
18. Criar a classe Ordenadora que possui o atributo listaBagunçada e os métodos ordenacaoCrescente e ordenacaoDecrescente, que ordenam a lista.
19. Criar a classe Aviao, que possui os atributos modelo, velocidade_maxima, cor e capacidade, de modo que todos os aviões possuam o atributo cor com o valor azul, e testar com os valores de entrada.
21. Implementar o corpo da função conta_vogais, que recebe uma string e retorna a contagem de vogais presentes na string.
22. Implementar a função calcula_saldo, que recebe uma lista de tuplas correspondendo a um conjunto de lançamentos bancários, e retorna o valor final.
23. Implementar a função calcular_valor_maximo, que recebe uma lista de operadores e uma lista de operandos, e aplica os operadores nos respectivos operandos, retornando o maior valor obtido após as operações.
24. Ler o arquivo estudantes.csv e imprimir: o nome do estudante, as três maiores notas em ordem decrescente e a média das três maiores notas, com duas casas decimais de precisão.
25. Desenvolver o corpo de uma função que recebe um dicionário com produtos e seus valores, e retornar uma lista de tuplas com os produtos que possuem valor acima da média.
26. Desenvolver o corpo da função pares_ate, que retorna um generator para os valores pares de 2 até n, sendo n o valor passado como parâmetro na função.
Etapa 2 - Apresentar a média de receita de bilheteria bruta dos principais filmes, considerando todos os atores
Etapa 4 - Realizar a contagem de aparições do filme de melhor bilheteria de cada ator, ordenando pela quantidade em ordem decrescente e, em segundo nível, pelo nome do filme.
Etapa 5 - Apresentar a lista dos atores ordenada pela receita bruta de bilheteria dos seus filmes, em ordem decrescente
A lista b utiliza list comprehension para ser formada, pegando apenas os valores da lista a em que o resto da divisão por 2 é diferente de 0, ou seja, valores ímpares.
O if dentro do for checa se a palavra escrita de trás pra frente é igual a ela normal.
É utilizado enumerate na lista que esta no for, o que possibilita usar o índice de cada valor. Após isso, basta printar de forma formatada.
A função recebe a lista e passa ela para um set, que não permite valores duplicados. Depois, passa o set novamente para lista, salva em uma nova lista e a retorna.
É importada a biblioteca json para leitura do arquivo. O with open abre o arquivo e o método json.load faz a leitura, salvando o conteúdo na variável dados.
A função my_map recebe uma lista e cria uma nova lista com list comprehension aplicando a função potencia_de_2, que também é passada como parâmetro. A nova lista gerada é retornada.
O arquivo é aberto em modo leitura, salvando na variável dados. O for printa o conteúdo do arquivo linha por linha.
O *args aceita vários parâmetros não nomeados, e o **kwargs aceita vários parâmetros nomeados. Os dois laços for printam os parâmetros não nomeados e nomeados passados, respectivamente.
A classe Lampada possui um atributo booleano que é False quando está desligada e True quando está ligada. É criado um objeto do tipo Lampada, que inicia desligada. O método liga() muda o atributo de False para True e liga a lâmpada. O método desliga() muda o atributo de True para False e desliga a lâmpada. O método esta_ligada() checa se o atributo é True ou False, ou seja, se a lâmpada está ligada ou desligada.
O método split cria uma lista de strings, separando cada uma nas vírgulas da string original. O for percorre as strings da lista, os transforma em inteiro e soma todos.
A função dividir_lista() cria 3 novas listas, o for percorre de 0 até 4. A lista 1 recebe os valores dois índices 0 a 3, a lista 2 recebe os valores dos índices 4 a 7. E a lista 3 recebe os valores dos índices 8 a 11. Após a divisão, as 3 novas listas são retornadas
O for percorre a chave e o valor do dicionário, e inclui apenas o valor na nova lista. Para eliminar os duplicados, é aplicado a conversão para set na lista, e depois a conversão para lista novamente.
A mediana é calculada somando os dois valores centrais da lista (índices 24 e 25) e divindo por 2. A média é calculada somando todos os valores e dividindo por 50. Para achar o valor mínimo e máximo, é aplicado a função min e max, respectivamente.
Usar índice negativo nessa formatação faz a lista ser impressa de trás pra frente.
As classes Pato e Pardal possuem seus próprios atributos nome e som, e na hora que são instanciadas, chamam o super construtor da classe Passaro, a qual possui os métodos voar() e emitir som(), recebendo os atributos das classes filhas e os executando.
O decorador @property transforma o método como propriedade da classe, funcionando como um método para obter o nome da instância. O decorador @nome.setter é usado para modificar o valor do atributo nome.
O método soma() retorna a adição dos dois parâmetros recebidos. O método subtracao() retorna a diferença dos dois parâmetros recebidos.
O método ordenacaoCrescente() retorna o atributo listaBagunçada do objeto instanciado ordenado de forma crescente, enquanto o método ordenacaoDecrescente() retorna de forma decrescente.
O atributo cor é definido como privado, e não possui setter, apenas @property para obter a cor. Todos os aviões instanciados são setados com a cor azul pelo construtor.
O arquivo é lido e salvo na variável numeros. A função map transforma todos os itens do arquivo em int. A função filter seleciona apenas os valores pares. A função sorted ordena de forma decrescente pelo valor, selecionando os 5 primeiros. A função sum soma todos os 5 valores.
A função filter seleciona apenas os caracteres que são vogais. O resultado é transformado em uma lista de caracteres e a função len obtém o tamanho dessa lista, que é o número de vogais.
A função map transforma o primeiro valor de cada tupla como positivo caso o segundo valor seja igual a C (crédito) e como negativo caso contrário (débito). A função reduce realiza a soma acumulada de todos os valores, somando créditos e subtraindo débitos. O valor calculado é retornado ao final.
A função zip faz a junção dos operandos com as tuplas de operadores. A função map checa qual é o operador a ser executado e realiza a operação correspondente, salvando na lista resultados. A função max encontra o maior valor dessa lista.
O arquivo é lido e salvo na variável dados. Cada linha é salva em uma lista com o método readlines. A função map remove os espaços em branco e divide os itens da linha nas vírgulas, salvando em uma lista. O laço for percore cada estudante da lista, pegando seu nome, suas notas com a função map transformando os valores para inteiro, as 3 maiores notas com a função sorted ordenando as notas de forma decrescente, e a média com a função sum somando as 3 maiores notas e dividindo por 3, arredondando com 2 casas decimais. Todos esses itens são utilizados para criar um dicionário para cada estudante, e cada dicionário é armazenado na lista resultado. Depois, a função sorted ordena essa lista em ordem alfabética.
A função sum soma os preços dos produtos do dicionário e divide pela quantidade, obtendo a média. Para obter os maiores que a média, é usado list comprehension, iterando sobre os produtos do dicionário ordenado pelo valor com a função sorted. A lista inclui apenas os valores maiores que a média, já de maneira ordenada do maior para o menor.
A função inicia o num com valor 2. Cada vez que o generator for chamado, caso a condição do while seja True, num sera retornado e seu valor será incrementado em dois. O yield garante que o valor esteja sempre salvo.
Primeiramente, importei a função reduce da biblioteca functool, pois será necessária. Para a leitura do arquivo, utilizei with open com o caminho do arquivo, utilizando o prefixo r para que as barras invertidas não sejam interpretadas como caracteres de escape.
from functools import reduce
with open(r"Sprint 2\Exercicios\Parte4\Arquivo\actors.csv") as dados:
linhas = dados.readlines()
listas = list(map(lambda linha: linha.strip('\n').split(','), linhas))
listas.pop(0)Utilizei o método readlines para ler cada linha do arquivo. Depois, apliquei map em cada linha para remover a quebra de linha e dividir os itens da linha nas vírgulas, salvando cada ator como uma lista. Por fim, removi a primeira linha, que consiste nos nomes das colunas.
Criei um nova lista, que será responsável por armazenar dicionários, um para cada ator.
dic_atores = []Após isso, utilizei um laço for para percorrer cada lista, que corresponde a um ator. Tratando o caso especial do Robert Downey Jr., que possui vírgula separando seu nome do sobrenome e aspas no início e no fim.
for lista in listas:
if lista[1] == ' Jr."':
actor = lista[0].strip('"') + lista[1].strip('"')
total_gross = float(lista[2])
number_of_movies = int(lista[3])
average_per_movie = float(lista[4])
movie_1 = lista[5]
gross = float(lista[6])
else:
actor = lista[0]
total_gross = float(lista[1])
number_of_movies = int(lista[2])
average_per_movie = float(lista[3])
movie_1 = lista[4]
gross = float(lista[5])
dic_atores.append({
'actor' : actor,
'total_gross' : total_gross,
'number_of_movies' : number_of_movies,
'average_per_movie' : average_per_movie,
'movie_1' : movie_1,
'gross' : gross
})O if verifica se o segundo item da lista é igual a ' Jr."'. Caso for, atribui à variável actor a concatenação do nome e do sobrenome, removendo as aspas. Os itens da lista são atribuídos a uma váriavel com o mesmo nome das colunas do arquivo csv, sendo convertidos para seu tipo correto. Cada ator é inserido como um dicionário na lista dic_atores.
with open(r"Sprint 2\Exercicios\Parte4\etapa-1.txt", "w", encoding="utf-8") as arquivo:
ordenado_por_filmes = sorted(dic_atores, key=lambda x: x['number_of_movies'], reverse=True)
ator_com_mais_filmes = ordenado_por_filmes[0]
texto = f'O(A) ator/atriz que possui mais filmes no dataset é {ator_com_mais_filmes['actor']} com {ator_com_mais_filmes['number_of_movies']} filmes.'
arquivo.write(texto)O arquivo etapa-1.txt é aberto para escrita. A lista de atores é ordenada de forma decrescente, baseada no número de filmes. O ator com mais filmes é o índice 0 dessa lista. Após isso, o texto é formatado e escrito no arquivo.
Etapa 2 - Apresentar a média de receita de bilheteria bruta dos principais filmes, considerando todos os atores
with open(r"Sprint 2\Exercicios\Parte4\etapa-2.txt", "w", encoding="utf-8") as arquivo:
media_de_receita = reduce(lambda soma, x: x['gross'] + soma, dic_atores, 0) / len(dic_atores)
texto = f'A média de receita de bilheteria dos principais filmes de cada ator no dataset é de {round(media_de_receita, 2)} milhões de dólares.'
arquivo.write(texto)O arquivo etapa-2.txt é aberto para escrita. A média da receita é calculada utilizando reduce, somando todos os valores da coluna gross e dividindo pela quantidade de atores. Após isso, o texto é formatado e escrito no arquivo.
with open(r"Sprint 2\Exercicios\Parte4\etapa-3.txt", "w", encoding="utf-8") as arquivo:
ordenado_por_media = sorted(dic_atores, key=lambda x: x['average_per_movie'], reverse=True)
ator_com_maior_media = ordenado_por_media[0]
texto =(
f'O(A) ator/atriz que possui maior média de receita de bilheteria bruta por filme no dataset é '
f'{ator_com_maior_media['actor']} com {ator_com_maior_media['average_per_movie']} milhões de dólares de média.'
)
arquivo.write(texto)O arquivo etapa-3.txt é aberto para escrita. A lista de atores é ordenada de forma decrescente, baseada na coluna average_per_movie. O ator com maior média é o índice 0 dessa lista. Após isso, o texto é formatado e escrito no arquivo.
Etapa 4 - Realizar a contagem de aparições do filme de melhor bilheteria de cada ator, ordenando pela quantidade em ordem decrescente e, em segundo nível, pelo nome do filme.
with open(r"Sprint 2\Exercicios\Parte4\etapa-4.txt", "w", encoding="utf-8") as arquivo:
lista_quantidades = []
for item in dic_atores:
lista_quantidades.append(item['movie_1'])
lista_final = []
for filme in lista_quantidades:
quantidade = lista_quantidades.count(filme)
lista_final.append((filme,quantidade))
set1 = set(lista_final)
lista_final = list(sorted(set1, key=lambda x: (-x[1], x[0])))
for item in lista_final:
texto = f'O filme {item[0]} aparece {item[1]} vez no dataset\n' if item[1] == 1 else f'O filme {item[0]} aparece {item[1]} vezes no dataset\n'
arquivo.write(texto)O arquivo etapa-4.txt é aberto para escrita. É criada uma lista para armazenar todos os filmes de maior bilheteria de cada ator. Depois, é criada uma lista final, onde o laço for conta quantas vezes cada filme apareceu e armazena na lista final o nome do filme e a quantidade. Depois, a lista é transformada em um set para eliminar os duplicados, e depois é novamente passada para lista ordenando primeiramente pela quantidade em ordem decrescente, e depois pelo nome do filme em ordem alfabética. Após isso, o texto é formatado e escrito no arquivo, tratando como plural os casos em que aparecem mais de uma vez.
Etapa 5 - Apresentar a lista dos atores ordenada pela receita bruta de bilheteria dos seus filmes, em ordem decrescente
with open(r"Sprint 2\Exercicios\Parte4\etapa-5.txt", "w", encoding="utf-8") as arquivo:
ordenado_por_receita = sorted(dic_atores, key=lambda x: x['total_gross'], reverse=True)
for item in ordenado_por_receita:
texto = f'{item['actor']} - {item['total_gross']}\n'
arquivo.write(texto)O arquivo etapa-5.txt é aberto para escrita. A lista de atores é ordenada de forma decrescente, baseada na coluna total_gross. Após isso, o laço for formata o texto e escreve no arquivo, linha por linha.
A Sprint atual não possui certificados.






























