1
resposta

Problemas com o Python

Escrevo o codigo como o professor, mas o meu python diz que o "self" não existe e alem de outros problemas no codigo que não aparecem no do professor.

class FilaPrioritaria:
        codigo: int = 0
        fila = []
        clientes_atendidos = []
        senha_atual: str = ''

    def gera_senha_atual(self)-> None:
        self.senha_atual = f'NM{self.codigo}'

    def reseta_fila(self)-> None:
        if self.codigo >= 100:
            self.codigo = 0

    else:
        self.codigo += 1

    def atualiza_fila(self) -> None:
        self.reseta_fila()
        self.gera_senha_atual()
        self.fila.append(self.gera_senha_atual)


    def chama_cliente(self, caixa: int) -> str:
        cliente_atual = self.fila.pop(0)
        self.clientes_atendidos.append(cliente_atual)
        return (f'Cliente atual: {cliente_atual}, dirija-se ao caixa: {caixa}')


    def estatistica(self, dia: str, agencia: int, flag: str):
        if flag != 'detail':
            estatistica = {f'{agencia}-{dia}': len(self.clientes_atendidos)}
        else:
            estatistica = {'dia': dia, 'agencia': agencia, 'clientes atendidos': self.clientes_atendidos,
                           'quantidade clientes atendidos': len(self.clientes_atendidos)}

        return estatistica

No arquivo "main" diz que não reconhece o meu arquivo python criado que seria o "fila_prioritaria"

from fila_normal import filanormal
from fila_prioritaria import FilaPrioritaria

#fila_teste = filanormal()
#fila_teste.atualizafila()
#fila_teste.atualizafila()
#fila_teste.atualizafila()
#print(fila_teste.chamacliente(7))

fila_teste_2 = FilaPrioritaria()
fila_teste_2.atualiza_fila()
fila_teste_2.atualiza_fila()
fila_teste_2.atualiza_fila()
print(fila_teste_2.chama_cliente(10))
1 resposta

Olá Lucca, tudo bem com você?

Peço desculpas pela demora em lhe responder.

Analisando e testando o código apresentado, os métodos que deveriam estar dentro da classe FilaPrioritaria não estão dentro desta classe devido à indentação (espaços) utilizada no código. O que pode estar levando a apresentação de erros no momento da execução do arquivo main.py. Peço que realize a correção da indentação e verifique se será apresentado erros no momento da execução do código.

Para corrigir esse erro, peço que siga os passos apresentados abaixo.

  • Abra o arquivo fila_prioritaria.py

  • Selecione do método gera_senha_atual até a última linha do arquivo (return estatistica).

  • Pressione uma vez o botão

  • Localize o método reseta_fila. Clique à esquerda da estrutura condicional else presente nesse método e pressione uma vez o botão

  • Clique à esquerda da linha self.codigo += 1 presente na estrutura condicional else e pressione duas vezes o botão

  • O método reseta_fila deverá ficar com a seguinte estrutura

          def reseta_fila(self) -> None:
              if self.codigo >= 100:
                  self.codigo = 0
              else:
                  self.codigo += 1

    Após realizar a correção da indentação, será necessário corrigir a adição do número da senha a lista fila, no código atual está ocorrendo a adição do método gera_senha_atual o correto será o atributo senha_atual.

  • Localize o método atualiza_fila

  • Troque a seguinte linha self.fila.append(self.gera_senha_atual) por self.fila.append(self.senha_atual)

  • O método atualiza_fila deve ficar como apresentado abaixo

          def atualiza_fila(self) -> None:
              self.reseta_fila()
              self.gera_senha_atual()
              self.fila.append(self.senha_atual)
  • Após realizadas as alterações mencionadas, salve o arquivo fila_prioritaria.py e execute o arquivo main.py.

  • Você poderá dar continuidade na aula o poder do PEP 8

Código completo com as mudanças aplicadas

class FilaPrioritaria:
    codigo: int = 0
    fila = []
    clientes_atendidos = []
    senha_atual: str = ''

    def gera_senha_atual(self) -> None:
        self.senha_atual = f'NM{self.codigo}'

    def reseta_fila(self) -> None:
        if self.codigo >= 100:
            self.codigo = 0
        else:
            self.codigo += 1

    def atualiza_fila(self) -> None:
        self.reseta_fila()
        self.gera_senha_atual()
        self.fila.append(self.senha_atual)

    def chama_cliente(self, caixa: int) -> str:
        cliente_atual = self.fila.pop(0)
        self.clientes_atendidos.append(cliente_atual)
        return (f'Cliente atual: {cliente_atual}, dirija-se ao caixa: {caixa}')

    def estatistica(self, dia: str, agencia: int, flag: str):
        if flag != 'detail':
            estatistica = {f'{agencia}-{dia}': len(self.clientes_atendidos)}
        else:
            estatistica = {'dia': dia, 'agencia': agencia,
                           'clientes atendidos': self.clientes_atendidos,
                           'quantidade clientes atendidos': len(
                               self.clientes_atendidos)}

        return estatistica

Espero ter lhe ajudado. Em caso de dúvidas estou à disposição.

Não hesite em voltar ao fórum para continuar aprendendo e interagindo com a comunidade.

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!