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

Lista de Restaurantes ordenadas por ordem de avaliação (Maior para Menor)

Fala galera, tudo bem? Gostaria de compartilhar duas implementações que fiz no meu código, ordenando a lista de restaurantes pela avaliação, dos melhores para os piores e coloquei uma "barra de carregamento", são apenas

No arquivo "restaurante.py" adicionei o parâmetro "lista" na função "listar_restaurantes"

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, lista=None):
        if lista is None:
            lista = cls.restaurantes
        
        print('-' * 90)
        print(f'{'Nome do restaurante'.ljust(25)} | {'Categoria'.ljust(25)} | {'Avaliação'.ljust(25)} |{'Status'}')
        print('-' * 90)

        for restaurante in lista:
            print(f'{restaurante._nome.ljust(25)} | {restaurante._categoria.ljust(25)} | {str(restaurante.media_avaliacoes).ljust(25)} | {restaurante.ativo}')
            
        print('-' * 90)

    @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

No arquivo "app.py" importei a bibliteca "tqdm" e a biblioteca "time". Na função "main" implementei um for com o "tqdm" para mostrar a barra de progresso usando o time.sleep de 0.01 s só para ver a "mágica" do "tqdm", implementei também o "sorted" com "reverse = True" para organizar a lista de restaurantes em ordem decrescente de acordo com a média de avaliação.

from modelos.restaurante import Restaurante
from tqdm import tqdm
import time

restaurante_praca = Restaurante('praça', 'Gourmet')
restaurante_praca.receber_avaliacao('Gui', 7)
restaurante_praca.receber_avaliacao('Lais', 8)
restaurante_praca.receber_avaliacao('Emy', 2)

restaurante_mexicano = Restaurante('arriba', 'mexicano')
restaurante_mexicano.receber_avaliacao('Gui', 10)
restaurante_mexicano.receber_avaliacao('Lais', 9)
restaurante_mexicano.receber_avaliacao('Emy', 9.5)

restaurante_japones = Restaurante('OY Sushi', 'Japonês')
restaurante_japones.receber_avaliacao('Gui', 7)
restaurante_japones.receber_avaliacao('Lais', 8)
restaurante_japones.receber_avaliacao('Emy', 6)

def main():
    for i in tqdm(range(0,100)):
        time.sleep(0.01)

    restaurantes_ordenados = sorted(Restaurante.restaurantes, key=lambda restaurante: restaurante.media_avaliacoes, reverse=True)
    
    Restaurante.listar_restaurantes(restaurantes_ordenados)

if __name__ == '__main__':
    main()

Espero ter contribuído de alguma forma com essas implementações "inúteis", rsrs

2 respostas
solução!

Oii, tudo bem?

Wollacy, suas implementações são muito interessantes! Adicionar a funcionalidade de ordenar a lista de restaurantes por avaliação e incluir uma barra de progresso mostram não apenas suas habilidades técnicas, mas também sua criatividade e atenção aos detalhes.

A utilização da biblioteca tqdm para a barra de progresso e o sorted com a chave de ordenação personalizada demonstram um conhecimento sólido da linguagem Python e suas bibliotecas.

E, suas contribuições não são "inúteis" de forma alguma! Elas adicionam valor ao seu código, tornando-o mais dinâmico e útil.

Continue explorando e experimentando novas técnicas e funcionalidades, pois é assim que se cresce como pessoa programadora.

Um abraço e bons estudos.

Obrigado, espero poder contribuir sempre.