Criando Nossos Próprios Comandos

Aula 06 - Funções Personalizadas

🔧 Funções ⏱️ 90 minutos 🎯 def

🎯 Objetivos da Aula

⚙️

Funções

Criar comandos personalizados

📥

Parâmetros

Passar dados para funções

📤

Return

Retornar valores

🧮

Projeto

Calculadora com funções

📚 Conteúdo da Aula

� A Fábrica de Comandos

O Que São Funções?

Imagine uma fábrica que recebe materiais e produz produtos específicos. As funções são como máquinas especiais!

🏭 Analogia da Fábrica:
📥
Entrada

Materiais (parâmetros)

➡️
⚙️
Processamento

Máquina (função)

➡️
📤
Saída

Produto (return)

🤔 Funções que Já Conhecemos:
print()

Exibe texto na tela

input()

Recebe dados do usuário

len()

Conta itens em uma lista

range()

Gera sequência de números

💡 Conceito-chave: Funções são como receitas reutilizáveis! Uma vez criadas, podemos usá-las quantas vezes quisermos!

⚙️ Criando Nossa Primeira Função

A Anatomia de uma Função

Vamos dissecar uma função para entender cada parte!

def saudar () :
1. Definição
print("Olá! Seja bem-vindo!")
2. Corpo da função
1. def: Palavra-chave que diz "vou criar uma função"
2. saudar: Nome da nossa função (escolhemos nós!)
3. (): Parênteses onde vão os parâmetros
4. :: Dois pontos indicam início do bloco
5. Indentação: Código dentro da função
🎉 Primeira Função em Ação:
# Criando nossa primeira função
def saudar():
    print("🎉 Olá! Seja bem-vindo!")
    print("✨ Esta é minha primeira função!")

# Chamando a função (executando)
print("Antes de chamar a função")
saudar()  # Aqui a mágica acontece!
print("Depois de chamar a função")

# Podemos chamar quantas vezes quisermos!
saudar()
saudar()
💡 Dica Importante:

Criar a função (def) é como escrever uma receita. Chamar a função é como seguir a receita!

📥 Parâmetros - Passando Informações

Tornando Nossas Funções Mais Inteligentes

Parâmetros são como "ingredientes" que passamos para nossa receita!

🔴 Função Simples (sem parâmetros)
def cumprimentar():
    print("Olá!")

Sempre faz a mesma coisa

⬇️
🟡 Função com 1 Parâmetro
def cumprimentar(nome):
    print(f"Olá, {nome}!")

Personalizada para cada pessoa

⬇️
🟢 Função com Múltiplos Parâmetros
def cumprimentar(nome, idade):
    print(f"Olá, {nome}! Você tem {idade} anos.")

Ainda mais informações!

🧪 Testando Parâmetros:
# Função com diferentes parâmetros
def apresentar_pessoa(nome, idade, cidade):
    print(f"👋 Olá! Meu nome é {nome}")
    print(f"🎂 Eu tenho {idade} anos")
    print(f"🏠 Moro em {cidade}")
    print("-" * 30)

# Chamando com diferentes valores
apresentar_pessoa("Ana", 12, "São Paulo")
apresentar_pessoa("João", 10, "Rio de Janeiro")
apresentar_pessoa("Maria", 11, "Belo Horizonte")

# Função com parâmetros padrão
def saudar_com_hora(nome, periodo="dia"):
    if periodo == "manhã":
        print(f"🌅 Bom dia, {nome}!")
    elif periodo == "tarde":
        print(f"☀️ Boa tarde, {nome}!")
    elif periodo == "noite":
        print(f"🌙 Boa noite, {nome}!")
    else:
        print(f"👋 Olá, {nome}!")

# Testando parâmetros padrão
saudar_com_hora("Pedro")  # Usa valor padrão
saudar_com_hora("Pedro", "manhã")  # Usa valor específico
📏 Regras dos Parâmetros:
  • Ordem importa: primeiro parâmetro → primeiro argumento
  • Quantidade: deve coincidir (ou usar valores padrão)
  • Nomes: são como variáveis temporárias

📤 Return - Devolvendo Resultados

Fazendo Funções Que Produzem Valores

Até agora nossas funções só "falavam". Agora vamos fazer funções que "produzem" resultados!

📢 Função que Apenas Exibe
def somar_e_mostrar(a, b):
    resultado = a + b
    print(f"Resultado: {resultado}")

Só mostra, não "devolve" o valor

VS
🎁 Função que Retorna
def somar(a, b):
    resultado = a + b
    return resultado

