1
resposta

[Sugestão] Resolução - Hora da prática: instância de uma classe

O que poderia melhorar no código, para deixar mais legível e com uma estrutura profissional ?

class Restaurante:
    def __init__(self, nome, categoria, ativo):       
        self.nome =nome
        self.categoria = categoria
        self.ativo = ativo

restaurantes = []

def menu():
    print('Escoha uma das opções:')
    print('1.Cadastrar um restaurante:')
    print('2.Listar Restaurantes:')
    print('3.Selecionar restautante:')
    print('4.Alterar restaurante:')
    print('5.Sair')
    escolha = input('Digite uma das opções a cima.')
    opcoes(escolha)

def opcoes(escolha):
    if escolha == '1':
        criando_objeto()
    elif escolha == '2':
        listando_objetos()
    elif escolha == '3':
        seleciona_restaurante_individual()
    elif escolha == '4':
        altera_atributos()
    elif escolha == '5':
        print('Encerrando o programa')
    else:
        print('Opção invalida')
        voltar_ao_menu()

def voltar_ao_menu():
    input('Digite uma tecla para voltar ao menu principal')
    menu()

def criando_objeto():

    nome = input('Digite o um nome para o restaurante: ')
    categoria = input('Digite o nome da categoria do restaurante: ')
    while True:
        escolha = input('Digite 1 para ativar o restaurante e 2 para deixar inativo: ')
        if escolha == '1':
            ativo = True
            break
        elif escolha == '2':
            ativo = False
            break
        else:
            print('Erro: Valor invalido!')
    restaurante = Restaurante(nome,categoria,ativo)
    restaurantes.append(restaurante)
    voltar_ao_menu()

def listando_objetos():
    for restaurante in restaurantes:
        print(vars(restaurante))
    voltar_ao_menu()

def seleciona_restaurante_individual():
    nome = input('Digite o nome do restaurante: ')
    for restaurante in restaurantes:
        if restaurante.nome == nome:
            print(f'Nome: {restaurante.nome}')
            print(f'Categoria: {restaurante.categoria}')
            print(f'Ativo: {restaurante.ativo}')
            print('Restaurante ativo' if restaurante.ativo else 'Restaurantre inativo' )
            break
    else:
        print('Restaurante não encontrado')
    voltar_ao_menu()

def altera_atributos():
    restaurante_selecionado = input('Digite o nome do restaurante')
    for restaurante in restaurantes:
        if restaurante.nome == restaurante_selecionado:
            print('Selecione a opção que deseja alterar.')
            print('1. Nome')
            print('2. Categoria')
            print('3. Status')
            opcao_selecionada = input('Digite uma opção: ')

            if opcao_selecionada == '1':
                novo_nome = input(f'Digite um novo nome para o restaurante {restaurante.nome}: ')
                restaurante.nome = novo_nome
                print('Nome alterado')
                voltar_ao_menu()
                break
            elif opcao_selecionada == '2':
                nova_categoria = input(f'Digite uma nova categoria para o restaurante {restaurante.nome}: ')
                restaurante.categoria = nova_categoria
                print('Categoria alterada')
                voltar_ao_menu()
                break
            elif opcao_selecionada == '3':
                print('Atualmente o restaurante está ativo' if restaurante.ativo else 'Atualmente o status do restaurante está inativo ')
                alteracao = input('Deseja alterar [s/n]? ')
                if alteracao == 's':
                    restaurante.ativo = not restaurante.ativo
                    print('Status alterado')
                    voltar_ao_menu()
                    break
                elif alteracao == 'n':
                    print('Status não alterado')
                    voltar_ao_menu()
                    break
                else:
                    print('Opção invalida')
                    return altera_atributos()
            else:
                print('Opção invalida')
    else:
        print('Restaurante não encontrado')               


def main():
    menu()



if __name__ == '__main__':
    main()
1 resposta

Oi, William, tudo bem?

Primeiramente, parabéns pelo código! A sua lógica funciona super bem e é muito legal ver você implementando um sistema completo de terminal.

Bons estudos!

Sucesso

Imagem da comunidade