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

Problema de execução de lógica do exemplo

Implementei ate o momento e estou tendo problemas com a lógica do projeto. Parece que os atributos da classe FilaBase estão compartilhados entre as classes FilaNormal e Fila Prioritaria.

from FilaFactory import FilaFactory
from EstatisticaFactory import EstatisticaFactory
from Constantes import *


#Gera dados para FILA 1
fila1 = FilaFactory.pega_fila(TIPO_FILA_NORMAL)
fila1.atualiza_fila()
fila1.atualiza_fila()
fila1.atualiza_fila()
print(fila1.chama_cliente(10))
print(fila1.chama_cliente(15))

estatisticaResumida = EstatisticaFactory.gera_estatitica(TIPO_ESTATISTICA_RESUMIDA, '15/01/2020', 7787)
print(fila1.estatistica(estatisticaResumida))


#Gera dados para FILA 2
fila2 = FilaFactory.pega_fila(TIPO_FILA_PRIORITARIA)
fila2.atualiza_fila()
fila2.atualiza_fila()
fila2.atualiza_fila()
fila2.atualiza_fila()
fila2.atualiza_fila()
fila2.atualiza_fila()
print(fila2.chama_cliente(6))
print(fila2.chama_cliente(2))
print(fila2.chama_cliente(1))
print(fila2.chama_cliente(3))

estatisticaDetalhada = EstatisticaFactory.gera_estatitica(TIPO_ESTATISTICA_DETALHADA, '01/01/2020', 3123)
print(fila2.estatistica(estatisticaDetalhada))

Executo o main.py conforme descrito acima e ele me retorna a saída abaixo.

Caixa 10 livre. Senha NR1 chamada.
Caixa 15 livre. Senha NR2 chamada.
{'7787 - 15/01/2020': 2}
Caixa 6 livre. Senha NR3 chamada.
Caixa 2 livre. Senha PR1 chamada.
Caixa 1 livre. Senha PR2 chamada.
Caixa 3 livre. Senha PR3 chamada.
{'dia': '01/01/2020', 'agencia': 3123, 'clientes atendidos': ['NR1', 'NR2', 'NR3', 'PR1', 'PR2', 'PR3'], 'quantidade de clientes atendidos': 6}

De acordo com o exemplo, a resposta esperada era:

  • atendimento normal - 2 usuários
  • atendimento prioritário - 4 usuários

Podem me auxiliar com essa lógica? Os fontes criados até este ponto estão em: https://github.com/lucazcabral/-bytebank-pip8/tree/erro_logica_2

2 respostas
solução!

Olá Lucas.

Inclui essa modificação, onde coloquei os atributos dentro de um __init__.

class FilaBase(metaclass=abc.ABCMeta):
    def __init__(self):
        self.__codigo: int = 0
        self.__fila: List[str] = []
        self.__clientes_atendidos: List[str] = []
        self.__senha_atual: str = ''

Da maneira que estava antes os atributos estavam sendo compartilhados entre as classes que herdaram a FilaBase.

class FilaBase(metaclass=abc.ABCMeta):
    __codigo: int = 0
    __fila: List[str] = []
    __clientes_atendidos: List[str] = []
    __senha_atual: str = ''

Então, no seu exemplo, quando você chamou 2 clientes da Fila Normal e depois 4 da Prioritária, todos estavam sendo guardados dentro da mesma lista.

Caixa 10 livre. Senha NR1 chamada.
Caixa 15 livre. Senha NR2 chamada.
{'7787 - 15/01/2020': 2}
Caixa 6 livre. Senha NR3 chamada.
Caixa 2 livre. Senha PR1 chamada.
Caixa 1 livre. Senha PR2 chamada.
Caixa 3 livre. Senha PR3 chamada.
{'dia': '01/01/2020', 'agencia': 3123, 'clientes atendidos': ['NR1', 'NR2', 'NR3', 'PR1', 'PR2', 'PR3'], 'quantidade de clientes atendidos': 6}

Isso fica claro quando vemos que quando caixa 6 chamou, ele chamou uma senha da filaNormal.

Espero ter ajudado, mas qualquer duvida não hesite em perguntar.

Bons Estudos.

Valeu Igor. Agora mais experiente, depois de fazer mais cursos, o que apontou resolveu. Obrigado pela solução e aprendizado.