1
resposta

[Bug] Função de retornar ao menu principal

import os

#Lista de restaurantes
restaurantes = ['Pizza Hut', 'Pastelandia']

# função para exibir o nome do programa
def exibir_nome_do_programa():
    print("""
      
░██████╗░█████╗░██████╗░░█████╗░██████╗░  ███████╗██╗░░██╗██████╗░██████╗░███████╗░██████╗░██████╗
██╔════╝██╔══██╗██╔══██╗██╔══██╗██╔══██╗  ██╔════╝╚██╗██╔╝██╔══██╗██╔══██╗██╔════╝██╔════╝██╔════╝
╚█████╗░███████║██████╦╝██║░░██║██████╔╝  █████╗░░░╚███╔╝░██████╔╝██████╔╝█████╗░░╚█████╗░╚█████╗░
░╚═══██╗██╔══██║██╔══██╗██║░░██║██╔══██╗  ██╔══╝░░░██╔██╗░██╔═══╝░██╔══██╗██╔══╝░░░╚═══██╗░╚═══██╗
██████╔╝██║░░██║██████╦╝╚█████╔╝██║░░██║  ███████╗██╔╝╚██╗██║░░░░░██║░░██║███████╗██████╔╝██████╔╝
╚═════╝░╚═╝░░╚═╝╚═════╝░░╚════╝░╚═╝░░╚═╝  ╚══════╝╚═╝░░╚═╝╚═╝░░░░░╚═╝░░╚═╝╚══════╝╚═════╝░╚═════╝░
""")

def exibir_opcoes():
    print('1. Cadastrar restaurantes')
    print('2. Listar restaurantes')
    print('3. Ativar restaurantes')
    print('4. Sair\n')

# Função para finalizar o app
def finalizar_app():
    os.system('cls')
    print('Finalizando o app\n')

# Função para voltar ao menu principal
def voltar_ao_menu_principal():
    input('Digite uma tecla para voltar ao menu principal')

# Função para comandos inválidos que o usuário digitar
def opcao_invalida():
    print('Opção inválida!\n')
    voltar_ao_menu_principal()

# Função para cadastrar novos restaurantes
def cadastrar_novo_restaurante():
    os.system('cls')
    print('Cadastro de novos restaurantes\n')
    nome_do_restaurante = input('Digite o nome do restaurante que deseja cadastrar: ')
    restaurantes.append(nome_do_restaurante)
    print(f'O restaurante {nome_do_restaurante} foi cadastrado com sucesso!')
    voltar_ao_menu_principal()

# Função para listar os restaurantes
def listar_restaurantes():
    os.system('cls')
    print('Lista de restaurantes:\n')
    
    for restaurante in restaurantes:
        print(f'.{restaurante}')

    voltar_ao_menu_principal()
# Função para escolher opção
def escolher_opcoes():
    try:
        opcao_escolhida = int(input('Escolha uma opção: '))

        if opcao_escolhida == 1:
            cadastrar_novo_restaurante()
        elif opcao_escolhida == 2:
            listar_restaurantes()
        elif opcao_escolhida == 3:
            print('Ativar restaurante')
        elif opcao_escolhida == 4:
            finalizar_app()
        else:
            opcao_invalida()
    except:
        opcao_invalida()       



def main():
    os.system('cls')
    exibir_nome_do_programa()
    exibir_opcoes()
    escolher_opcoes()

if __name__ == '__main__':
    main()

Quando executo no terminal, ele não está me listando os outros restaurantes que eu cadastrei, ele exibe somente o primeiro que está na lista que é o Pizza Hut mas os outros não cadastra. Fiz uma pesquisa no GPT e ele informou que o problema seria o main que está dentro da função voltar ao menu principal e mesmo assim eu não consigo fazer com que ele me liste os restaurantes que foram cadastrados.

1 resposta

Oi, Rafaela! Como vai?

Agradeço por compartilhar seu código com a comunidade Alura.

Seu projeto já está com uma base ótima, parabéns pela organização!

Mas vamos aos dois pontos principais que estavam impedindo o funcionamento completo:

1. O menu não reaparecia após uma ação

