image

Acesse bootcamps ilimitados e +650 cursos

50
%OFF
Article image
Bryan Corrêa
Bryan Corrêa30/07/2023 16:50
Compartilhe

Potência Tech powered by iFood | Ciência de Dados: minha entrega do segundo desafio

  • #GitHub
  • #Git
  • #Python

Introdução

O segundo desafio do bootcamp tratou-se de uma evolução do primeiro desafio. Nele, o objetivo era organizar o código em funções para cada feature do sistema bancário fictício. Além disso, foi proposto que houvessem três novas features: cadastro de cliente, criação de conta e lista com as contas.

Minha experiência ao desenvolver o segundo desafio

Eu já tinha boa parte do código escrito, visto que busquei implementar o paradigma funcional (ou quase isso) já no primeiro desafio, pois sempre tento dar "meu toque" em coisas que são propostas (faço isso em praticamente tudo na vida e aconselho todos a fazerem, pois mexe bastante com a criatividade e demonstra proatividade).

Contudo, desta vez eu "puxei o freio de mão" ao pensar em coisas mais avançadas para o desafio. No vídeo de solução do problema, descobri que as coisas que pensei para implementar serão abordadas posteriormente (pelo menos foi isso que o especialista disse). Portanto, decidi dar uma segurada na implementação do que pensei, mas, mesmo assim, dei "meu toque" em algumas coisas no código.

Ideias e desenvolvimento do desafio

Minhas ideias para essa parte do desafio se resumiram em implementar algumas validações para as entradas, e em manipular algumas strings com métodos.

A ideia original do desafio usa o CPF do usuário como meio de garantir que apenas uma pessoa por CPF pode se cadastrar como usuário. O mesmo ocorre na criação da conta corrente, mas por outro motivo. Aqui, a verificação é se o usuário tem cadastro no banco ou não. Após verificar, uma conta é criada para o usuário se ele é cadastrado no banco.

Para fazer a validação da entrada do CPF, pensei em utilizar um loop "while" para que o CPF fosse pedido enquanto o usuário não fornece apenas números e enquanto a cadeia de caracteres inserida não fosse de exatamente 11 números (quantidade de caracteres em um CPF).

while True:
  cpf = input("Please enter your CPF number (only numbers): ")

  if cpf.isdigit() and (len(cpf) == 11):
      break
  else:
      print("Invalid input. Please enter only numbers!")

Assim que o usuário digita o CPF corretamente, a informação é encaminhada para a função auxiliar que irá filtrar para saber se o CPF já é cadastrado ou não (essa função também auxilia no mesmo objetivo para criar uma nova conta bancária).

Uma coisa que fiz diferente da implementação do especialista foi em dividir o endereço em variáveis separadas e, no fim, juntá-las para formar a informação desejada e na formatação proposta. Além disso, tive essa ideia porque facilitaria validar alguns dos dados sem precisar utilizar métodos de string e loops para percorrer a variável "endereço" que havia sido proposta.

Utilizei a mesma validação do CPF para validar o número da casa, visto que só números poderiam compor essa informação.

 while True:
  number = input("Please enter the number of your house: ")

  if number.isdigit():
      break
  else:
      print("Invalid input. Please enter only numbers!")

Outra coisa que pensei foi na validação e padronização do estado digitado pelo usuário. Para isso, criei uma lista com a abreviação das 27 Unidades Federativas do Brasil (26 estados mais o DF). Após o usuário digitar o estado, a informação só será aceita se estiver contida na lista fornecida.

 while True:
   state = input("Please enter your State: ").upper()

    if state in states:
        break
    else:
        print("Invalid input. Please enter only numbers!")

Além dessas validações, utilizei os métodos ".tittle()" e ".upper" para padronizar a informação, principalmente para sua saída. O método ".upper()" pode ser visto acima na variável "state": ele converte em maiúsculo os caracteres digitados. Já o método ".tittle()" foi utilizado em variáveis em que seria interessante que a primeira letra de cada palavra fosse exibida em maiúsculo, como no nome da rua, cidade, etc.

As outras alterações que pensei em relação ao projeto inicial já foram abordadas no artigo que escrevi para o primeiro desafio.

Documentação

Assim como no primeiro desafio, investi algum tempo para documentar o projeto utilizando para isso o README do mesmo.

Conclusão

Ver o programa rodando redondinho e ver que as coisas que pensei funcionavam me deixou com ótima sensação. Foi gratificante concluir mais esta etapa do bootcamp, além de entender mais ainda a importância de ter um código organizado para poder tratar os erros que vão surgindo na execução do projeto. Estou empolgado para aplicar esses conhecimentos em novos desafios e continuar aprimorando minhas habilidades em Python e programação de forma geral. Gratidão à DIO e ao iFood por tornarem isso possível. 🤗

Extra (e importante para mim)

Peço que, por gentileza, acessem o meu repositório no GitHub com minha solução para o desafio. Adoraria ler o que vocês acharam da implementação e da documentação que fiz. Podem deixar suas mensagens nos comentários deste artigo ou, se preferir (e talvez seja melhor), assinem o livro de visitas que criei para o repositório, dizendo o que acharam da implementação, da documentação, e compartilhando suas experiências e ideias também. Isso será muito enriquecedor para mim, e acredito que também pode ser para você. Gratidão para quem leu até aqui, e até a próxima! o/

Compartilhe
Comentários (4)
Bryan Corrêa
Bryan Corrêa - 04/08/2023 18:55

Gustavo Freitas


Gratidão pelo comentário! Eu pensei em utilizar o método ".strip()", mas desisti porque o espaço é um caractere também. Como a verificação é feita para ver se o valor inserido é um número, pensei que não seria necessário utilizar o método. Mas é uma excelente ideia! Agradeço por compartilhar! ^^


Leonidia Santos


Gratidão pelo comentário!!!!


Eduardo Silva


Eu que agradeço por você ter comentado no post, meu amigo! Fico feliz que você tenha gostado de ler sobre minha experiência realizando o desafio. Também fico feliz por compartilharmos das mesmas visões para boas práticas de escrita de código! Não tenho palavras para agradecer pelo incentivo do final da sua mensagem. Tenho pensado em alguns pequenos projetos para ir implementando até o fim do bootcamp ou quando eu terminar ele. Novamente, gratidão pelo seu comentário e pelo carinho! Forte abraço!

Eduardo Silva
Eduardo Silva - 31/07/2023 09:47

Olá, Bryan!

Obrigado por compartilhar sua experiência com o segundo desafio do bootcamp. Foi muito interessante ler sobre as suas ideias e como você implementou-as em seu código.

Concordo com você que é importante ter um código organizado para poder tratar os erros que vão surgindo na execução do projeto. Também acho que é importante documentar seu código para que outras pessoas possam entender como ele funciona.

Estou animado para ver o que você vai criar no futuro!

LS

Leonidia Santos - 30/07/2023 18:09

Que legal, parabéns, 👏

Gustavo Freitas
Gustavo Freitas - 30/07/2023 17:35

Parabéns Bryan pela sua resolução, e pela ideia de padronização de dados, evitam assim possíveis problemas futuras que poderiam aparecer como a digitação de formas diferentes e aproveito para sugerir caso queira incrementar adicionar o ".strip()" no input de cpf para remover espaços vazios nas pontas, onde numa possível situação o usuário poderia teclar no espaço antes de começar a digitar os números.