Oi! Tudo bem?
Eu testei o código, vi que o problema é na parte de listar os restaurantes mesmo.
Você não definiu as variáveis para nome_do_restaurante
e categoria
, então para a função print()
imprimir os restaurantes, elas teriam que ser definidas. Você pode trocar categorias
para categoria
ou vice-versa, mas é necessário que seja apenas uma delas tanto para a definição quanto para a hora de chamar na impressão. E o mesmo vale para nome_restaurante
e nome_do_restaurante
.
Lembrando que você deixou o 'False' e 'True' entre aspas simples, então é recomendado você deixar sem as aspas. Isso porque elas são tipos booleanos.
No seu código, notei que você adicionou a função sleep
(). A parte de "Opção Inválida" aparece após listar os restaurantes (mesmo após a correção dela). Alterei algumas coisas no seu código para ele funcionar certinho sem mostrar que tem a opção inválida:
import os
import time
restaurantes = [
{'nome': 'Peixe na rede', 'categoria': 'Natural', 'ativo': False},
{'nome': 'Calzonne', 'categoria': 'Rapida', 'ativo': True},
{'nome': 'Giraffas', 'categoria': 'Rapida', 'ativo': True},
{'nome': 'MacDonalds', 'categoria': 'Rapida', 'ativo': False},
{'nome': 'La Torreza', 'categoria': 'Servi Service', 'ativo': False},
{'nome': 'Burger King', 'categoria': 'Rapida', 'ativo': True},
{'nome': 'Portugal e seus Sabores', 'categoria': 'Portuguesa', 'ativo': True},
{'nome': 'Amor a Massa', 'categoria': 'Massas', 'ativo': False},
{'nome': 'Nosso Pao', 'categoria': 'Massas', 'ativo': False},
{'nome': 'Delicias de Araxa', 'categoria': 'Mineira', 'ativo': True}
]
def exibir_nome_do_programa():
print('\n')
print('Sabor Express\n')
def exibir_opcoes():
print('1. Cadastrar Restaurante')
print('2. Listar Restaurante')
print('3. Ativar Restaurante')
print('4. Sair \n')
def finalizar():
exibir_subtitulo("Finalizar o app")
print("")
def opcao_invalida():
print("Opção Inválida!\n")
input("Digite uma tecla para voltar")
main()
def voltar_ao_menu():
print('\nDigite uma tecla para voltar ao menu principal.')
input() # Pausa para o usuário pressionar uma tecla
os.system('clear')
exibir_nome_do_programa()
exibir_opcoes()
escolher_opcoes()
def exibir_subtitulo(texto):
os.system('clear')
print(texto)
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 a 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!')
voltar_ao_menu()
def listar_restaurantes():
exibir_subtitulo('Listando restaurantes: \n')
for restaurante in restaurantes:
nome_do_restaurante = restaurante['nome']
categoria = restaurante['categoria']
ativo = restaurante['ativo']
print(f' {nome_do_restaurante} | {categoria} | {ativo}')
time.sleep(2) # Pausa de 2 segundos antes de voltar ao menu
voltar_ao_menu()
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:
print("Ativar Restaurante")
elif opcao_escolhida == 4:
finalizar()
else:
opcao_invalida()
except ValueError:
opcao_invalida()
def main():
os.system('clear')
exibir_nome_do_programa()
exibir_opcoes()
escolher_opcoes()
if __name__ == '__main__':
main()
Além do que comentei acima, importamos a biblioteca time, pra usar a função sleep()
. Também colocamos um input
para o usuário entrar uma tecla, assim como fizemos antes, e ter essa pausa. E fizemos um tratamento de exceção específico: em escolher_opcoes, o except
agora captura apenas ValueError, que é o erro esperado se a conversão de input para int falhar.
E, para responder a sua última pergunta: as funções são parecidas poisa principal razão para ter essas duas funções semelhantes é a necessidade de limpar a tela e exibir o menu em duas situações diferentes: no início do programa (com a função main()
) e após executar uma operação (com a voltar_ao_menu()
.
Se outra dúvida surgir, fique à vontade para postar. Recomendo abrir um novo tópico para focarmos mais nos seus posts, tá bem? ^_^
Abraços!