Olá, Yan. Como vai?
Seja muito bem-vindo à comunidade da Alura! Pode ficar super tranquilo, não há problema algum em compartilhar o link do seu repositório aqui no fórum. Pelo contrário: essa é uma das melhores práticas para quem está estudando programação, pois valoriza o seu perfil, ajuda a movimentar o seu GitHub e permite que outras pessoas analisem o seu código de forma limpa.
Parabéns pela qualidade das suas resoluções! Seus códigos estão extremamente organizados, com comentários muito didáticos explicando o seu raciocínio e utilizando recursos nativos modernos e avançados do Python, como type hinting (as indicações de tipo como list[int]), expressões lambda, map() e zip().
Como você mencionou que está aberto a feedbacks e outras maneiras de aplicar a lógica, analisei as suas imagens detalhadamente e encontrei alguns pontos muito interessantes para debatermos e elevarmos ainda mais o nível do seu código. Vamos a eles:
1. O detalhe oculto na Questão 5 (Notas dos Skatistas)
A sua lógica para resolver esse problema foi muito criativa ao usar list comprehension para filtrar os valores:
lista_notas = [numero for numero in lista_notas if numero not in maior_e_menor_nota]
Essa abordagem funciona perfeitamente quando as notas digitadas são todas diferentes. Contudo, ela esconde um pequeno bug caso o skatista receba notas repetidas. Imagine o seguinte cenário real: as notas digitadas são [9, 8, 8, 7, 5].
- A sua lista
maior_e_menor_nota terá os valores [9, 5]. - Na sua linha de filtro, o código vai olhar nota por nota. Quando ele passar pelo número
8, ele verá que 8 não está em [9, 5]. O número 8 é mantido. - O problema ocorre se a nota repetida for a máxima ou a mínima. Se o júri der as notas
[9, 9, 8, 7, 5], o max é 9. A sua condição if numero not in [9, 5] vai descartar os dois números 9 da lista, restando apenas duas notas para calcular a média, em vez de eliminar apenas uma.
Como resolver com uma boa prática: Em Python, para remover apenas a primeira ocorrência de um elemento específico em uma lista (mantendo os repetidos caso existam), utilizamos o método .remove(). Veja como a sua função ficaria mais blindada:
def nota_skatista(n1, n2, n3, n4, n5):
lista_notas = [n1, n2, n3, n4, n5]
# Remove apenas a primeira ocorrência do máximo e do mínimo
lista_notas.remove(max(lista_notas))
lista_notas.remove(min(lista_notas))
media_skatista = sum(lista_notas) / len(lista_notas)
return round(media_skatista, 2)
2. Simplificando a Questão 2 (Tabuada)
Na Questão 2, você escreveu dez linhas manuais de print(). O código funciona perfeitamente e exibe o resultado correto, mas imagine se o desafio pedisse a tabuada até o número 100? Faria o código ficar gigantesco, certo?
Sempre que notar um padrão repetitivo em programação, lembre-se que podemos automatizá-lo com uma estrutura de repetição (for). Veja como reduzir aquelas dez linhas para apenas duas usando a função range():
def tabuada(numero: int):
# O range(0, 11) vai passar por todos os números de 0 até 10
for i in range(0, 11):
print(f"{numero} x {i} = {numero * i}")
3. Pequena correção conceitual na Questão 8 (Cálculo de Pontos)
Na imagem da Questão 8, o seu terminal exibiu o seguinte resultado: A pontuação do time foi de 7 e seu aproveitamento foi de 0.47%.
Na verdade, o aproveitamento do time foi de 46.67% (ou 0.4667 em formato decimal). Como no seu print() você adicionou o símbolo de porcentagem (%) diretamente ao lado da variável aproveitamento, o resultado exibido deu a entender que o time teve menos de 1% de aproveitamento.
Para que a exibição fique perfeita matematicamente, basta multiplicar o valor por 100 na hora de exibir:
print(f"A pontuação do time foi de {pontos} e seu aproveitamento foi de {round(aproveitamento * 100, 2)}%")
Suas soluções para as questões 3, 4, 6 and 7 (com destaque para a formatação de nomes com map e lambda) ficaram excelentes e dignas de quem tem muita facilidade com lógica.
Continue com esse foco incrível, documentando seus códigos e compartilhando seus projetos no GitHub. Essa postura ajuda demais a crescer na carreira de engenharia e ciência de dados!
Espero que possa ter lhe ajudado!