2
respostas

Poderia me explicar melhor a logica de soma_das_notas = sum(avaliacao._nota for avaliacao in self._avaliacao)

No código, na função media de avaliações, o professor digitou essa linha de código: soma_das_notas = sum(avaliacao._nota for avaliacao in self._avaliacao)

poderia fazer uma explicação mais detalhada sobre essa especifica linha?

Agradeço!

2 respostas

Oi Caroline, eu não fiz essa aula, mas vou assumir algumas coisas pela sintaxe do que vc postou. Vc tem um objeto que contem uma lista de avaliações e cada uma dessas avaliações é um objeto que tem uma nota numérica.

Então vamos em partes: sum(valores): a função sum simplesmente soma todos os valores numericos existentes na sequência passada.

# Entao se vc passar uma sequencia de 1 a 5, vc tera resultado 15
print(sum([1,2,3,4,5])) # 15
print(sum(range(1, 6))) # 15

avaliacao._nota for avaliacao in self._avaliacao: aqui vc está fazendo um loop na lista self._avaliacao, olhando para cada um dos itens contidos na lista e usando a variável avaliacao para representar o item observado, e para cada avaliacao vc pega o valor do atributo nota. Então nessa parte do código vc está gerando uma sequência de notas.

print([i for i in range(1, 6)]) # [1, 2, 3, 4, 5]
# teste com seu objeto tambem
print([avaliacao._nota for avaliacao in self._avaliacao])

Então como vc gerou uma sequência de valores na parte interna do código e o método sum está esperando exatamente isso, vc tem como resultado a somatória das notas de todas as avaliações.

Olha, eu nao sou professor, mas vou falar uma duvida que buguei por 5 minutos e depois entendi(eu acho)

soma_das_notas = sum(avaliacao._nota for avaliacao in self._avaliacao)

A soma funciona do seguinte, o avaliacao._nota veio do receber_avaliacao(). Lembra que estava adicionando ao class Avaliacao? Entao pra cada vez que existir a 'avaliacao(novamente, aquele mesmo do recever_avaliacao()), dentro do for, ele vai somar o valor um por um.

Certo?