Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Bug] A avaliação não aparece em números

Olá! Eu tenho uma dúvida em relação a avalição.

Este é o meu código:

Quando aparece no terminal, mostra a seguinte mensagem:

Meu terminal:

Eu não consigo achar o motivo pelo qual a avaliação não aparece em números. Vocês poderiam me ajudar? Obrigado!

2 respostas
solução!

Pedro, nesse caso, voce pode usar o def __str__(self): para imprimir a classe, e adicionar todos os itens dessa classe a uma lista dessa forma:

class Comidas:
    lista = []

    def __init__(self, nome, tipo):
        self._nome = nome
        self._tipo = tipo
        self._ava = []  # Lista para armazenar avaliações
        Comidas.lista.append(self)  # Adiciona a comida à lista global

    def __str__(self):
        return f'{self._nome} | {self._tipo} | Média: {self.media()}'

    def receber(self, cliente, nota):
        avaliacao = Avaliacao(cliente, nota)
        self._ava.append(avaliacao)

    def media(self):
        if not self._ava:
            return 0
        soma = sum(avaliacao.nota for avaliacao in self._ava)
        quantidade = len(self._ava)
        total = round(soma / quantidade, 1)
        return total

Esse metodo permite com que você imprima uma classe sempre que der um print() nela, e depois você pode fazer uma função para imprimir todos os itens dessa lista de classe, assim:

# Chamando a função retornar para imprimir as comidas
def retornar():
    for comida in Comidas.lista:
        print(comida)

E assim ficaria o codigo completo:

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

class Comidas:
    lista = []

    def __init__(self, nome, tipo):
        self._nome = nome
        self._tipo = tipo
        self._ava = []  # Lista para armazenar avaliações
        Comidas.lista.append(self)  # Adiciona a comida à lista global

    def __str__(self):
        return f'{self._nome} | {self._tipo} | Média: {self.media()}'

    def receber(self, cliente, nota):
        avaliacao = Avaliacao(cliente, nota)
        self._ava.append(avaliacao)

    def media(self):
        if not self._ava:
            return 0
        soma = sum(avaliacao.nota for avaliacao in self._ava)
        quantidade = len(self._ava)
        total = round(soma / quantidade, 1)
        return total

# Exemplo de uso
Pizza = Comidas('Pizza', 'Italiana')
Pizza.receber('Pedro', 10)
Pizza.receber('Marilia', 7)
Pizza.receber('Felipe', 5)

# Chamando a função retornar para imprimir as comidas
def retornar():
    for comida in Comidas.lista:
        print(comida)

# Executa a função
retornar()

Muito obrigado, Gabriel, funcionou!