1
resposta

erro na função (listar restaurante) e na função (alternar restaurante)

o codigo completo esta aqui:

esta dando 2 erros no meu código (1° erro é que assim que eu cadastro o novo restaurante e depois tento lista-lo, cai em opção invalida) (2° erro é quando escolho a opção 3 de alternar restaurante ele tambem cai em opção invalida). Alguem sabe o porque de esta caindo em opção invalida?

obs: quando eu inicio o programa e peço pra ele listar, ele lista sem erro nenhum. a partir do momento que eu cadastro um novo restaurante, ele nao lista mais e cai em opção invalida

obs: quando eu escolho a opção 3, ele ja cai direto no opção invalida, sem aparecer nada em relacão a função alternar restaurante

import os

restaurantes = [{'Nome': 'Habibs', 'categoria':'Árabe','ativo': False},
                         {'Nome': 'Burguer King', 'categoria':'Hamburguer','ativo': True},
                         {'Nome': 'Jacaré Lanches', 'categoria':'Lanches Naturais','ativo': False}]

def exibir_nome_do_programa():
    print(""" ***tive que tirar a fonte por conta do limite de caracteries****
""")


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


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

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

def opcao_invalida():
   
    exibir_subtitulos('Opção inválida \n')
    
    voltar_ao_menu_principal()

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

def cadastrar_novo_restaurante():

    exibir_subtitulos('cadastro de novos restaurantes \n')

    nome_restaurante = input("Digite o nome do restaurante que deseja cadastrar: ")
    categoria = input(f'Digite o nome da categoria do restaurante {nome_restaurante}: ')
    dados_restaurante = {'nome':nome_restaurante, 'categoria':categoria, 'ativo':False}
    restaurantes.append(dados_restaurante)
    print(f'O restaurante {nome_restaurante} foi cadastrado com sucesso!\n')

    voltar_ao_menu_principal()


def listar_restaurantes():

    exibir_subtitulos('Listando os Restaurantes!\n')

    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 alternar_estado_restaurante(restaurantes): # a função alternar_estado_restaurante recebe uma lista de restaurantes como argumento 
    exibir_subtitulos('Ativando Restaurante')
    nome_restaurante = input("Digite o Nome do Restaurante que deseja Ativar: ")
    restaurante_encontrado = False

    for restaurante in restaurantes():
        if nome_restaurante == restaurante_encontrado:
            restaurante_encontrado = True

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:
            alternar_estado_restaurante()
        elif opcao_escolhida == 4:
            finalizar_app()
        else: 
            opcao_invalida()
    except:
        opcao_invalida()
1 resposta

Olá Lucas! Tudo bem?

Vamos tentar resolver os problemas que você está enfrentando no seu código.

  1. Problema ao listar restaurantes após cadastrar um novo

    O problema aqui parece ser a diferença de capitalização entre as chaves do dicionário. Quando você cadastra um novo restaurante, você está usando a chave 'nome', mas na função de listagem, você está tentando acessar 'Nome'. Isso causa um erro, pois a chave 'Nome' não existe no novo restaurante cadastrado.

    Para resolver isso, você pode padronizar as chaves do dicionário. Vou sugerir que você use todas as chaves em minúsculas para manter a consistência:

    restaurantes = [{'nome': 'Habibs', 'categoria':'Árabe','ativo': False},
                    {'nome': 'Burguer King', 'categoria':'Hamburguer','ativo': True},
                    {'nome': 'Jacaré Lanches', 'categoria':'Lanches Naturais','ativo': False}]
    

    E na função listar_restaurantes, altere para:

    def listar_restaurantes():
        exibir_subtitulos('Listando os Restaurantes!\n')
    
        for restaurante in restaurantes:
            nome_restaurante = restaurante['nome']
            categoria = restaurante['categoria']
            ativo = restaurante['ativo']
            print(f'.{nome_restaurante} | {categoria} | {ativo}')
    
        voltar_ao_menu_principal()
    
  2. Problema ao alternar restaurante

    Aqui, você tem um erro na função alternar_estado_restaurante. Primeiramente, você está passando a lista de restaurantes como argumento, mas na chamada da função escolher_opcoes, você não está passando nenhum argumento. Além disso, o loop for restaurante in restaurantes() está incorreto, pois restaurantes é uma lista, não uma função.

    Vamos corrigir isso:

    def alternar_estado_restaurante():
        exibir_subtitulos('Ativando Restaurante')
        nome_restaurante = input("Digite o Nome do Restaurante que deseja Ativar: ")
        restaurante_encontrado = False
    
        for restaurante in restaurantes:
            if restaurante['nome'] == nome_restaurante:
                restaurante['ativo'] = not restaurante['ativo']
                restaurante_encontrado = True
                print(f'O estado do restaurante {nome_restaurante} foi alterado para {"ativo" if restaurante["ativo"] else "inativo"}.\n')
                break
    
        if not restaurante_encontrado:
            print(f'Restaurante {nome_restaurante} não encontrado.\n')
    
        voltar_ao_menu_principal()
    

    E na função escolher_opcoes, altere a chamada para:

    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:
                alternar_estado_restaurante()
            elif opcao_escolhida == 4:
                finalizar_app()
            else: 
                opcao_invalida()
        except:
            opcao_invalida()
    

Com essas alterações, seu código deve funcionar corretamente para listar e alternar o estado dos restaurantes.

Espero ter ajudado e bons estudos!

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