Article image
BEZERRA André
BEZERRA André17/01/2025 12:10
Compartilhe

BEZERRA, André - GitHub Copilot: Análise de Desafios e Soluções

  • #Equipe Motivada
  • #Python

VIDEO - SOLUÇÃO COMENTADA

https://www.youtube.com/watch?v=Q0qeCJYxY4o < EBAN - Escovando Bits em Alto Nível

GITHUB

https://github.com/w1s4sh1i/1-BootCamps/blob/DIO-Microsoft-AI-Tech-GitHub-Copilot/DIO/DIO-Microsoft-AI-Tech-GitHub-Copilot/0-Code-Challenges

Code Challenges - Bootcamp Microsoft AI for Tech - GitHub Copilot

I. Debugando com o GitHub Copilot [3]

I Debugando um Conversor de Data Simples [1/3]

Neste exercício, vamos desmistificar um desafio comum para quem está começando a programar: a conversão de datas entre diferentes formatos. Imagine que recebeu um código com bugs ou desformatado, que deveria transformar datas do formato americano ("yyyy-mm-dd") para o brasileiro ("dd/mm/yyyy"). Nosso objetivo é entender o problema e estruturar uma estratégia de solução e testar o código, para validar nossa resposta.

Entendendo o Desafio

O código defeituoso recebe uma data em formato de texto ("yyyy-mm-dd") e deve formatar para "dd/mm/yyyy". Se a data de entrada não conter indicadores internos de separação: "-" para separar os dados, o código precisa retornar a mensagem "Formato de data inválido."

Pontos de Análise
  • Validação da Entrada - Antes de qualquer conversão, é crucial verificar se a data de entrada está correta. Afinal, não queremos que nosso código tente processar algo como "2024/12/25" ou "janeiro-01-2023". Precisamos garantir que o formato "yyyy-mm-dd" seja respeitado.
  • Extração dos Componentes - Uma vez validada a entrada, precisamos extrair o ano, o mês e o dia da string original. Python oferece diversas maneiras de fazer isso, como o método split().
  • Reformatação da Data - Com os componentes da data em mãos, precisamos reorganizá-los e formatá-los de acordo com o padrão brasileiro "dd/mm/yyyy".
Estratégia de Solução
  • Validação com Expressões Regulares (Regex) - Usar regex é uma forma eficiente de validar o formato da data. Uma expressão regular pode descrever o padrão "yyyy-mm-dd" e verificar se a entrada corresponde a ele. (estratégia opcional)
  • .split() para Extração - O método .split('-') pode dividir a string de data em uma lista de três elementos: ano, mês e dia.
  • F-strings para Formatação - As f-strings em Python facilitam a construção da string de saída no formato desejado.

Exemplo

Se a entrada for "2024-12-25", a saída esperada é "25/12/2024". Se a entrada for "25.12.2024", a saída deve ser "Formato de data inválido."

Dicas para rastrear boas respostas

Use um debugger (IDE para análise) ou imprima valores intermediários para acompanhar o fluxo do código e identificar os erros.

  • O GitHub Copilot pode ser um aliado poderoso, sugerindo correções e otimizações.
  • Explore a documentação do Python e bibliotecas como datetime para aprofundar seus conhecimentos sobre manipulação de datas.
# ...
  ano, mes, dia = data_str.split("-") # [ x ] - Modificar a sequência de recepção dos valores.   
# ...
if "-" in data_input: # [ x ] - Adicionar ":" para estruturar o "if"
# ...
Alternativas de soluções otimizadas nos arquivos dos códigos.

I Debugando um Verificador de Anagrama [2/3]

Esse exercício vamos avaliar outro desafio clássico de programação: verificar se duas palavras são anagramas. Anagramas são palavras formadas pelas mesmas letras, mas em ordens diferentes. Recebemos um código com erros que realizaremos as verificações necessárias com o objetivo de depurar e fazer o código funcionar corretamente.

Entendendo o Desafio

O programa recebe duas palavras como entrada (fornecidas pelo servidor), separadas por um espaço. A saída deve ser "Verdadeiro" se as palavras forem anagramas e "Falso" caso contrário. Simples, correto? Mas, o código fornecido tem alguns bugs que iremos corrigir.

Pontos de Análise
  • Tratamento da Entrada - O programa precisa ler a linha de entrada contendo as duas palavras e separá-las corretamente.
  • Lógica de Comparação - O núcleo do desafio está em comparar as letras das duas palavras. Precisamos de uma maneira eficiente de verificar se elas contêm as mesmas letras, independentemente da ordem.
  • Saída Correta - O programa deve imprimir "Verdadeiro" ou "Falso" de acordo com o resultado da comparação. Atenção à capitalização ("V" e "F" maiúsculos).
