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

[Projeto] Implementação de uma def BuscarNovamente

Ola, tudo bem ??

Estava praticando e criei um outro programa similar ao do curso. O problema está na função def alternar_estado(). Quando eu chamo buscar_novamente() e a opção é "sim", ele pergunta "Deseja tentar realizar uma nova busca (Sim ou Não)?". Mas se a resposta for "não", ele não retorna ao menu principal e volta na opção "Deseja tentar realizar uma nova busca (Sim ou Não)?" . Consegue me ajudar?

def alternar_estado():
    exibir_subtitulo("Alterando o Estado do Material")
    nome_material = input(
        "Digite o nome do material que você deseja alterar o estado:")

    # ainda não encontrou o material desejado
    material_encontrado = False

    for material in materiais:
        if nome_material == material["Nome"]:
            # se estava ativado fica desativado , se estava desativado fica ativado
            material["Ativo"] = not material["Ativo"]
            if material["Ativo"]:
                print(f"O Material {nome_material} foi ativado com sucesso!")

            else:
                print(f"O Material{nome_material} foi desativado com sucesso!")

            material_encontrado = True
            break
    if not material_encontrado:
        print(f"O Material {nome_material} não foi encontrado")

    buscar_novamente()



def buscar_novamente():

    buscar_novamente = input(
        "Deseja tentar realizar uma nova busca (Sim ou Não)?")

    if buscar_novamente == "Sim" or buscar_novamente == "sim":
        alternar_estado()
    else:
        voltar_menu()
    
    def voltar_menu():
    input("Digite uma tecla para voltar ao menu principal: \n")
    os.system("cls")
    print("Reiniciando a Escolha do Menu de Opção")
    exibir_opções()
    escolher_opcao()
3 respostas
solução!

Julia, boa tarde! Eu entendi o seu problema. O erro ocorre porque a função buscar_novamente() está chamando a função alternar_estado() novamente, mesmo quando a opção escolhida é "Não". Como a lógica de controle de fluxo não está corretamente definida para o caso de "Não", o programa fica em um loop.

def buscar_novamente():
    while True:
        buscar_novamente = input("Deseja tentar realizar uma nova busca (Sim ou Não)? ").lower()

        if buscar_novamente == "sim":
            alternar_estado()  # Chama novamente a função 
            break  # Sai do loop
        elif buscar_novamente == "não":
            voltar_menu()  # Chama a função voltar_menu
            break  # Sai do loop
        else:
            print("Resposta inválida! Por favor, digite 'Sim' ou 'Não'.")

Bom dia Andrey!

Deu certo e entendi o motivo de antes não estar funcionado.

Muito obrigada :)

De neiida : )