1
resposta

[Dúvida] Duvida com um exercicio.

Olá,

Estou praticando o que aprendi até agora e, conforme meu código evoluiu, comecei a me incomodar com o fato de ter que executar o programa várias vezes para testar funções diferentes.

Após pesquisar um pouco, encontrei o comando while True:, que me ajudou a manter o programa rodando. No entanto, surgiu um problema: o programa não fecha mesmo quando eu escolho a opção de sair. Tentei utilizar o sys.exit() (que também encontrei em pesquisas), mas não está funcionando como esperado.

Como posso corrigir isso para que o programa encerre corretamente?

import os
import sys

def Cadastrar():
    print("Cadastrar pessoa. ")
        
def Listar():
    print("Listar pessoas")
    
def sair():
    os.system("cls")
    print("Encerrar Programa\n")
    sys.exit
    
#-------Programa Principal-------
def exibir_nome():
    print("""terminal de cadastro de aldeões!

""")

def exibir_opções():
    print("1. Cadastrar pessoa. ")
    print("2. Listar pessoas ")
    print("3 Sair")

def escolher_opções():
    opcao_escolhida = int(input('Escolha uma opção: '))

    if opcao_escolhida == 1:
        Cadastrar()

    elif opcao_escolhida == 2:
        Listar()
    
    elif opcao_escolhida == 3:
        sair()
   
    
    else:
        print("Opção inválida")
    
def main():
    exibir_nome()
    while True:
        exibir_opções()
        escolher_opções()
    
if __name__ == "__main__":
    main()
1 resposta

Olá, Vinicius, como vai?

O uso do laço de repetição foi uma ótima solução para manter o programa ativo e permitir múltiplos testes em uma única execução. No seu código, a função de encerramento não completa a ação porque o comando sys.exit foi referenciado, mas não invocado como uma função. Em Python, para que uma função ou método execute sua tarefa, é necessário utilizar os parênteses após o nome.

Outra alternativa, caso queira evitar o uso de sys, é controlar o laço diretamente. Por exemplo, você pode usar break dentro da estrutura principal, ou ainda fazer a função escolher_opções() retornar um valor booleano para indicar se o programa deve continuar.

Exemplo usando break:

def main():
    exibir_nome()
    while True:
        exibir_opções()
        opcao_escolhida = int(input('Escolha uma opção: '))

        if opcao_escolhida == 1:
            Cadastrar()
        elif opcao_escolhida == 2:
            Listar()
        elif opcao_escolhida == 3:
            print("Encerrar Programa\n")
            break
        else:
            print("Opção inválida")

As duas abordagens são válidas. No seu caso, basta garantir que sys.exit() esteja sendo realmente executado.

Continue praticando e evoluindo seu código. O fórum está à disposição para o que precisar.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!