Estratégia de Solução
  • input().split() para a Entrada - A função input() lê a linha de entrada, e o método .split() a divide em uma lista de palavras, usando o espaço como separador.
  • Ordenação e Comparação - Uma estratégia eficaz é ordenar as letras de cada palavra e compará-las. Se as palavras ordenadas forem iguais, elas são anagramas. Python facilita isso com a função sorted().
  • print() para a Saída: A função print() exibe o resultado. Podemos usar uma estrutura condicional (if/else) para imprimir "Verdadeiro" ou "Falso".

Exemplo

Se a entrada for "ouvir virou", a saída esperada é "Verdadeiro". Se a entrada for "gato pato", a saída esperada é "Falso".

# ...
  return sorted(palavra1) == sorted(palavra2) # [ x ] - Adicionar a ordenação na palavra2;
# ...
      print("Verdadeiro") # [ x ] - Adicionar os parênteses;
# ...
      print("Falso") # [ x ] - Adicionar os parênteses;
# ...
Alternativas de soluções otimizadas nos arquivos dos códigos.

I Debugando uma Calculadora de Moda [3/3]

Neste 3º desafio, vamos encarar um desafio prático: depurar uma calculadora de moda escrita em Python. A moda, em estatística, representa o valor que aparece com mais frequência em um conjunto de dados. Recebemos um código com defeitos, e nossa missão é encontrar e corrigir os erros para que a calculadora funcione como esperado.

Entendendo o Desafio

A calculadora recebe uma sequência de números inteiros separados por espaços. Ela deve processar esses números e identificar qual deles aparece com maior frequência, imprimindo esse valor como resultado (a moda).

Pontos de Análise
  • Processamento da Entrada - A calculadora precisa ler a string de entrada, separar os números e convertê-los para o tipo inteiro.
  • Contagem de Frequências - O código deve contar quantas vezes cada número aparece na sequência. Estruturas de dados como dicionários são úteis para isso.
  • Identificação da Moda - Após contar as frequências, o programa precisa determinar qual número tem a maior contagem, ou seja, a moda.
Estratégia de Solução
  • input().split() e map() para a Entrada - input().split() divide a entrada em uma lista de strings. map(int, ...) converte cada string da lista para um inteiro.
  • Dicionário para Contagem - Um dicionário pode armazenar as frequências de cada número. A chave do dicionário é o número, e o valor é a sua contagem.
  • Encontrando a Moda - Podemos iterar pelo dicionário para encontrar a chave (número) com o maior valor (contagem).

Exemplo

Se a entrada for "1 2 2 3 3 3 4", a saída esperada é 3. Se a entrada for "1 1 4 2 3 3 4 4", a saída esperada é 4.

# ...
  maior_frequencia = max(frequencias.values()) # [ x ] - Modificar .items() por .values();
# ...
else: # [ x ] - Adicionar ":";
# ...
Para dúvidas e dicas - os comentários serão uma via para comunicação e integração de conhecimento.
Compartilhe
Comentários (3)
BEZERRA André
BEZERRA André - 22/01/2025 13:24

CORREÇÃO DO LINK DO VIDEO!

https://www.youtube.com/watch?v=Q0qeCJYxY4o link para o video atualizado! 

BEZERRA André
BEZERRA André - 17/01/2025 14:56

DIO Community!

Sobre:

O COPILOT - É uma ferramenta de suporte a produção e redução de tempo. Mas precisa estar em sintonia com o desenvolvedor (sempre querer aprender e aprofundar o conhecimento) para melhor progredir no cenário comercial.

Os desafios de Código - Essa feature precisa ser atualizada com mais elementos de integração entre conhecimento e resultados. Aplicando conceitos de STEM / STEAM e os contextos serem mais comerciais (análise, correção e otimização). Gamification é um zona tenue, mas que traz feedbacks de qualidade para o produto e auxiliam na coleta de dados para impulsionar novas ferramentas.

DIO Community
DIO Community - 17/01/2025 13:22

Parabéns pelo artigo, André! Que incrível a forma como você analisou os desafios e soluções relacionados ao GitHub Copilot. É sempre inspirador ver conteúdos que ajudam a comunidade a entender melhor as ferramentas que utilizamos no dia a dia.

Sua abordagem empática e detalhada ao explorar os obstáculos enfrentados e as possíveis soluções demonstra um grande cuidado em compartilhar conhecimento de forma acessível e útil. É esse tipo de contribuição que fortalece nossa comunidade e nos ajuda a crescer juntos!

Mas e aí, qual foi o maior aprendizado que você teve ao explorar o GitHub Copilot? Tenho certeza de que muitos leitores vão se beneficiar ainda mais com suas reflexões!