image

Bootcamps ilimitados + curso de inglês

80
%OFF
Article image
Carlos CGS
Carlos CGS14/04/2025 08:29
Compartilhe
Microsoft Certification Challenge #3 DP-100Recomendados para vocêMicrosoft Certification Challenge #3 DP-100

#15 - 🛠 Exemplos de Uso de Funções em Python com Aplicações Práticas

    🌌 Projeto CodeVerse Python - #15/2025

    Fala, galera dev! ⚡

    No artigo anterior #14, falamos sobre o conceito de funções em Python e como elas são essenciais para organizar o código. Agora, vamos dar um passo além e explorar exemplos práticos do uso de funções no dia a dia como desenvolvedores! 💡

    Seja para automatizar tarefas, processar dados complexos ou mesmo construir projetos como o J.A.R.V.I.S., o qual iremos recriar nos proximos artigos, o uso eficiente de funções nos ajuda a escrever código mais limpo, reutilizável e fáceis de manter.

    Neste artigo, vamos relembrar a importância das funções e como elas podem nos ajudar de diversas formas, como:

    Automatizar tarefas repetitivas com poucas linhas de código;

    ✅ Manipular dados complexos de maneira eficiente;

    ✅ Utilizar recursividade, um conceito poderoso onde a função chama a si mesma para resolver problemas complexos;

    ✅ Aplicar funções diretamente no desenvolvimento do nosso projeto J.A.R.V.I.S.;

    Vamos nessa? 🚀

    ________________________________________________________________________________________________________________________________________________

    🏠 1. Organizando código com funções

    Quando escrevemos programas maiores, muitas vezes precisamos exibir mensagens em diversos pontos do código. Em vez de usar o comando print() repetidamente ou algum outro bloco de código mais complexo, podemos criar uma função para organizar melhor essa tarefa.

    Imagine que você está desenvolvendo um sistema que precisa dar feedback ao usuário em diferentes momentos. Escrever print() toda vez pode deixar o código confuso e repetitivo. Criar uma função para isso torna tudo mais organizado e fácil de modificar depois. Além disso, caso precisemos mudar o formato da mensagem, basta alterar a função em um único lugar, evitando retrabalho.

    Vamos ver um exemplo:

    # Função para exibir mensagens personalizadas
    def exibir_mensagem(texto):
      print(f"🔹 {texto}")
    
    exibir_mensagem("Bem-vindo ao CodeVerse Python!")
    exibir_mensagem("Aprender funções vai tornar seu código mais organizado!")
    

    🔍 Por que usar funções aqui?

    • Evita repetição de código (DRY - Don't Repeat Yourself).
    • Facilita a manutenção: se precisar mudar o formato da mensagem, alteramos apenas na função, não precisamos acessar cada parte do código, alterando linha por linha, além de ser fácil entende ro significado das funções, pois somos nós que definimos os nomes delas, sendo sempre de forma fácil, objetiva e simples, usando verbos que indicam ações que são tomadas quando a função é executada.

    ________________________________________________________________________________________________________________________________________________

    🔁 2. Recursividade

    Recursividade ocorre quando uma função chama a si mesma para resolver um problema. Esse conceito é útil para cálculos matemáticos, algoritmos de busca e manipulação de estruturas de dados como árvores e grafos.

    Vamos ver um exemplo clássico: calcular o fatorial de um número.

    # Função recursiva para calcular o fatorial
    def fatorial(n):
      if n == 1:
          return 1
      return n * fatorial(n - 1)
    
    print(f"Fatorial de 5: {fatorial(5)}")
    

    🔍 Vantagens:

    • Facilita a resolução de problemas que podem ser divididos em subproblemas menores.
    • Torna o código mais elegante e intuitivo para certos cenários.

    ⚠️ Cuidado: Se não houver um caso base para interromper a recursão, o programa pode entrar em um loop infinito, no caso o caso base do exemplo axima é o n ser igual a 1.

    ________________________________________________________________________________________________________________________________________________

    📊 3. Manipulação de Dados Avançada

    Em projetos reais, frequentemente lidamos com grandes volumes de dados, como informações de alunos, vendas, registros de sensores, entre outros. Para tornar a análise mais eficiente, podemos usar funções que automatizam tarefas repetitivas e reduzem a quantidade de código.

    Exemplo: Analisando o Desempenho de Alunos

    Imagine que temos um conjunto de dados de alunos, contendo seus nomes e notas. Vamos criar funções para:

    ✅ Calcular a média das notas.

    ✅ Determinar a situação do aluno (Aprovado, Recuperação ou Reprovado).

    ✅ Filtrar alunos aprovados e reprovados automaticamente.

    # Dados dos alunos (nome e notas)
    alunos = [
      {"nome": "Carlos", "notas": [8.5, 9.0, 7.5, 10.0]},
      {"nome": "Ana", "notas": [5.0, 6.5, 4.0, 6.0]},
      {"nome": "Bruno", "notas": [3.5, 4.0, 2.5, 5.0]},
      {"nome": "Mariana", "notas": [9.0, 9.5, 10.0, 8.5]},
    ]
    
    # Função para calcular a média
    def calcular_media(notas):
      return sum(notas) / len(notas)
    
    # Função para determinar a situação do aluno
    def determinar_situacao(media):
      if media >= 7.0:
          return "Aprovado"
      elif media >= 5.0:
          return "Recuperação"
      else:
          return "Reprovado"
    
    # Função para processar os alunos e gerar um relatório
    def gerar_relatorio(alunos):
      resultado = []
      for aluno in alunos:
          media = calcular_media(aluno["notas"])
          situacao = determinar_situacao(media)
          resultado.append({"nome": aluno["nome"], "média": media, "situação": situacao})
      return resultado
    
    # Executando o relatório
    relatorio = gerar_relatorio(alunos)
    
    # Exibir os resultados formatados
    for aluno in relatorio:
      print(f"{aluno['nome']}: Média {aluno['média']:.2f} - {aluno['situação']}") 
    

    🔍 Vantagens

    Código reutilizável: Cada função tem uma única responsabilidade, facilitando sua reutilização em outros projetos. ✅ Código mais curto e organizado: Evitamos repetir lógica ao encapsular as operações dentro de funções. ✅ Facilidade de manutenção: Se precisarmos alterar as regras de aprovação, basta modificar a função determinar_situacao(). ✅ Escalabilidade: Podemos adicionar mais alunos sem precisar modificar a lógica principal.

    📌 Mas calma, vou explicar melhor todo o código acima:

    Nosso código tem como objetivo processar uma lista de alunos e calcular sua média de notas, além de determinar se cada um foi aprovado, ficou de recuperação ou foi reprovado, então vamos por a mão na massa e explicar parte a parte que você entenda todo o código e que compreenda a facilidade que as funções trazem para automatizar e enxugar nosso código!

    1️⃣ Criando os dados dos alunos:

    # Dados dos alunos (nome e notas)
    alunos = [
      {"nome": "Carlos", "notas": [8.5, 9.0, 7.5, 10.0]},
      {"nome": "Ana", "notas": [5.0, 6.5, 4.0, 6.0]},
      {"nome": "Bruno", "notas": [3.5, 4.0, 2.5, 5.0]},
      {"nome": "Mariana", "notas": [9.0, 9.5, 10.0, 8.5]},
    ]
    

    🔎 O que está acontecendo aqui?

    • Criamos uma lista chamada alunos que contém um conjunto de dicionários.
    • Cada dicionário representa um aluno e contém:

    -- "nome": O nome do aluno.

    -- "notas": Uma lista com as notas desse aluno.

    • Exemplo: O aluno Carlos tem as notas [8.5, 9.0, 7.5, 10.0].

    2️⃣ Função para calcular a média das notas:

    # Função para calcular a média
    def calcular_media(notas):
      return sum(notas) / len(notas)
    

    🔎 O que está acontecendo aqui?

    • Criamos uma função chamada calcular_media(notas) que recebe uma lista de notas.
    • A função faz duas coisas:

    -- Soma todas as notas usando sum(notas).

    -- Divide pela quantidade de notas usando len(notas).

    📌 Exemplo: Se passarmos as notas [8.5, 9.0, 7.5, 10.0], a função calcula e retorna 8.75.

    image

    3️⃣ Função para determinar a situação do aluno:

    # Função para determinar a situação do aluno
    def determinar_situacao(media):
      if media >= 7.0:
          return "Aprovado"
      elif media >= 5.0:
          return "Recuperação"
      else:
          return "Reprovado" 
    

    🔎 O que está acontecendo aqui?

    • Criamos a função determinar_situacao(media), que recebe a média de um aluno e retorna sua situação.
    • Usamos estruturas condicionais (if e elif) para decidir o resultado:

    -- Se a média for 7.0 ou mais, retorna "Aprovado".

    -- Se a média for entre 5.0 e 6.9, retorna "Recuperação".

    -- Se a média for menor que 5.0, retorna "Reprovado".

    📌 Exemplo:

    --- Se a média for 8.75, a função retorna "Aprovado".

    --- Se a média for 5.5, a função retorna "Recuperação".

    --- Se a média for 3.5, a função retorna "Reprovado".

    4️⃣ Função para processar todos os alunos e gerar um relatório:

    # Função para processar os alunos e gerar um relatório
    def gerar_relatorio(alunos):
      resultado = []  # Criamos uma lista vazia para armazenar os resultados
      for aluno in alunos:  # Percorremos a lista de alunos
          media = calcular_media(aluno["notas"])  # Calculamos a média das notas do aluno
          situacao = determinar_situacao(media)  # Determinamos a situação do aluno
          resultado.append({"nome": aluno["nome"], "média": media, "situação": situacao})  # Adicionamos o resultado à lista
      return resultado  # Retornamos a lista com os resultados
    

    🔎 O que está acontecendo aqui?

    • Criamos a função gerar_relatorio(alunos), que recebe a lista de alunos.
    • Dentro dela:

    -- Criamos uma lista vazia resultado para armazenar os dados finais.

    -- Usamos um loop for para percorrer cada aluno da lista alunos.

    • Para cada aluno:

    --- Pegamos suas notas e chamamos calcular_media(aluno["notas"]).

    --- Pegamos essa média e chamamos determinar_situacao(media).

    --- Criamos um novo dicionário com nome, média e situação do aluno e adicionamos à lista resultado.

    • Por fim, retornamos a lista resultado, que contém as informações processadas.

    📌 Exemplo de saída da função:

    [
      {"nome": "Carlos", "média": 8.75, "situação": "Aprovado"},
      {"nome": "Ana", "média": 5.25, "situação": "Recuperação"},
      {"nome": "Bruno", "média": 3.75, "situação": "Reprovado"},
      {"nome": "Mariana", "média": 9.25, "situação": "Aprovado"},
    ]
    

    5️⃣ Executando o relatório e exibindo os resultados:

    # Executando o relatório
    relatorio = gerar_relatorio(alunos)
    
    # Exibir os resultados formatados
    for aluno in relatorio:
      print(f"{aluno['nome']}: Média {aluno['média']:.2f} - {aluno['situação']}")
    

    🔎 O que está acontecendo aqui?

    • Chamamos gerar_relatorio(alunos) e guardamos o resultado na variável relatorio.
    • Depois, usamos um loop for para percorrer a lista relatorio.
    • Para cada aluno no relatório, imprimimos:

    --- Seu nome.

    --- Sua média formatada com duas casas decimais ({aluno['média']:.2f}).

    --- Sua situação (Aprovado, Recuperação ou Reprovado).

    📌 Exemplo de saída no terminal:

    Carlos: Média 8.75 - Aprovado
    Ana: Média 5.25 - Recuperação
    Bruno: Média 3.75 - Reprovado
    Mariana: Média 9.25 - Aprovado
    

    🎯 Recapitulando

    Neste código, aprendemos o poder das funções, e vimos como usa-las para:

    Criar e percorrer uma lista de dicionários para armazenar alunos e notas.

    Criar funções reutilizáveis para calcular a média e determinar a situação do aluno.

    Utilizar loops e listas para processar os dados de forma automática.

    Gerar e exibir um relatório organizado com os resultados.

    Esse é um exemplo real de como as funções nos ajudam a reduzir código repetitivo, deixando tudo mais organizado e fácil de entender! 🚀

    O que achou? Alguma parte ficou confusa? Tentei explicar de uma maneira bem simples e fácil por mais que o código seja grande e complexo.

    Neste exemplo minha intenção não foi assutar, mas sim mostrar como as funções são úteis no nosso dia a dia. Se precisar de ajuda para entender alguma parte deixa um comentário ou me chama no privado!😊

    ________________________________________________________________________________________________________________________________________________

    🧠 4. Funções aplicadas ao nosso projeto J.A.R.V.I.S.

    Para finalizar usamos funções no projeto J.A.R.V.I.S., pois precisaremos de várias funções para processar comandos de voz, buscar informações na web e interagir com o usuário, modularizando todo nosso código em funções.

    Um exemplo básico seria criar uma função para simular uma resposta do assistente virtual:

    # Função para simular resposta do J.A.R.V.I.S.
    def jarvis_responder(comando):
      respostas = {
          "olá": "Olá! Como posso te ajudar hoje?",
          "clima": "O clima hoje está ensolarado com 25°C.",
          "horas": "Agora são 14h30.",
      }
      return respostas.get(comando.lower(), "Desculpe, não entendi o comando.")
    
    # Testando a função
    print(jarvis_responder("olá"))
    print(jarvis_responder("clima"))
    

    🔍 Por que isso é útil?

    • Permite expandir as funcionalidades do assistente de forma organizada.
    • Podemos adicionar novos comandos sem alterar toda a estrutura do código.

    ________________________________________________________________________________________________________________________________________________

    🎯 Concluindo...

    As funções em Python desempenham um papel essencial na organização e eficiência do código. Elas permitem a reutilização de trechos de código, facilitam a manutenção e tornam os programas mais legíveis e estruturados. Como vimos, é possível utilizar funções para diversas finalidades, desde cálculos simples até a manipulação avançada de dados.

    Para se tornar um programador mais produtivo, é essencial dominar a criação e o uso de funções em Python. Continue explorando, testando e aplicando esse conceito em seus projetos para aprimorar suas habilidades na linguagem! Afinal é com a prática que chegamos na perfeição, não exsitem meio termo ou fórmula mágica para aprender a programar, o que faz a diferença é o tempo investido no estudo e prática dos conceitos aprendidos!

    No próximo artigo, vamos criar um validador de CPF, aplicando conhecimentos de funções e outros conceitos aprendidos até então, explorando duas formas de criar o mesmo código. 💡

    Curtiu? Me acompanhe no LinkedIn, confira meu GitHub e fique por dentro das novidades do CodeVerse Python 2025! 🚀

    Compartilhe
    Recomendados para você
    Microsoft Azure Cloud Native
    XP Inc. - Cloud com Inteligência Artificial
    Microsoft AI for Tech - Azure Databricks
    Comentários (2)
    DIO Community
    DIO Community - 14/04/2025 14:44

    Excelente trabalho, Carlos! Você abordou de forma clara e envolvente o uso de funções em Python, destacando a importância de organizar o código e torná-lo mais reutilizável e eficiente. A explicação de como evitar a repetição de código com funções e a utilização de recursividade foi muito bem estruturada, permitindo que até iniciantes compreendam conceitos mais avançados de forma prática.

    Além disso, o exemplo prático com o cálculo da média e a situação dos alunos foi uma excelente maneira de mostrar como funções podem ser usadas para manipular dados de forma simples e eficiente. O projeto J.A.R.V.I.S., que você mencionou ao final, também é uma aplicação prática que com certeza motivará seus leitores a seguir explorando e aplicando funções.

    Você tem algum conselho para quem está começando a usar funções em projetos mais complexos, como o J.A.R.V.I.S., para garantir que o código permaneça organizado e de fácil manutenção à medida que o projeto cresce?

    Carlos CGS
    Carlos CGS - 14/04/2025 08:33

    Obs.: Copiei esta minha publicação do meu LinkedIn, e por isso veio com essa formatação com o texto com alguns itens em roxo!

    Recomendados para vocêMicrosoft Certification Challenge #3 DP-100