Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Quando digita sair pela segunda vez nao funciona

Quando testei com letras como a letra "a" por exemplo o codigo recomecou do inicio, porem, ao recomecar a opcao sair nao funciona. ja tentei de tudo, porem nao consegui resolver.

import os

def titulo():
    print('''
    ░██████╗░█████╗░██████╗░░█████╗░██████╗░  ███████╗██╗░░██╗██████╗░██████╗░███████╗░██████╗░██████╗
    ██╔════╝██╔══██╗██╔══██╗██╔══██╗██╔══██╗  ██╔════╝╚██╗██╔╝██╔══██╗██╔══██╗██╔════╝██╔════╝██╔════╝
    ╚█████╗░███████║██████╦╝██║░░██║██████╔╝  █████╗░░░╚███╔╝░██████╔╝██████╔╝█████╗░░╚█████╗░╚█████╗░
    ░╚═══██╗██╔══██║██╔══██╗██║░░██║██╔══██╗  ██╔══╝░░░██╔██╗░██╔═══╝░██╔══██╗██╔══╝░░░╚═══██╗░╚═══██╗
    ██████╔╝██║░░██║██████╦╝╚█████╔╝██║░░██║  ███████╗██╔╝╚██╗██║░░░░░██║░░██║███████╗██████╔╝██████╔╝
    ╚═════╝░╚═╝░░╚═╝╚═════╝░░╚════╝░╚═╝░░╚═╝  ╚══════╝╚═╝░░╚═╝╚═╝░░░░░╚═╝░░╚═╝╚══════╝╚═════╝░╚═════╝░''')

def catalogo():
    print('\n 1-Cadastrar restaurante \n 2-Listar restaurantes \n 3-Ativar restaurantes \n 4-Sair')

def escolha():
    try:
        opcao_escolhida = int(input('Qual opção você deseja: '))
        return opcao_escolhida 
    except ValueError:
        invalido()

def condicionais(opcao_escolhida):
    if opcao_escolhida == 1:
        nome = str(input('Qual o nome do restaurante: '))
    elif opcao_escolhida == 2:
        lista = str(input('Qual a lista: '))
    elif opcao_escolhida == 3:
        ativar = str(input('Podemos ativar?: '))
    else: 
        os.system('cls')

def limpar_tela():
    if os.name == 'nt':  
        os.system('cls')  
    else:
        os.system('clear')  
    

def invalido():
    limpar_tela()
    print('''Opcao invalida!
    ''')
    input('Digite algo aqui para retornar: ')
    main()
   
    

def condicionais_Math(opcao_escolhida): 
    try:
        match opcao_escolhida:
            case 1:
                nome = str(input('Qual o nome do restaurante?: '))
            case 2:
                lista = str(input('Quais os nomes na lista?: '))
            case 3:
                ativar = str(input('Deseja ativar?(Y/N): '))
                if ativar.lower() == 'y':  
                    print('ok')
            case 4:
                limpar_tela()
            case _:
                invalido()
    except:
        invalido()



def main():
    limpar_tela()
    titulo()
    catalogo()
    opcao_escolhida = escolha()
    condicionais_Math(opcao_escolhida)
    

if __name__ == '__main__':
    main()
1 resposta
solução!

Boa noite,

O problema está acontecendo porque a função invalido() chama a função main() diretamente, criando um ciclo infinito que impede a opção Sair (opção 4) de funcionar corretamente.

Quando o código volta para o início usando o main(), a execução nunca termina, mesmo quando o usuário escolhe a opção de sair.

Como corrigir:

→ Remova a chamada do main() dentro da função invalido() e retorne para o fluxo normal.

Exemplo Corrigindo

import os

def titulo():
    print('''
    ░██████╗░█████╗░██████╗░░█████╗░██████╗░  ███████╗██╗░░██╗██████╗░██████╗░███████╗░██████╗░██████╗
    ██╔════╝██╔══██╗██╔══██╗██╔══██╗██╔══██╗  ██╔════╝╚██╗██╔╝██╔══██╗██╔══██╗██╔════╝██╔════╝██╔════╝
    ╚█████╗░███████║██████╦╝██║░░██║██████╔╝  █████╗░░░╚███╔╝░██████╔╝██████╔╝█████╗░░╚█████╗░╚█████╗░
    ░╚═══██╗██╔══██║██╔══██╗██║░░██║██╔══██╗  ██╔══╝░░░██╔██╗░██╔═══╝░██╔══██╗██╔══╝░░░╚═══██╗░╚═══██╗
    ██████╔╝██║░░██║██████╦╝╚█████╔╝██║░░██║  ███████╗██╔╝╚██╗██║░░░░░██║░░██║███████╗██████╔╝██████╔╝
    ╚═════╝░╚═╝░░╚═╝╚═════╝░░╚════╝░╚═╝░░╚═╝  ╚══════╝╚═╝░░╚═╝╚═╝░░░░░╚═╝░░╚═╝╚══════╝╚═════╝░╚═════╝░''')

def catalogo():
    print('\n 1-Cadastrar restaurante \n 2-Listar restaurantes \n 3-Ativar restaurantes \n 4-Sair')

def escolha():
    try:
        opcao_escolhida = int(input('Qual opção você deseja: '))
        return opcao_escolhida 
    except ValueError:
        print('Opcao invalida!')
        input('Digite algo para retornar: ')
        return None

def limpar_tela():
    if os.name == 'nt':
        os.system('cls')
    else:
        os.system('clear')

def condicionais_Math(opcao_escolhida):
    match opcao_escolhida:
        case 1:
            nome = str(input('Qual o nome do restaurante?: '))
        case 2:
            lista = str(input('Quais os nomes na lista?: '))
        case 3:
            ativar = str(input('Deseja ativar?(Y/N): '))
            if ativar.lower() == 'y':
                print('Ok')
        case 4:
            print('Saindo...')
            exit()
        case _:
            print('Opcao invalida!')
            input('Digite algo para retornar: ')

def main():
    while True:
        limpar_tela()
        titulo()
        catalogo()
        opcao_escolhida = escolha()
        if opcao_escolhida is not None:
            condicionais_Math(opcao_escolhida)

if __name__ == '__main__':
    main()

Espero que ajude, bons estudos!