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