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

[Dúvida] Opção Inválda!

Ao cadastrar o restaurante e a categoria o input está okay, mas ao solicitar para que liste os restaurantes a saída é Opção Inválida! Insira aqui a descrição dessa imagem para ajudar na acessibilidadeSegue meu código

import os 

restaurantes = [{'nome':'Praça', 'categoria':'Japonesa', 'ativo':False},
                {'nome':'Pizza Suprema', 'categoria':'Pizza', 'ativo':True},
                {'nome':'Cantina', 'categoria':'Italiano', 'ativo':False }]

def exibir_nome_do_programa():
    print('''
      
╭━━━╮╱╱╭╮╱╱╱╱╱╱╱╭━━━╮
┃╭━╮┃╱╱┃┃╱╱╱╱╱╱╱┃╭━━╯
╰━━╮┃╭╮┃╭╮┃╭╮┃╭╯┃╭━━┻╋╋┫╭╮┃╭┫┃━┫━━┫━━┫
┃╰━╯┃╭╮┃╰╯┃╰╯┃┃╱┃╰━━┳╋╋┫╰╯┃┃┃┃━╋━━┣━━┃
╰━━━┻╯╰┻━━┻━━┻╯╱╰━━━┻╯╰┫╭━┻╯╰━━┻━━┻━━╯
╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱┃┃
╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╰╯
      ''')

def exibir_opções():
    print('1. Cadastrar Restaurante')
    print('2. Listar Restaurantes')
    print('3. Ativar Restaurante')
    print('4. Sair\n')

def finalizar_app():
    exibir_subtitulo('Finalizando o app')

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

def opcao_inválida():
    print('Opção Inválida!\n')
    voltar_ao_menu_principal()

def exibir_subtitulo(texto):
    os.system('cls')
    print(texto)
    print()

def cadastrar_novo_restaurante():
    exibir_subtitulo('Cadastro de Novos Restaurantes')
    nome_do_restaurante = input('Digite o nome do restaurante que deseja cadastrar: ')
    categoria = input(f'Digite o nome da categoria do restaurante {nome_do_restaurante}: ')
    dados_do_restaurante = {'Nome':nome_do_restaurante, 'Categoria':categoria, 'Ativo':False}
    restaurantes.append(dados_do_restaurante)
    print(f'O restaurante {nome_do_restaurante} foi cadastrado com sucesso!\n')
    voltar_ao_menu_principal()

def listar_restaurantes():
    exibir_subtitulo('Listando Restaurantes')

    for restaurante in restaurantes:
        nome_restaurante = restaurante['nome']
        categoria = restaurante['categoria']
        ativo = restaurante['ativo']
        print(f'- {nome_restaurante} | {categoria} | {ativo}')

    voltar_ao_menu_principal()

def escolher_opção():
    try:
        opção_escolhida = int(input('Escolha uma opção: '))
        #opção_escolhida = int(opção_escolhida)

        if opção_escolhida == 1:
            cadastrar_novo_restaurante()
        elif opção_escolhida == 2:
            listar_restaurantes()
        elif opção_escolhida == 3:
            print ('Ativar restaurante')
        elif opção_escolhida == 4:
            finalizar_app()
        else:
            opcao_inválida()
    except:
        opcao_inválida()
def main():
    os.system('cls')
    exibir_nome_do_programa()
    exibir_opções()
    escolher_opção()


if __name__ == '__main__':
    main()

Preciso de ajuda na análise do código pois não encontro o erro sendo que segui passo a passo a montagem do mesmo.

2 respostas
solução!

Boa tarde Rodrigo! Tudo bem com você?

A mensagem "Opção Inválida!" está sendo apresentada devido a um pequeno erro na nomenclatura das chaves do dicionário dados_do_restaurante no momento do cadastramento.

No seu código, dentro da função cadastrar_novo_restaurante as chaves do dicionário dados_do_restaurante foram declaradas com a primeira letra em maiúsculo, da seguinte forma: Nome, Categoria, Ativo. Assim os novos restaurantes vão receber as chaves com a letra em maiúsculo.

Já na função listar_restaurantes, as chaves foram declaradas com a primeira letra em minúsculo, dessa forma, a função listar_restaurantes não consegue listar os novos restaurantes cadastrados, pois eles não possuem a chaves com a primeira letra em minúsculo.

Para corrigir esse comportamento, basta modificar as chaves do dicionáriodados_do_restaurante na função cadastrar_novo_restaurante, deixando como apresentado abaixo:

dados_do_restaurante = {'nome':nome_do_restaurante, 'categoria':categoria, 'ativo':False}

Salve o seu arquivo após a modificação, e execute-o novamente. Deixo abaixo um GIF apresentando como corrigir o seu código:

GIF apresentando a execução dos passos listados anteriormente

Espero ter ajudado. Conte com o apoio do Fórum na sua jornada. Fico à disposição.

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Obrigado pela explicação, deu certo !!