Devolve o valor para usar depois!

🌟 Por que usar return?
🔄 Reutilizar resultado
🧮 Fazer cálculos complexos
🔗 Combinar funções
💾 Armazenar em variáveis
🎯 Return em Ação:
# Funções que retornam valores
def calcular_area_retangulo(largura, altura):
    area = largura * altura
    return area

def calcular_preco_com_desconto(preco, desconto_percent):
    desconto = preco * (desconto_percent / 100)
    preco_final = preco - desconto
    return preco_final

def eh_par(numero):
    if numero % 2 == 0:
        return True
    else:
        return False

# Usando os valores retornados
area_sala = calcular_area_retangulo(5, 4)
print(f"📐 Área da sala: {area_sala} m²")

preco_original = 100
preco_com_desconto = calcular_preco_com_desconto(preco_original, 20)
print(f"💰 Preço original: R$ {preco_original}")
print(f"💸 Preço com desconto: R$ {preco_com_desconto}")

numero = 8
if eh_par(numero):
    print(f"✅ {numero} é par!")
else:
    print(f"❌ {numero} é ímpar!")

# Combinando funções!
area1 = calcular_area_retangulo(3, 4)
area2 = calcular_area_retangulo(5, 6)
area_total = area1 + area2
print(f"📊 Área total: {area_total} m²")
📜 Regras do Return:
  • Uma saída: quando executa return, a função para
  • Qualquer tipo: pode retornar números, texto, listas, etc.
  • Opcional: nem toda função precisa de return
  • None: funções sem return retornam None automaticamente

🧮 Projeto - Calculadora com Funções

🚀 Hora de Praticar!

Vamos criar uma calculadora profissional usando tudo que aprendemos sobre funções!

🌟 Por que usar funções na calculadora?
❌ Sem Funções
  • Código repetitivo
  • Difícil de manter
  • Erro em um lugar = problema em todo lugar
✅ Com Funções
  • Código organizado
  • Fácil de testar
  • Reutilizável
  • Fácil de adicionar novas operações
🏗️ Estrutura do Projeto:
1 Criar funções para cada operação matemática
2 Criar função para exibir menu
3 Criar função para obter números do usuário
4 Criar função principal que coordena tudo
Código Completo:
# 🧮 CALCULADORA PROFISSIONAL COM FUNÇÕES 🧮

def somar(a, b):
    """Soma dois números e retorna o resultado"""
    return a + b

def subtrair(a, b):
    """Subtrai dois números e retorna o resultado"""
    return a - b

def multiplicar(a, b):
    """Multiplica dois números e retorna o resultado"""
    return a * b

def dividir(a, b):
    """Divide dois números e retorna o resultado ou erro"""
    if b != 0:
        return a / b
    else:
        return "❌ Erro: Divisão por zero!"

def potencia(a, b):
    """Calcula a potência de um número"""
    return a ** b

def raiz_quadrada(a):
    """Calcula a raiz quadrada de um número"""
    if a >= 0:
        return a ** 0.5
    else:
        return "❌ Erro: Raiz de número negativo!"

def mostrar_menu():
    """Exibe o menu de opções"""
    print("\n" + "="*40)
    print("🧮 CALCULADORA SUPER PODEROSA 🧮")
    print("="*40)
    print("1. ➕ Somar")
    print("2. ➖ Subtrair") 
    print("3. ✖️  Multiplicar")
    print("4. ➗ Dividir")
    print("5. 🔢 Potência (a^b)")
    print("6. √  Raiz quadrada")
    print("7. 🚪 Sair")
    print("="*40)

def obter_numero(mensagem):
    """Obtém um número do usuário com tratamento de erro"""
    while True:
        try:
            numero = float(input(mensagem))
            return numero
        except ValueError:
            print("❌ Por favor, digite um número válido!")

def obter_dois_numeros():
    """Obtém dois números do usuário"""
    num1 = obter_numero("Digite o primeiro número: ")
    num2 = obter_numero("Digite o segundo número: ")
    return num1, num2

