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

nao sei oq estou fazendo de errado no codigo pra listar os restaurante aparece só o primeiro - Cantinho da pizza | pizza | false mas ai em baixo aparece opção invalida me ajude por favor

import os

restaurantes = [{'nome' : 'Cantinho da pizza', 'categoria': 'Pizza', 'ativo':False },
               {'nome' : 'Sushi da mochii', 'Categoria' : 'Japonesa', 'ativo':True},
               {'nome' : 'Cantinho do Café', 'categoria': 'Café', 'ativo':False },]

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

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

def finalizar_app():
     exibir_subtitulo('Finalizar app')

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

def opcao_invalida():
    print('opção invalida!\n')
    voltar_ao_menu_principal()

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

def cadastrar_novo_restaurantes():
    exibir_subtitulo ('Cadastro de novos restaurantes')
    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()

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 escolhe_opcao():
    try:
        opcao_escolhida = int(input('Escolha uma Opção: '))
        # opcao_escolhida = int(opcao_escolhida)

        if opcao_escolhida == 1:
            cadastrar_novo_restaurantes()
        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()
    escolhe_opcao()

if __name__ == '__main__':
   main()
2 respostas
solução!

Olá, estudante, como vai?

O motivo de aparecer apenas um restaurante na listagem é que há um pequeno erro no seu código. Na lista de dicionários restaurantes, o segundo item está com a chave 'Categoria' (com "C" maiúsculo), enquanto o restante usa 'categoria' (com "c" minúsculo). Como Python diferencia maiúsculas de minúsculas, quando você tenta acessar restaurante["categoria"], esse dicionário específico não tem essa chave e gera um erro, interrompendo a execução do loop.

Após ajustar, seu código deve listar todos os restaurantes corretamente, sem cair na opção inválida.

Se tiver mais dúvidas, o fórum está à disposição.

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

deu certo vlw