1
resposta

[Dúvida] Dicionários

Dessa vez meu código não deu erro, mas as listagens não estão aparecendo uma embaixo da outra e sim apenas{'nome': 'Cantina','categoria': 'Italiano', 'Ativo':False}]


import os


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

#Quando temos {chaves} dentro [listas] estamos criando dicionários.
# Dicionários irá armenazar os dados cadastrados e irá aparecer no menu listar restaurante.

#restaurantes [] é uma lista.#
# Lista ármazena todos os dados que são cadastrados no programa.#

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

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

def finalizar_app():
     exibir_subtitulo('Finalizar app')
    #def é o como se declara um função no python.
    #Função é um bloco de código, que vai realizar uma determinada ação.

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)
        print()

def cadastrar_novo_restaurante():
        exibir_subtitulo('Cadastro de novos restaurantes')
        nome_do_restaurante = input('Digite o nome do restaurante que deseja cadastrar: ')
        restaurantes.append(nome_do_restaurante)
        #append é uma função que armazenará os nomes dos restaurantes na lista.#
        #(nome_do_restaurante) é um argumento necessário para que os dados sejam armazenados na lista.#
        print(f'O restaurante {nome_do_restaurante } foi cadastrado com sucesso!')
        voltar_ao_menu_principal()
   

def listar_restaurantes():
    exibir_subtitulo('Listando restaurantes')
    #para que seja armazenado os dados e  apareça na lista quando selecionamos o menu listar restaurante,
    #devemos fazer como no exemplo: nome_restaurante = restaurante['nome'],
    #onde['nome'] é o argumento para que mostre o nome do restaurante.
    #['categoria'] aparecerá categoria e asiim para os demais dados.
    for restaurante in restaurantes:
         nome_restaurante = restaurante['nome']
         categoria = restaurante['categoria']
    Ativo = restaurante['Ativo']
    print(f'-{nome_restaurante}|{categoria}|{Ativo}')
    voltar_ao_menu_principal()
    #for restaurante in restaurante significa que cada restaurante cadastrado,
    # irá aparecer na lista#
      





def escolher_opcao():
    try:
        opcao_escolhida =int (input('Escolha uma opção: '))
        print(f'Você escolheu a opção {opcao_escolhida}')
        # int, coloca-se o int porque o padrão da linguagem python,#
        # os números são strings e colocando o int a linguagem,
        # irá converter o número para inteiro.
        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()

    

    #opcao_escolhida é uma variavel que irá armazenar uma opcão escolhida no menu#

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

if __name__ == '__main__':
        main()

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

1 resposta

Oii, Rodrigo.

Seu código tá quase todo certinho, mas a função listar_restaurantes() tem um pequeno problema de indentação. O bloco que imprime os dados de cada restaurante tá fora do for, o que faz com que apenas o último restaurante da lista seja exibido.

Aqui tá a correção:

import os

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

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

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

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

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

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

def exibir_subtitulo(texto):
    os.system('cls' if os.name == 'nt' else 'clear')
    print(f'{texto}\n')

def cadastrar_novo_restaurante():
    exibir_subtitulo('Cadastro de novos restaurantes')
    nome_do_restaurante = input('Digite o nome do restaurante que deseja cadastrar: ')
    categoria = input('Digite a categoria do restaurante: ')
    restaurante = {'nome': nome_do_restaurante, 'categoria': categoria, 'Ativo': False}
    restaurantes.append(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']
        status = 'Ativo' if ativo else 'Inativo'
        print(f'- {nome_restaurante} | {categoria} | {status}')
    voltar_ao_menu_principal()

def escolher_opcao():
    try:
        opcao_escolhida = int(input('Escolha uma opção: '))
        print(f'\nVocê escolheu a opção {opcao_escolhida}\n')
        if opcao_escolhida == 1:
            cadastrar_novo_restaurante()
        elif opcao_escolhida == 2:
            listar_restaurantes()
        elif opcao_escolhida == 3:
            print('Funcionalidade 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():
    os.system('cls' if os.name == 'nt' else 'clear')
    exibir_nome_do_programa()
    exibir_opcoes()
    escolher_opcao()

if __name__ == '__main__':
    main()

E, um ajuste extra que pode te ajudar:

  • No seu main(), você precisa chamar corretamente as funções, mantendo a indentação correta:
def main():
    os.system('cls')
    exibir_nome_do_programa()
    exibir_opcoes()
    escolher_opcao()

Assim o programa será iniciado corretamente ao ser executado.

Espero ter ajudado.

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