🎯 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:
Materiais (parâmetros)
Máquina (função)
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
⚙️ Criando Nossa Primeira Função
A Anatomia de uma Função
Vamos dissecar uma função para entender cada parte!
🎉 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
🎁 Função que Retorna
def somar(a, b):
resultado = a + b
return resultado
Devolve o valor para usar depois!
🌟 Por que usar return?
🎯 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:
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:
F = (C × 9/5) + 32
C = (F - 32) × 5/9
K = C + 273.15
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:
Crie funções para calcular juros simples e compostos
Função que gera senhas aleatórias com diferentes níveis de segurança
Função que calcula idade exata em anos, meses e dias
Crie funções para jogos simples: adivinhação, pedra-papel-tesoura, etc.