Problem with checking existing person in Python chained queue

Asked

Viewed 75 times

0

My code is in trouble verify the existence of the name of a person already on the list, when I enter the person on the list works perfectly, when I search by name when the list is empty works perfectly, but when I check to see if the name is there gives the following error:

ERROR:

elif pesquisar_pessoa.nome == "":

AttributeError: 'Pessoa' object has no attribute 'nome'

My code is here (I marked the specific lines of the code)

# Código de fila
class Fila:
    inicio = None
    fim = None

class Pessoa:
    nome: str
    idade: int
    peso: float
    genero: str
    proximo = None

def inserir_elemento(fila, pessoa):
    if fila_vazia(fila) == True:
        fila.inicio = pessoa
        fila.fim = pessoa
    else:
        fila.fim.proximo = pessoa
        fila.fim = pessoa
    print(f"Elemento {pessoa.nome} foi inserido\n")

def excluir_elemento(fila):
    if fila_vazia(fila) == True:
        print("A fila está vazia")
    else:
        elemento_excluido = fila.inicio
        proximo_fila = fila.inicio.proximo
        del fila.inicio
        fila.inicio = proximo_fila
        if fila.inicio == None:
            fila.fim = None
        print(f"O elemento {elemento_excluido.nome} foi excluído\n")

def fila_vazia(fila):
    verificar_fila = (fila.inicio == None and fila.fim == None)
    return verificar_fila

def tamanho_fila(fila):
    if fila_vazia(fila) == True:
        return 0
    else:
        contador_fila = 0
        ver_pessoa = fila.inicio
        while ver_pessoa != None:
            contador_fila += 1
            ver_pessoa = ver_pessoa.proximo
        return contador_fila

def imprimir_elemento(fila):
    if fila_vazia(fila) == True:
        print("A fila está vazia\n")
    else:
        ver_pessoa = fila.inicio
        while ver_pessoa != None:
            print(ver_pessoa.nome, ver_pessoa.idade, ver_pessoa.peso, 
            ver_pessoa.genero, end=" " if ver_pessoa.proximo != None else print())                                                          
            ver_pessoa = ver_pessoa.proximo                       
___________________________________________________________________
| def procurar_pessoa(fila, pesquisar_pessoa):                    |
|    if fila_vazia(fila) == True:                                         |
|        print("A fila está vazia para procurar alguém\n")        |
|    elif pesquisar_pessoa.nome == "":                            |
|        print ("Digite o nome da pessoa que deseja encontrar: ") |
|    else:                                                        |
|        ver_pessoa = fila.inicio                                 |
|        busca = ""                                               |
|       pessoa_encontrada = False                                 |
|        while ver_pessoa != None:                                |
|            if ver_pessoa.nome == pesquisar_pessoa.nome:         |
|                busca += ver_pessoa.nome + "Pessoa encontrada\n" |
|                pessoa_encontrada = True                         |
|            else:                                                |
|                busca += pesquisar_pessoa.nome + "\n"            |
|            if ver_pessoa.proximo != None:                       |
|                busca += ("\n")                                  |
|            ver_pessoa = ver_pessoa.proximo                      |
|                                                                 |
|        if pessoa_encontrada:                                    | 
|            print(busca)                                         | 
|        else:                                                    | 
|            print("Pessoa não encontrada")                       |
___________________________________________________________________

fila_encadeada = Fila()
opcao = 1
while opcao != 7:
    print ("1 - Inserir")
    print ("2 - Excluir")
    print ("3 - Imprimir")
    print ("4 - Informar tamanho da fila")
    print ("5 - Informar se a fila está vazia")
    print ("6 - Procurar nome da pessoa")
    print ("7 - Sair")
    opcao = int(input("Informe a opção: "))
    if opcao == 1:
        nome_informado = str(input("Informe o nome da pessoa: "))
        idade_informada = int(input("Informe a idade de {}: ".format(nome_informado)))
        peso_informado = float(input("Informe o peso de {}: ".format(nome_informado)))
        genero_informado = str(input("Informe o gênero de {}: ".format(nome_informado)))
        novo_elemento = Pessoa()
        novo_elemento.nome = nome_informado
        novo_elemento.idade = idade_informada
        novo_elemento.peso = peso_informado
        novo_elemento.genero = genero_informado
        inserir_elemento(fila_encadeada, novo_elemento)
    elif opcao == 2:
        excluir_elemento(fila_encadeada)
    elif opcao == 3:
        imprimir_elemento(fila_encadeada)
    elif opcao == 4:
        print(f"Tamanho da Fila: {tamanho_fila(fila_encadeada)}\n")
    elif opcao == 5:
        if(fila_vazia(fila_encadeada) == True):
            print(f"A fila está vazia\n")
        else:
            print(f"A fila não está vazia e possui {tamanho_fila(fila_encadeada)} elemento(s)\n")
_________________________________________________________________________
|    elif opcao == 6:                                                    |
|        pesquisar_pessoa = Pessoa()                                     |
|        pesquisar_pessoa.proximo = input("Digite o nome da pessoa: ")   |
|        procurar_pessoa(fila_encadeada, pesquisar_pessoa)               |
__________________________________________________________________________
    elif opcao == 7:
        print("Saindo...\n")
    else:
        print("Opção inválida, digite uma opção válida no menu\n")

1 answer

1


Alex by the way you seem to be passing an object with the attribute nome empty so it does not exist and you are making a comparison elif pesquisar_pessoa.nome == "".

Just fix the third line of the code and change the attribute próximo by attribute nome, as shown below:

elif opcao == 6:                                                    
    pesquisar_pessoa = Pessoa()                                     
    ->pesquisar_pessoa.nome = input("Digite o nome da pessoa: ")  
    print(type(pesquisar_pessoa))
    procurar_pessoa(fila_encadeada, pesquisar_pessoa)               
  • In case you had to withdraw elif pesquisar_pessoa.nome == "": 
 print ("Digite o nome da pessoa que deseja encontrar: ") to put this piece of code?

  • you pose to put it chained before the elif pesquisar_pessoa.nome == "": print ("Digite o nome da pessoa que deseja encontrar: ") I edited the answer to show how you can enter your code

  • Invalid Syntax : elif pesquisar_pessoa not is Pessoa:

  • @Alexf. I analyzed your code further, the property nome is not completed in pesquisar_pessoa so it does not yet exist in the object, your program will work when you change pesquisar_pessoa.proximo for pesquisar_pessoa.nome = input('.... You can remove the If I proposed earlier

  • gave a Crtl+F and ver_pessoa.proximo there are 5 of them in the code, specify better where I should change.

  • @Alexf. check the answer above, I marked which line you should change

  • The mistake is still in the elif pesquisar_pessoa not is Pessoa:
 
SyntaxError: invalid syntax

  • @Alexf. can remove that if I have indicated, and your code should work now

  • It worked, thanks @Killdaryaguiardesantana.

  • @Alexf. We’re here to help, mark the answer as right

Show 5 more comments

Browser other questions tagged

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