1
resposta

[Dúvida] Status não reconhece o symbol

Assim que tento incluir algum symbol ou a informação de Ativo e Desativado no status do programa, o programa não reconhece e sempre apresenta a mensagem no status de True e False. Gostaria de ajuda para saber em que estou errando ou se devo colocar algum outro código que ajude a corrigir isto.

Segue abaixo a parte do código que inclui:

 @property
    def ativo(self):
        return '✔️' if self._ativo else '❌'
    
    def alternar_estado(self):
        self._ativo = not self._ativo
        
Segue código completo;

from Modelos.avaliacao import Avaliacao

class Restaurante:
    restaurantes = []

    def __init__(self, Nome, Categoria):
        self._nome = Nome.title()
        self._categoria = Categoria.upper() 
        self._ativo = False
        self._avaliacao = []
        Restaurante.restaurantes.append(self)
   
    def __str__(self):
        return f'{self._nome} | {self._categoria}'
    
    @classmethod
    def listar_restaurantes(cls):
        print(f'{'Nome do Restaurante'.ljust(25)} | {'Categoria'.ljust(25)} | {'Avaliação'.ljust(25)} | {'Status'}')
        for restaurante in cls.restaurantes:
            print(f'{restaurante._nome.ljust(25)} | {restaurante._categoria.ljust(25)} | {str(restaurante.media_avaliacoes).ljust(25)} | {restaurante._ativo}')

    @property
    def ativo(self):
        return '✔️' if self._ativo else '❌'
    
    def alternar_estado(self):
        self._ativo = not self._ativo

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

    @property
    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
1 resposta

Olá, Caio! Tudo bem?

No momento, você está imprimindo o valor de _ativo diretamente, que é um valor booleano (True ou False), ao invés de utilizar a propriedade ativo que retorna os símbolos '✔️' ou '❌'.

Para corrigir isso, você deve modificar a linha dentro do método listar_restaurantes que imprime os detalhes do restaurante. Em vez de usar restaurante._ativo, use restaurante.ativo. Isso fará com que seja utilizado o valor retornado pela propriedade ativo, que contém os símbolos.

Aqui está como você pode ajustar o método listar_restaurantes:

@classmethod
def listar_restaurantes(cls):
    print(f'{'Nome do Restaurante'.ljust(25)} | {'Categoria'.ljust(25)} | {'Avaliação'.ljust(25)} | {'Status'}')
    for restaurante in cls.restaurantes:
        print(f'{restaurante._nome.ljust(25)} | {restaurante._categoria.ljust(25)} | {str(restaurante.media_avaliacoes).ljust(25)} | {restaurante.ativo}')

Isso deve resolver o problema de exibição dos símbolos no status dos restaurantes. Teste essa alteração e veja se agora os símbolos '✔️' e '❌' são exibidos corretamente conforme você esperava.

Caso não resolva, peço que compartilhe todo o seu projeto para que eu realize testes para identificar a causa dessa situação. Você pode fazer isso usando o GitHub ou Drive do Google.

Espero ter ajudado e bons estudos!

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