def calculadora():
    """Função principal que coordena toda a calculadora"""
    print("🎉 Bem-vindo à Calculadora Super Poderosa!")
    
    while True:
        mostrar_menu()
        
        try:
            opcao = int(input("Escolha uma opção (1-7): "))
        except ValueError:
            print("❌ Digite apenas números de 1 a 7!")
            continue
        
        if opcao == 1:  # Somar
            num1, num2 = obter_dois_numeros()
            resultado = somar(num1, num2)
            print(f"🎯 {num1} + {num2} = {resultado}")
            
        elif opcao == 2:  # Subtrair
            num1, num2 = obter_dois_numeros()
            resultado = subtrair(num1, num2)
            print(f"🎯 {num1} - {num2} = {resultado}")
            
        elif opcao == 3:  # Multiplicar
            num1, num2 = obter_dois_numeros()
            resultado = multiplicar(num1, num2)
            print(f"🎯 {num1} × {num2} = {resultado}")
            
        elif opcao == 4:  # Dividir
            num1, num2 = obter_dois_numeros()
            resultado = dividir(num1, num2)
            print(f"🎯 {num1} ÷ {num2} = {resultado}")
            
        elif opcao == 5:  # Potência
            base = obter_numero("Digite a base: ")
            expoente = obter_numero("Digite o expoente: ")
            resultado = potencia(base, expoente)
            print(f"🎯 {base}^{expoente} = {resultado}")
            
        elif opcao == 6:  # Raiz quadrada
            num = obter_numero("Digite o número: ")
            resultado = raiz_quadrada(num)
            print(f"🎯 √{num} = {resultado}")
            
        elif opcao == 7:  # Sair
            print("👋 Obrigado por usar a Calculadora!")
            print("🎓 Você dominou as funções!")
            break
            
        else:
            print("❌ Opção inválida! Escolha de 1 a 7.")
        
        # Perguntar se quer continuar
        continuar = input("\nDeseja fazer outro cálculo? (s/n): ").lower()
        if continuar != 's':
            print("👋 Tchau! Volte sempre!")
            break

# Iniciando a calculadora
if __name__ == "__main__":
    calculadora()
🎨 Desafios de Melhoria:
  • 📊 Adicione função para calcular média de vários números
  • 🎯 Crie função para calcular percentual
  • 📐 Adicione funções para área e perímetro de figuras
  • 💾 Crie função para salvar histórico de cálculos
  • 🎨 Adicione função para converter unidades (metros, quilômetros, etc.)

🏠 Desafio para Casa

🌡️ Desafio Principal: Conversor de Temperatura

Crie um programa completo com funções para converter temperaturas entre Celsius, Fahrenheit e Kelvin!

📐 Fórmulas de Conversão:
Celsius → Fahrenheit F = (C × 9/5) + 32
Fahrenheit → Celsius C = (F - 32) × 5/9
Celsius → Kelvin K = C + 273.15
Kelvin → Celsius C = K - 273.15
📋 Requisitos do Programa:
  • 🔧 Criar função para cada conversão
  • 📊 Menu com todas as opções de conversão
  • 🔍 Validação de temperaturas (ex: Kelvin não pode ser negativo)
  • 💡 Informações interessantes sobre as temperaturas
  • 🔄 Permitir múltiplas conversões
🏗️ Estrutura Inicial:
def celsius_para_fahrenheit(celsius):
    """Converte Celsius para Fahrenheit"""
    # Sua implementação aqui
    pass

def fahrenheit_para_celsius(fahrenheit):
    """Converte Fahrenheit para Celsius"""
    # Sua implementação aqui
    pass

def celsius_para_kelvin(celsius):
    """Converte Celsius para Kelvin"""
    # Sua implementação aqui
    pass

# Continue criando as outras funções...

def mostrar_menu():
    """Mostra o menu de opções"""
    print("🌡️ CONVERSOR DE TEMPERATURA 🌡️")
    print("1. Celsius → Fahrenheit")
    print("2. Fahrenheit → Celsius")
    # Complete o menu...

def conversor_temperatura():
    """Função principal do programa"""
    # Sua lógica principal aqui
    pass

# Testando o programa
conversor_temperatura()
💡 Dicas Importantes:
  • Use docstrings (""") para documentar suas funções
  • Teste cada função separadamente antes de juntar tudo
  • Adicione validações para entradas inválidas
  • Use nomes descritivos para suas funções e variáveis
🎯 Desafios Bônus:
🏦 Calculadora de Juros:

Crie funções para calcular juros simples e compostos

🎲 Gerador de Senhas:

Função que gera senhas aleatórias com diferentes níveis de segurança

📅 Calculadora de Idade:

Função que calcula idade exata em anos, meses e dias

🎮 Mini Jogos:

Crie funções para jogos simples: adivinhação, pedra-papel-tesoura, etc.

🔮 Próxima Aula:

Na Aula 7, vamos criar jogos interativos! Será nossa primeira aplicação completa e divertida! 🎮✨