1
resposta

Erro

PS C:\Alura\PYTHON - ORIENTADO A OBJETOS - OO\OO-Sabor-Express> python app.py Nome do Restaurante | Categoria | Avaliação | Status Traceback (most recent call last): File "C:\Alura\PYTHON - ORIENTADO A OBJETOS - OO\OO-Sabor-Express\app.py", line 11, in main() File "C:\Alura\PYTHON - ORIENTADO A OBJETOS - OO\OO-Sabor-Express\app.py", line 8, in main Restaurante.lista_restaurantes() File "C:\Alura\PYTHON - ORIENTADO A OBJETOS - OO\OO-Sabor-Express\modelos\restaurante.py", line 19, in lista_restaurantes print(f'{restaurante._nome.ljust(25)} | {str(restaurante._categoria.ljust(25))} | {restaurante.media_avaliacoes.ljust(25)} | {restaurante.ativo}') ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AttributeError: 'float' object has no attribute 'ljust' PS C:\Alura\PYTHON - ORIENTADO A OBJETOS - OO\OO-Sabor-Express>

restaurante.py

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 lista_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)} | {str(restaurante._categoria.ljust(25))} | {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

avaliacao.py

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

app.py

from modelos.restaurante import Restaurante

restaurante_pizzaria = Restaurante ('Pizzaria de Bibi', 'Pizzaria')
restaurante_pizzaria.receber_avaliacao ('Bibi', 10)
restaurante_pizzaria.receber_avaliacao ('Alvaro', 10)

def main():
   Restaurante.lista_restaurantes()

if __name__ == '__main__':
    main()
1 resposta

Oii Alvaro, como vai você? Espero que esteja bem!

Pelo erro que você está enfrentando, parece que o problema está na tentativa de usar o método ljust() diretamente em um objeto do tipo float, que é o tipo de dado retornado pelo método media_avaliacoes. O método ljust() é usado para alinhar strings, então precisamos primeiro converter o valor float para string antes de aplicar ljust().

No seu código, na classe Restaurante, você pode corrigir isso modificando a linha que imprime os detalhes dos restaurantes no método lista_restaurantes(). Aqui está como você pode ajustar essa linha:

print(f'{restaurante._nome.ljust(25)} | {str(restaurante._categoria.ljust(25))} | {str(restaurante.media_avaliacoes).ljust(25)} | {restaurante.ativo}')

Note que adicionei str() ao redor de restaurante.media_avaliacoes antes de aplicar .ljust(25). Isso converte o valor float para string, permitindo que o método ljust() funcione corretamente.

Aqui está um exemplo prático de como seu código ajustado ficaria:

@classmethod
def lista_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)} | {str(restaurante._categoria.ljust(25))} | {str(restaurante.media_avaliacoes).ljust(25)} | {restaurante.ativo}')

Tente fazer essa alteração e execute o código novamente para ver se o erro foi resolvido.

Espero ter ajudado e bons estudos!