Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Resolução

Este foi meu codigo

notas_turma = input('Insira as notas da turma: ').strip().split()

tamanho_lista = len(notas_turma)

def calc_media(notas, tamanho):
    notas_float = []
    for nota in notas:
        try:
            notas_float.append(float(nota))
        except ValueError:
            print(f'Valor invalido ignorado: {nota}')

    return (sum(notas_float)) / tamanho


print(calc_media(notas_turma, tamanho_lista))

Este foi a resolução dada

notas = input("Digite as notas dos alunos separadas por vírgula: ").split(", ")
notas = [float(nota) for nota in notas]
media = sum(notas) / len(notas)
print(f"Média final da turma: {media:.2f}")

Fico pensando se fiz um código muito verboso.

1 resposta
solução!

Oii, Fabio! Tudo certo?

Cara, é super normal esse sentimento de "será que escrevi demais?". Quando estamos aprendendo, nossa tendência é detalhar cada passo do raciocínio para garantir que a lógica funcione, e isso não é ruim.

O que seu código tem de bom:

Você teve um cuidado: a segurança.
Se o usuário digitar uma letra sem querer, a resolução oficial quebra (dá erro e para o programa). O seu código usa um bloco try/except, o que faz com que ele continue funcionando mesmo se houver um erro de digitação. Isso é uma prática excelente no mundo real.

Por que ele pareceu "verboso"?

A principal diferença é que a resolução oficial usou List Comprehension, que é aquele jeito do Python de criar listas em uma linha só: [float(nota) for nota in notas].

Pra deixar seu código mais direto sem perder a sua lógica de tratamento de erro, você poderia fazer pequenos ajustes:

  1. Ordem das coisas: Você definiu tamanho_lista antes de limpar os dados. Se o usuário digitar algo errado, o seu tamanho vai contar o erro, mas a sua soma vai ignorar. Isso pode dar um resultado errado na média.
  2. Responsabilidade única: Uma função de "calcular média" geralmente espera receber números prontos, e não se preocupar em converter strings.

Uma sugestão de equilíbrio:

Veja como você poderia manter sua segurança, mas com uma escrita mais limpa:

def calcular_media(notas_str):
    notas_validas = []
    for nota in notas_str:
        try:
            notas_validas.append(float(nota))
        except ValueError:
            print(f"Valor ignorado: {nota}")
    
    # usamos o tamanho da lista de notas que REALMENTE foram convertidas
    if not notas_validas:
        return 0
    return sum(notas_validas) / len(notas_validas)

entrada = input('Insira as notas (separadas por espaço): ').strip().split()
resultado = calcular_media(entrada)
print(f'Média final: {resultado:.2f}')

O veredito:

Seu código não está "errado". Ele está prevenido. Com o tempo, você vai naturalmente começar a usar recursos como as compreensões de lista para reduzir linhas, mas a lógica de proteção que você aplicou é um sinal de que você está pensando como um desenvolvedor que se preocupa com o usuário.

Continue assim! O importante é o código ser legível e resolver o problema.

Conteúdos relacionados
Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!