1
resposta

Exercício realizado para praticar

Olá, bom dia, tudo bem? Em busca de colocar os conhecimentos adquiridos durante o curso em prática, realizei um exercício autonomo com uma proposta de realizar uma página de login e cadastro de usuários. Se possível, gostaria da opnião de vocês para me dar dicas de como eu poderia melhorar o meu código:

import os

usuarios_cadastrados = [{'nome':'Henri', 'email':'henri@email.com', 'senha':'123'}]

def exibir_logo_da_empresa():
    print('''
█░█ █░█ █▄░█ ▀█▀ █▀▀ █▀█   █▀▀ █▀█ █▀▄▀█ █▀█ ▄▀█ █▄░█ █▄█
█▀█ █▄█ █░▀█ ░█░ ██▄ █▀▄   █▄▄ █▄█ █░▀░█ █▀▀ █▀█ █░▀█ ░█░
          ''')

def exibir_opcoes_de_entrada():
    print('1. Login', '2. Cadastrar', '\n3. Sair', sep='\n')

def exibir_subtitulos(texto):
    os.system('cls')
    exibir_logo_da_empresa()
    linha = '*' * len(texto)
    print(texto)
    print(linha)

def voltar_ao_menu_de_entrada():
    input('\nTecle ENTER para retornar ao menu de entrada ')
    os.system('cls')
    main()

def logar():
    exibir_subtitulos('Realize o Login')

    email = input('\nEmail: ')
    senha = input('Senha: ')

    for usuario in usuarios_cadastrados:
        if email == usuario['email'] and senha == usuario['senha']:
            print(f'\nBem-vindo {usuario['nome']}')
            input('\nPressione ENTER para seguir ')
            print('EM MANUTENÇÃO...')

            voltar_ao_menu_de_entrada()
            break
    else:
        print('\nUsuário não escontrado...')
        voltar_ao_menu_de_entrada()

def cadastrar():
    exibir_subtitulos('Realize o seu cadastro')
    nome = input('\nNome: ')
    email = input('Email: ')
    senha = input('Senha: ')
    
    for usuario in usuarios_cadastrados:
        if email == usuario['email']:
            print(f'\nSinto muito {nome}, esse email já está cadastrado em nosso sistema...')

            voltar_ao_menu_de_entrada()
            break
    else:
        novo_usuario = {'nome':nome, 'email':email, 'senha':senha}
        usuarios_cadastrados.append(novo_usuario)
        print(f'\nUsuário {nome} cadastrado(a) com sucesso!')
        
        voltar_ao_menu_de_entrada()

def finalizar_sessao():
    os.system('cls')
    exibir_logo_da_empresa()
    print('Finalizando sessão...')

def opcao_invalida():
    os.system('cls')
    exibir_logo_da_empresa()
    print('Opção inválida...')
    voltar_ao_menu_de_entrada()

def escolher_opcao_de_entrada():
    opcao_de_entrada = int(input('\nDigite a opção desejada: '))

    try:
        match opcao_de_entrada:
            case 1:
                logar()
            case 2:
                cadastrar()
            case 3:
                finalizar_sessao()
            case _:
                opcao_invalida()
    except:
        opcao_invalida()

def main():
    exibir_logo_da_empresa()
    exibir_opcoes_de_entrada()
    escolher_opcao_de_entrada()

if __name__ == '__main__':
    main()

Algo que me incomoda, é o tamanho do código, será que é possível eu separar em diferentes arquivos as funções do restante? Além disso, tenho interesse em talvez aprimorar esse projeto, alguma sugestão de qual forma eu poderia fazer isso?

1 resposta

Olá, bom dia!

Parabéns pelo seu trabalho! Seu código está bem organizado e fácil de entender. Aqui estão algumas sugestões para melhorar ainda mais o seu código:

Separação de responsabilidades: Você pode dividir seu código em diferentes arquivos com base na responsabilidade de cada função. Por exemplo, você pode ter um arquivo para funções relacionadas à exibição (como exibir_logo_da_empresa e exibir_opcoes_de_entrada), outro para funções relacionadas ao gerenciamento de usuários (como logar e cadastrar), e assim por diante. Isso tornará seu código mais modular e mais fácil de manter. Validação de entrada: Você pode adicionar mais validações de entrada para garantir que os usuários estão inserindo dados válidos. Por exemplo, você pode verificar se o e-mail inserido é um e-mail válido ou se a senha atende a certos critérios de segurança. Mensagens de erro mais informativas: Em vez de apenas imprimir “Opção inválida” quando o usuário insere uma opção inválida, você pode informar ao usuário quais opções são válidas. Uso de banco de dados: Atualmente, você está armazenando usuários em uma lista em memória. Isso significa que os usuários serão perdidos sempre que o programa for encerrado. Você pode considerar o uso de um banco de dados para armazenar usuários, para que os dados persistam entre as execuções do programa. Espero que essas sugestões sejam úteis! Continue com o ótimo trabalho e não hesite em perguntar se tiver mais dúvidas.