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

[Dúvida] soma_das_notas = sum(avaliacao._nota for avaliacao in self._avaliacao)

poderiam me explicar para que serve o (está em destaque entre **)

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

ok, entendi que está fazendo um loop, mas poderiam me explicar o que está fazendo e de que parte do codigo eles são?

1 resposta
solução!

Olá, Eduardo! Tudo joia?

Vamos lá, vou te explicar o que está acontecendo no trecho de código que você mencionou.

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

Esse código está utilizando uma compreensão de lista dentro da função sum(). Vamos dividir em partes para entender melhor:

  1. self._avaliacao: Aqui, self._avaliacao é uma lista que contém objetos da classe Avaliacao. Esses objetos possuem um atributo chamado _nota.

  2. avaliacao._nota for avaliacao in self._avaliacao: Esta parte é uma compreensão de lista que itera sobre cada objeto avaliacao dentro da lista self._avaliacao e extrai o valor do atributo _nota de cada um desses objetos.

  3. sum(): A função sum() recebe uma sequência de números e retorna a soma desses números.

Então, o que está acontecendo é o seguinte: para cada objeto avaliacao na lista self._avaliacao, o código extrai o valor de avaliacao._nota e soma todos esses valores. O resultado dessa soma é armazenado na variável soma_das_notas.

Vamos ver um exemplo prático para ilustrar:

class Avaliacao:
    def __init__(self, cliente, nota):
        self._cliente = cliente
        self._nota = nota

class Restaurante:
    def __init__(self):
        self._avaliacao = []

    def receber_avaliacao(self, cliente, nota):
        avaliacao = Avaliacao(cliente, nota)
        self._avaliacao.append(avaliacao)

    def media_avaliacoes(self):
        if not self._avaliacao:
            return 0
        soma_das_notas = sum(avaliacao._nota for avaliacao in self._avaliacao)
        quantidade_de_notas = len(self._avaliacao)
        media = round(soma_das_notas / quantidade_de_notas, 1)
        return media

# Exemplo de uso
restaurante = Restaurante()
restaurante.receber_avaliacao('Cliente1', 7.7)
restaurante.receber_avaliacao('Cliente2', 8.3)
restaurante.receber_avaliacao('Cliente3', 9.0)

print(restaurante.media_avaliacoes())  # Saída: 8.3

Neste exemplo, temos três avaliações com notas 7.7, 8.3 e 9.0. O código sum(avaliacao._nota for avaliacao in self._avaliacao) soma essas notas, resultando em 25.0. Depois, essa soma é dividida pelo número de avaliações (3), resultando em uma média de 8.3.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.