PARADIGMAS DE LINGUAGENS DE
PROGRAMAÇÃO EM PYTHON
FUNDAMENTOS DOS
SUBPROGRAMAS
Me. Max Castor Rodrigues Junior
madeinmax@[Link]
Compreendendo o problema
• Situação: Desenvolver um ERP...
– Contabilidade, RH, Suprimentos, Patrimônio....
– Dá pra fazer isso em um único bloco de Código?
Objetivos
• Compreender os módulos do Python
• Compreender as funções no Python
• Reforçar a ideia de escopos em Python
• Capacitar para a criação de funções em
Python
MÓDULOS
Módulos em Python
• Módulos são conjuntos de funções prontas
– “Pacotes”
• Já os usamos: import
– math [Link]
[Link]
– string ...
• Podemos criar os nossos...!
– Mas precisamos aprender a criar funções antes!
SUBPROGRAMAS:
FUNÇÕES SIMPLES
Funções Simples
• Situação: imprimir 5x o seguinte texto:
Sistema de Impressão v.1.0, (c) Max Castor
• Um jeito de fazer seria usar vários “print”:
[Link]
# Imprime 5x uma mensagem
print (“Sistema de Impressão v.1.0, (c) Max Castor”)
print (“Sistema de Impressão v.1.0, (c) Max Castor”)
print (“Sistema de Impressão v.1.0, (c) Max Castor”)
print (“Sistema de Impressão v.1.0, (c) Max Castor”)
print (“Sistema de Impressão v.1.0, (c) Max Castor”)
Funções Simples
• Será que não tem um jeito mais simples?
– Há vários!
• Um deles: definir uma função
[Link]
# Imprime 5x uma mensagem
def mostra_mensagem():
print (“Sistema de Impressão v.1.0, (c) Max Castor”)
Vamos
experimentar?
Funções Simples
• Será que não tem um jeito mais simples?
– Há vários!
• Um deles: definir uma função
[Link]
# Imprime 5x uma mensagem
def mostra_mensagem():
print (“Sistema de Impressão v.1.0, (c) Max Castor”)
mostra_mensagem() “chamar” a função:
Solicitar ao computador que a execute
Observe o uso dos parênteses!
Funções Simples
• Será que não tem um jeito mais simples?
– Há vários!
• Um deles: definir uma função
[Link]
# Imprime 5x uma mensagem
def mostra_mensagem():
print (“Sistema de Impressão v.1.0, (c) Max Castor”)
mostra_mensagem()
mostra_mensagem()
mostra_mensagem()
mostra_mensagem()
mostra_mensagem() # Repita quantas vezes quiser!
Funções Simples
• Será que não tem um jeito mais simples?
– Há vários!
• Um deles: definir uma função
[Link]
# Imprime 5x uma mensagem
def mostra_mensagem():
print (“Sistema de Impressão v.1.0, (c) Max Castor”)
mostra_mensagem()
mostra_mensagem() Declaração da Função:
mostra_mensagem()
define o nome e o
mostra_mensagem()
mostra_mensagem() # Repitacqóudaingtoasdvaezfeusnqçuãisoer!
Funções Simples
• Será que não tem um jeito mais simples?
– Há vários!
• Um deles: definir uma função
[Link]
# Imprime 5x uma mensagem
def mostra_mensagem():
print (“Sistema de Impressão v.1.0, (c) Max Castor”)
mostra_mensagem()
mostra_mensagem() As funções devem ser
mostra_mensagem() declaradas antes de
mostra_mensagem()
serem chamadas!
mostra_mensagem() # Repita quantas vezes quiser!
Outro Exemplo de Função
• Crie a função para a assinatura do e-mail:
Atenciosamente,
Prof. Max Castor
madeinmax@[Link]
[Link]
# Imprime a assinatura do e-mail
def assinar():
print (“Atenciosamente,”)
print (“Prof. Max Castor ”)
print(“madeinmax@[Link]”)
assinar()
Experimentemos!
NOSSO PRIMEIRO
MÓDULO
Criando um Módulo
• Crie o arquivo abaixo
[Link] Nome do Módulo
# Imprime a assinatura do e-mail
def assinar(): Nome da Função
print (“Atenciosamente,”)
print (“Prof. Max Castor”)
print(“madeinmax@[Link]“)
Usando um Módulo
• Crie o programa abaixo e execute
[Link]
import mensagem
# Usa o módulo “[Link]”
print (“Programa de demonstração do uso de um módulo”)
[Link]()
Tenho que escrever
tudo isso?
Apelido de um Módulo
• Crie o programa abaixo e execute
[Link]
import mensagem as msg
# Usa o módulo “[Link]”
print (“Programa de demonstração do uso de um módulo”)
[Link]()
Apelido do Módulo
Módulos Mais Úteis
• Como tornar nossos módulos mais úteis?
– Criando funções mais úteis!
• Como criar funções mais úteis?
SUBPROGRAMAS:
FUNÇÕES COM
PARÂMETROS
Funções com Parâmetro
• Até agora, funções funcionam sempre igual!
– Por exemplo: assinatura de um único professor
Atenciosamente,
Prof. Max Castor assinar()
• Como fazer função de assinatura genérica?
Atenciosamente,
Prof. [nome]
assinar(“Max Castor”)
Funções com Parâmetro
• Crie a função para a assinatura do e-mail:
Atenciosamente,
Prof. [nome]
[Link]
# Imprime a assinatura do e-mail genérica
def assinar(nome):
print (“Atenciosamente,”)
print (“Prof.”, nome)
assinar()
Funcionou?
Funções com Parâmetro
• Crie a função para a assinatura do e-mail:
Atenciosamente,
Prof. [nome]
[Link]
# Imprime a assinatura do e-mail genérica
def assinar(nome):
print (“Atenciosamente,”)
print (“Prof.”, nome)
assinar(“Max Castor”)
E agora?
Funções com Vários Parâmetros
• Crie a função para a assinatura completa:
Atenciosamente,
Prof. [nome]
[e-mail]
[Link]
# Imprime a assinatura do e-mail genérica completa
def assinar(nome, email):
print (“Atenciosamente,”)
print (“Prof.”, nome)
print (email)
Funcionou?
assinar(“Max”, “madeinmax@[Link]”)
Funções com Parâmetros
• Função para calcular IMC = P/A2
[Link]
# Calcula e imprime IMC
def imc(p, a):
imc = p/a**2
print(“O IMC é:”, imc)
# Testa função
imc(50, 1.60)
imc(75, 1.70)
imc(85, 1.75)
Funções com Parâmetros
• Calcular o volume de um cone
[Link]
# Imprime volume do cone
def volume_cone(r, h):
v = (1/3) * 3.1415 * r**2 * h
print(“O colume do cone é: %.2f” %(v))
# Testa função
volume_cone(10, 2)
Ou seja: criar uma função é
volume_cone(5, 3) ensinar uma tarefa nova ao
volume_cone(2.5, 10.2) computador... E dar um
nome para ela!
SUBPROGRAMAS:
FUNÇÕES COM
RETORNO
Funções com Retorno
• Vimos: fazer conta e mostrar o resultado
– Posso usar o resultado depois?
– Vamos testar?
[Link]
# Calcula área do círculo
def area_circulo(r): Funcionou?
area = 3.141592 * r**2
# Testa função As variáveis que existem
area_circulo(2) na função são diferentes
print(“A área do círculo é:”, area) das que existem no
programa principal!
Funções com Retorno
• Vimos: fazer conta e mostrar o resultado
– Posso usar o resultado depois?
– Como resolver?
[Link]
# Calcula área do círculo
def area_circulo(r): Funcionou?
area = 3.141592 * r**2
return area
Return serve para
# Testa função “devolver” um valor de
a = area_circulo(2) uma função para o
print(“A área do círculo é:”, a) programa principal
Funções x Procedimentos
• Subprogramas retornam resultados... ou não.
– Alguns autores dão nomes diferentes
• Procedimentos (procedures)
– Quando não retorna um valor print(“...”)
• Funções (functions)
– Quando retorna um valor int(“...”)
input(“...”)
[Link](n)
RECORDANDO:
ESCOPO DE VARIÁVEIS
Escopo de Variáveis
• Variáveis diferentes podem ter mesmo nome
– Seu professor chama “Max”
– Com certeza você conhece mais algum “Max”
• Como diferenciar?
– Contexto (ou Escopo)!
• Na faculdade, “Max” é o professor
• Em sua casa, “Max” pode ser seu irmão
• Em Python, qual o “escopo”?
– Escopo principal (ou global, fora das funções)
– Escopo da função (ou local)
Exemplo de Escopo de Variáveis
• Vamos ver escopos na prática
[Link]
# Função
def aniversário(idade):
idade = idade + 1
# Programa principal
idade = 10
print(“A idade antes do aniversário:”, idade)
aniversário(idade)
print(“A idade depois do aniversário:”, idade)
Funcionou?
Exemplo de Escopo de Variáveis
• Vamos ver escopos na prática
[Link]
E agora?
# Função
def aniversário(idade):
idade = idade + 1
return transfere de um
return idade
escopo para o outro!
# Programa principal
idade = 10
print(“A idade antes do aniversário:”, idade)
idade = aniversário(idade)
print(“A idade depois do aniversário:”, idade)
EXEMPLO DE EXECUÇÃO:
SUBPROGRAMAS COM
RETORNO DE VALORES
Subprogramas com Retorno
• Vejamos como funciona o programa abaixo:
[Link]
# Função que lê nome do usuário
def leitura_de_nome():
pnome = input(“Por favor, digite seu primeiro nome: ”)
snome = input(“Por favor, digite seu sobrenome: ”)
nome = pnome + “ ” + snome
return nome
# Programa de Boas Vindas
print(“Programa Exemplo com Funções”)
print(“===========================”)
usuario = leitura_de_nome ()
print(“Bom dia,”, usuario, “!”)
Subprogramas com Retorno
• Vejamos como funciona o programa abaixo:
[Link]
# Função que lê nome do usuário
def leitura_de_nome():
pnome = input(“Por favor, digite seu primeiro nome: ”)
snome = input(“Por favor, digite seu sobrenome: ”)
nome = pnome + “ ” + snome
return nome
# Programa de Boas Vindas
print(“Programa Exemplo com Funções”)
print(“===========================”)
usuario = leitura_de_nome ()
print(“Bom dia,”, usuario, “!”)
Subprogramas com Retorno
• Vejamos como funciona o programa abaixo:
[Link]
# Função que lê nome do usuário
def leitura_de_nome():
pnome = input(“Por favor, digite seu primeiro nome: ”)
snome = input(“Por favor, digite seu sobrenome: ”)
nome = pnome + “ ” + snome
return nome
# Programa de Boas Vindas
print(“Programa Exemplo com Funções”)
print(“===========================”)
usuario = leitura_de_nome ()
print(“Bom dia,”, usuario, “!”)
Subprogramas com Retorno
• Vejamos como funciona o programa abaixo:
[Link]
# Função que lê nome do usuário
def leitura_de_nome():
pnome = input(“Por favor, digite seu primeiro nome: ”)
snome = input(“Por favor, digite seu sobrenome: ”)
nome = pnome + “ ” + snome
return nome
# Programa de Boas Vindas
print(“Programa Exemplo com Funções”)
print(“===========================”)
usuario = leitura_de_nome ()
print(“Bom dia,”, usuario, “!”)
Subprogramas com Retorno
• Vejamos como funciona o programa abaixo:
[Link]
# Função que lê nome do usuário
def leitura_de_nome():
pnome = input(“Por favor, digite seu primeiro nome: ”)
snome = input(“Por favor, digite seu sobrenome: ”)
nome = pnome + “ ” + snome
return nome
# Programa de Boas Vindas
print(“Programa Exemplo com Funções”)
print(“===========================”)
usuario = leitura_de_nome ()
print(“Bom dia,”, usuario, “!”)
Subprogramas com Retorno
• Vejamos como funciona o programa abaixo:
[Link]
# Função que lê nome do usuário
def leitura_de_nome():
pnome = input(“Por favor, digite seu primeiro nome: ”)
snome = input(“Por favor, digite seu sobrenome: ”)
nome = pnome + “ ” + snome
return nome
# Programa de Boas Vindas
print(“Programa Exemplo com Funções”)
print(“===========================”)
usuario = leitura_de_nome ()
print(“Bom dia,”, usuario, “!”)
Subprogramas com Retorno
• Vejamos como funciona o programa abaixo:
[Link]
# Função que lê nome do usuário
def leitura_de_nome():
pnome = input(“Por favor, digite seu primeiro nome: ”)
snome = input(“Por favor, digite seu sobrenome: ”)
nome = pnome + “ ” + snome
return nome
# Programa de Boas Vindas
print(“Programa Exemplo com Funções”)
print(“===========================”)
usuario = leitura_de_nome ()
print(“Bom dia,”, usuario, “!”)
Subprogramas com Retorno
• Vejamos como funciona o programa abaixo:
[Link]
# Função que lê nome do usuário
def leitura_de_nome():
pnome = input(“Por favor, digite seu primeiro nome: ”)
snome = input(“Por favor, digite seu sobrenome: ”)
nome = pnome + “ ” + snome
return nome
# Programa de Boas Vindas
print(“Programa Exemplo com Funções”)
print(“===========================”)
usuario = leitura_de_nome ()
print(“Bom dia,”, usuario, “!”)
RECURSÃO
Recursão
• Forma de implementação em que...
– Executa a si própria em determinadas situações
def minhaFuncao()
print(“Ah!)
minhaFuncao()
• Algumas coisas são mais simples assim
– Mas usualmente gastam mais memória!
• Exemplo?
Cálculo de Fatorial – Sem recursão
[Link]
# Cálculo de Fatorial sem Recursão
print(“Programa Fatorial sem Recursão”)
print(“===========================”)
n = int( input(“Digite um inteiro não negativo: ”))
fat = 1
for i in range (1, n+1):
fat = fat * i
print(“O fatorial de”, n, “é”, fat)
Cálculo de Fatorial – Com recursão
[Link]
# Cálculo de Fatorial com Recursão
def fatorial(n):
if n == 1:
return n
else:
return n * fatorial(n-1)
print(“Programa Fatorial com Recursão”)
print(“===========================”)
n = int( input(“Digite um inteiro não negativo: ”)
fat = fatorial(n)
print(“O fatorial de”, n, “é”, fat)
EXEMPLO ADICIONAL:
FUNÇÕES NA PRÁTICA
Criando Funções
• Passo 1: criar um programa que calcule e
imprima o perímetro de um círculo de raio 2
– P = 2∙π∙R
– π = 3,141592
Criando Funções
• Passo 2: transformar o cálculo em uma
função chamada perimetro
Criando Funções
• Passo 3: coloque a função perimetro dentro
de um módulo chamado figuras e crie um
programa chamado calculo que use a
função perímetro.
Criando Funções
• Passo 4: modificar a função perimetro para
que ela para que ela retorne o resultado, ao
invés de imprimi-lo
Criando Funções
• Passo 5: modificar a função perímetro para
que ela receba o raio do círculo como
parâmetro
– No programa calculo, chame a função com o
valor 2 para o raio
Criando Funções
• Passo 6: modificar a função perimetro para
que ela receba o raio do círculo como
parâmetro
ATIVIDADE
Atividade 1
• Faça uma função que calcule a área de um tapézio,
dados:
– Base maior
– Base menor
– Altura
• Lembrando que a área pode ser calculada por:
(𝑏𝑚𝑎𝑖𝑜𝑟 + 𝑏𝑚𝑒𝑛𝑜𝑟). 𝑎𝑙𝑡𝑢𝑟𝑎
𝑎𝑟𝑒𝑎 =
2
• O programa principal deve pedir os valores e usar
a função para calcular a área
Atividade 1
• Solução
[Link]
# Função que Calcula a Área do Trapézio
def area_trapezio(base_maior, base_menor, altura):
area = (base_maior+base_menor)*altura/2
return area
# Programa Principal
print ("Calcula a área de um trapézio")
at = area_trapezio(5, 2, 7)
print ("A área é:", at, "m2.")
PERGUNTAS?