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 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)} | '
f'{restaurante._categoria.ljust(25)} | '
f'{str(restaurante.media_avaliacoes).ljust(25)} | '
f'{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):
# Aceita apenas notas entre 0 e 5
if 0 <= nota <= 5:
avaliacao = Avaliacao(cliente, nota)
self._avaliacao.append(avaliacao)
else:
print("Erro: a nota deve estar entre 0 e 5.")
@property
def media_avaliacoes(self):
if not self._avaliacao:
return "Sem avaliações"
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
exemplo de uso //////////////////////////////
restaurante = Restaurante("Pizza Boa", "Italiana")
restaurante.receber_avaliacao("João", 4.7)
restaurante.receber_avaliacao("Maria", 5)
restaurante.receber_avaliacao("Pedro", 8) # vai dar erro
Restaurante.listar_restaurantes()