Do jeito que o código estava, o menu era exibido somente uma vez, porque a função main() era chamada só uma vez e não havia um laço de repetição para manter o programa em execução.

Como resolver: usar um while True no main() faz com que o menu continue aparecendo até a pessoa usuária decidir sair.

2. As funções como cadastrar_novo_restaurante não "voltavam" de verdade

Essas funções chamavam voltar_ao_menu_principal(), que apenas esperava um input(), mas não chamava novamente o menu. Isso dava a sensação de que o programa “trava” após cadastrar ou listar. Como resolver: com o while True no lugar certo, você não precisa se preocupar em chamar o menu de novo — ele já volta naturalmente ao ciclo principal.

Código completo corrigido:


import os

restaurantes = ['Pizza Hut', 'Pastelandia']

def exibir_nome_do_programa():
    print("""
░██████╗░█████╗░██████╗░░█████╗░██████╗░  ███████╗██╗░░██╗██████╗░██████╗░███████╗░██████╗░██████╗
██╔════╝██╔══██╗██╔══██╗██╔══██╗██╔══██╗  ██╔════╝╚██╗██╔╝██╔══██╗██╔══██╗██╔════╝██╔════╝██╔════╝
╚█████╗░███████║██████╦╝██║░░██║██████╔╝  █████╗░░░╚███╔╝░██████╔╝██████╔╝█████╗░░╚█████╗░╚█████╗░
░╚═══██╗██╔══██║██╔══██╗██║░░██║██╔══██╗  ██╔══╝░░░██╔██╗░██╔═══╝░██╔══██╗██╔══╝░░░╚═══██╗░╚═══██╗
██████╔╝██║░░██║██████╦╝╚█████╔╝██║░░██║  ███████╗██╔╝╚██╗██║░░░░░██║░░██║███████╗██████╔╝██████╔╝
╚═════╝░╚═╝░░╚═╝╚═════╝░░╚════╝░╚═╝░░╚═╝  ╚══════╝╚═╝░░╚═╝╚═╝░░░░░╚═╝░░╚═╝╚══════╝╚═════╝░╚═════╝░
""")

def exibir_opcoes():
    print('1. Cadastrar restaurantes')
    print('2. Listar restaurantes')
    print('3. Ativar restaurantes')
    print('4. Sair\n')

def finalizar_app():
    os.system('cls')
    print('Finalizando o app\n')
    exit()

def voltar_ao_menu_principal():
    input('\nDigite uma tecla para voltar ao menu principal...')

def opcao_invalida():
    print('\nOpção inválida!\n')
    voltar_ao_menu_principal()

def cadastrar_novo_restaurante():
    os.system('cls')
    print('Cadastro de novos restaurantes\n')
    nome_do_restaurante = input('Digite o nome do restaurante que deseja cadastrar: ')
    restaurantes.append(nome_do_restaurante)
    print(f'\nO restaurante {nome_do_restaurante} foi cadastrado com sucesso!')
    voltar_ao_menu_principal()

def listar_restaurantes():
    os.system('cls')
    print('Lista de restaurantes:\n')
    for restaurante in restaurantes:
        print(f'. {restaurante}')
    voltar_ao_menu_principal()

def escolher_opcoes():
    try:
        opcao_escolhida = int(input('\nEscolha uma opção: '))
        if opcao_escolhida == 1:
            cadastrar_novo_restaurante()
        elif opcao_escolhida == 2:
            listar_restaurantes()
        elif opcao_escolhida == 3:
            print('\nFuncionalidade de ativar restaurante ainda não implementada.')
            voltar_ao_menu_principal()
        elif opcao_escolhida == 4:
            finalizar_app()
        else:
            opcao_invalida()
    except:
        opcao_invalida()

def main():
    while True:
        os.system('cls')
        exibir_nome_do_programa()
        exibir_opcoes()
        escolher_opcoes()

if __name__ == '__main__':
    main()

Agora sim, ao cadastrar ou listar, você retorna para o menu automaticamente, sem travar o fluxo. Qualquer coisa, é só chamar!

Espero ter ajudado.

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