Program that shows the location in a queue

Asked

Viewed 90 times

-3

This program will show the location of a person in the queue when typed the name, however, I’m not getting.

Error: File "C:/Users/Cleit/Pycharmprojects/xxx/xxx.py", line 79, in import Queue Modulenotfounderror: No module named 'Queue'

The program is in Python 3. I tried regardless of the classes but error appeared saying 'queue' had not been defined. The 'seek' method is apparently not receiving the data of 'sought after'. I started learning queue this week in college I don’t know much about.

class Pessoa:
    nome = ""
    idade = 0
    sexo = ""
    peso = 0
    proxima = None


class Fila:
    inicio = None
    final = None


def inserir(fila, pessoa):
    if filaVazia(fila):
        fila.inicio = pessoa
        fila.final = pessoa
    else:
        fila.final.proxima = pessoa
        fila.final = pessoa


def tamanho(fila):
    if (filaVazia(fila) == True):
        return 0
    else:
        contadorFila = 0
        pessoaTmp = fila.inicio
        while pessoaTmp != None:
            contadorFila += 1
            pessoaTmp = pessoaTmp.proxima
        return contadorFila


def filaVazia(fila):
    statusFila = (fila.inicio == None and fila.final == None)
    return statusFila


def imprimir(fila):
    pessoaTmp = fila.inicio
    while pessoaTmp != None:
        print("Nome:", pessoaTmp.nome, ",", "Idade:", pessoaTmp.idade, end="-->" if pessoaTmp.proxima != None else "\n")
        pessoaTmp = pessoaTmp.proxima


def procurar_por_nome(Fila, pessoaprocurada):
    for pessoaprocurada in Fila:
        if Pessoa.nome == pessoaprocurada:
            return Pessoa

    return None


filaEncadeada = Fila()
opcao = 1

while opcao != 0:
    print("1 - Inserir")
    print("2 - Pesquisar elemento")
    print("3 - Verificar se a fila esta vazia")
    print("4 - Tamanho da fila")
    print("5 - Ver fila")
    print("0 - Sair")
    opcao = int(input("Opção: "))

    if opcao == 1:
        nome = (input("Nome: "))
        idade = int(input("Idade: "))
        sexo = input("Sexo: ")
        peso = float(input("Peso: "))
        novaPessoa = Pessoa()
        novaPessoa.nome = nome
        novaPessoa.idade = idade
        novaPessoa.sexo = sexo
        novaPessoa.peso = peso
        inserir(filaEncadeada, novaPessoa)

    if opcao == 2:
        import Fila
        import Pessoa

        pessoaprocurada = input("Pessoa a procurar: ")
        procurar_por_nome(Fila, pessoaprocurada)

    if opcao == 3:
        if (filaVazia(filaEncadeada) == True):
            print(f"Esta fila está vazia")
        else:
            print(f"Esta fila não esta vazia, possui: {tamanho(filaEncadeada)} elemento(s)")

    if opcao == 4:
        print(f"Tamanho Fila: {tamanho(filaEncadeada)}")

    elif opcao == 5:
        imprimir(filaEncadeada)

1 answer

0

Regarding your problem, this error is being generated because you are trying to import a module called Fila, module that does not exist in your current directory.

I also found other errors in your code as for example in the block if opcao == 2. You are passing as function parameter procurar_por_nome a class and not an object. Also, within its function procurar_por_nome you set the instruction for pessoa_procurada in Fila being that his class Fila has not the method __iter__ to be an iterator.

Anyway, there are several problems in your code that should be solved, but if you want to work with queues, I recommend the module queue or else, I recommend creating an object list to save all people. See this example below that I made:

class Pessoa(object):
    def __init__(self,nome,sexo,idade,peso):
        self.nome = nome
        self.idade = idade
        self.sexo = sexo
        self.peso = peso

    def __repr__(self):
        # Mostra o nome da pessoa ao invés do endereço de memória
        return self.nome


class Fila(object):
    __pessoas = [] # Lista que irá conter todas as pessoas registradas.

    def __iter__(self):
        self.__index = -1
        return self

    def __next__(self):
        self.__index += 1

        if self.__index >= len(self.__pessoas):
            raise StopIteration
        return self.__pessoas[self.__index]

    def __len__(self):
        # Retorna o tamanho da fila.
        return len(self.__pessoas)

    def vazio(self):
        if self.__pessoas:
            return False
        else:
            return True

    def inserir(self,pessoa):
        self.__pessoas.append(pessoa)

    def obterPosicao(self,nome):
        i = 0
        for pessoa in self.__pessoas:
            if pessoa.nome == nome:
                return i+1
            i += 1

    def obterPessoa(self,posicao):
        if posicao <= len(self.__pessoa):
            return self.__pessoas[posicao]

    def obterPessoas(self):
        return self.__pessoas

    def deletar(self,posicao):
        if posicao <= len(self.__pessoa):
            self.__pessoas.pop(posicao-1)



opcao = -1
fila = Fila()

while opcao != 0:
    print("\n"*40)
    print("1 - Inserir")
    print("2 - Obter posição de um elemento")
    print("3 - Verificar se a fila está vazia")
    print("4 - Tamanho da fila")
    print("5 - Ver fila")
    print("0 - Sair")

    opcao = input("Opção: ")
    if not opcao.isnumeric(): continue
    opcao = int(opcao)
    print("")

    if opcao == 1:

        nome = input("Nome: ")
        idade = int(input("Idade: "))
        sexo = input("Sexo: ")
        peso = float(input("Peso: "))
        nova_pessoa = Pessoa(nome,sexo,idade,peso)
        fila.inserir(nova_pessoa)
        print("Pessoa inserida com sucesso.")

    if opcao == 2:
        nome = input("Digite o nome: ")
        posicao = fila.obterPosicao(nome)
        if not posicao:
            print("Essa pessoa não existe.")
        else:
            print("Posição:",posicao)

    if opcao == 3:
        if fila.vazio():
            print("Está vazio.")
        else:
            print("Existem elementos na fila.")
    if opcao == 4:
        print("Existem",len(fila),"elementos na fila.")

    if opcao == 5:
        print("Fila:",fila.obterPessoas())
    input("\nAperte ENTER para continuar.")

Test this code to see if it’s what you want, study and see what you can improve in your own code. I recommend you study more about POO (Object-Oriented Programming).

I hope I helped you =D

  • Our you are very good want to get to that level one day. I will analyze line by line and see where I failed. Thank you very much!!!

Browser other questions tagged

You are not signed in. Login or sign up in order to post.