1
resposta

[Dúvida] Função listar restaurantes está trazendo todas informações ao invés do nome.

O meu código mesmo após o processo de adicionar o dicionário na lista "restaurantes" e alterar na def "listar restaurantes", continua trazendo todas a informações dos restaurantes quando escolho a opção (2. Listar restaurantes) ao invés de trazer só o nome.

import os

restaurantes = [{'nome': 'Meal Deal', 'categoria': 'Tipica', 'ativo': False}, {'nome': 'Hey BAR','categoria': 'drinks', 'ativ0': True}, {'nome': 'Penal Sushi', 'categoria': 'japonesa', '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 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') 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_subtitulos('Listando restaurantes')

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


voltar_ao_menu_principal()

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

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

if name == 'main': main()

1 resposta

Boa noite, eu notei que na função listar_restaurantes você está fazendo uma referência à lista inteira de restaurantes ao tentar obter somente o nome:

nome_restaurante = restaurantes['nome']

O correto seria:

nome_restaurante = restaurante['nome']

Aqui no meu ambiente, utilizando o código como publicado na questão, obtêm-se um erro ao tentar listar os restaurantes porque a lista não possui atributo chamado nome.