0% acharam este documento útil (0 voto)
27 visualizações23 páginas

Funções e Recursividade em Python

Enviado por

Gustavo Palmeira
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
27 visualizações23 páginas

Funções e Recursividade em Python

Enviado por

Gustavo Palmeira
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd

Módulo: Python

Aula 4
© Copyright 2018-2019 [Link] - All Rights
Tema da aula:
Aula 4 - Funções

● Tudo sobre Funções


● Recursividade
● Lambda

© Copyright 2018-2019 [Link] - All Rights Reserved


O que são funções?

● Funções são blocos de código que podem ser reutilizados para realizar
uma tarefa

● Elas ajudam a organizar e dividir o código em partes menores e mais


fáceis de lidar

● As funções permitem que você reutilize o mesmo bloco de código várias


vezes sem precisar escrevê-lo novamente

● Também possibilita dividir tarefas complexas em funções menores e mais


específicas

© Copyright 2018-2019 [Link] - All Rights Reserved


A função mais simples possível

● Para criar uma função, basta usar a palavra def, seguida do nome da
função, parênteses e dois pontos e escrever o código em baixo dela
indentado:

def minha_funcao():
print('A função executou')

● Para chamar a função, basta usar o seu nome seguido de parênteses:

● minha_funcao()

© Copyright 2018-2019 [Link] - All Rights Reserved


Receber valores na função

● A função pode ter parâmetros que recebem valores quando ela for
chamada, que são os argumentos:

def calcula_IMC(peso, altura):


print('O seu IMC é: ', peso/(altura**2))

● Para chamar a função, deve passar a lista de argumentos entre


parênteses:

calcula_IMC(72, 1.80)

© Copyright 2018-2019 [Link] - All Rights Reserved


Devolver valores da função

● A função também pode passar para fora um valor no final, que será
recebido por quem a chamou, para isso use a palavra return:

def calcula_IMC(peso, altura):


return peso/(altura**2)

● Na hora de chamar a função, você pode salvar o valor em uma variável


ou usar para qualquer outra finalidade:

valor_imc = calcula_IMC(72, 1.80)

© Copyright 2018-2019 [Link] - All Rights Reserved


Retornar mais de um valor
● É possível retornar vários valores, usando uma tupla:

def calcula_IMC(peso, altura):


imc = peso/(altura**2)
if imc < 18.5:
texto = 'Abaixo do peso'
elif imc < 25:
texto = 'Dentro do esperado'
else:
texto = 'Acima do peso'
return imc, texto

● Na hora de receber os valores, usar o desempacotamento:

valor_imc, texto = calcula_IMC(72, 1.80)

© Copyright 2018-2019 [Link] - All Rights Reserved


Escopo de variáveis e funções dentro de funções
variavel_1 = 'Essa é global'

def funcao_fora():
variavel_1 = 'Essa passou por cima da global'
variavel_2 = 'Essa só existe dentro da função fora e função dentro'

def funcao_dentro():
global variavel_1,variavel_3
variavel_1 = 'Essa mudou o valor da variavel_1 de fora'
variavel_3 = 'Essa criou uma global também'
variavel_4 = 'Essa só existe na função dentro'

funcao_dentro()

funcao_fora()
© Copyright 2018-2019 [Link] - All Rights Reserved
Transformar nosso programa em uma função principal

def main():

print('Meu código executa aqui')

if __name__ == '__main__':
main()

© Copyright 2018-2019 [Link] - All Rights Reserved


Parâmetros com valor opcional ou padrão
def imprimir_temperatura(valor, unidade='C', com_texto=False):
if com_texto:
print('A temperatura é: ', end='')

print(valor, end='')

if unidade == 'C':
print('°C')
elif unidade == 'F':
print('°F')
elif unidade == 'K':
print('K')

© Copyright 2018-2019 [Link] - All Rights Reserved


Passar argumento posicional ou palavra-chave

● Argumentos podem ser passados através da ordem em que aparecem nos


parâmetros da função, o que é chamado de argumento posicional:

imprimir_temperatura(25, 'C', True)

● Ou podem ser passados em qualquer ordem usando os nomes dos


parâmetros, que são os argumentos palavra-chave:

imprimir_temperatura(unidade='C', com_texto=True, valor=25)

© Copyright 2018-2019 [Link] - All Rights Reserved


*args → “Infinitos” argumentos posicionais

● Para ter uma função que pode receber quantos argumentos posicionais o usuário
quiser passar, sem dizer exatamente quantos, é preciso usar essa funcionalidade:
def maior_numero(*args):
if len(args) == 0: ● Esses argumentos vão vir na forma de
return None uma tupla, ou seja, args é uma tupla
dentro da função
maior = args[0]
for numero in args: ● Esses argumentos não tem nome, só
if numero > maior: ordem
maior = numero
return maior

© Copyright 2018-2019 [Link] - All Rights Reserved


**kwargs → “Infinitos” argumentos palavra-chave
● Para ter uma função que pode receber quantos argumentos palavra chave o usuário quiser
passar, sem dizer exatamente quantos, é preciso usar essa funcionalidade:

def imprimir_produto(nome, **kwargs):


descricao = "Produto: " + nome + '\n'
for chave, valor in [Link]():
descricao += f"{chave}: {valor}\n"
print(descricao)

imprimir_produto("Camisa", Material='Algodão', Cor='Azul', Tamanho='M',


Preço=39.90)

● Esses argumentos vão vir na forma de um dicionário, ou seja, kwargs é um dicionário dentro da
função
● Esses argumentos não tem ordem, só nome

© Copyright 2018-2019 [Link] - All Rights Reserved


Usar tuplas ou dicionários para passar argumentos

● Usar tupla para passar argumentos posicionais:

tupla = (72, 1.80)


calcula_IMC(*tupla)
● Usar dicionário para passar argumentos palavra-chave

dicionario = {'valor': 25, 'unidade': 'C', 'com_texto': False}


imprimir_temperatura(**dicionario)

● Pode usar tanto uma variável quanto o próprio dicionário ou tupla direto

© Copyright 2018-2019 [Link] - All Rights Reserved


Tópico Avançado 1: Recursividade

● Funções podem chamar a si mesmas e retornar valores para dentro de si mesmas


que serão usados no cálculo

● Essa é uma ferramenta muito poderosa mas que também pode gerar confusão

● Toda função recursiva precisa “saber quando parar”, pois se ela chamar a si
mesma uma quantidade muito grande de vezes sem voltar, dará erro

● O problema do fatorial da aula 1 pode ser resolvido em 1 linha com recursividade:

def fatorial(x):
return 1 if x <= 1 else x * fatorial(x-1)

© Copyright 2018-2019 [Link] - All Rights Reserved


Tópico Avançado 2: Lambda

● Outro tipo de função que existe no python é a função lambda, ela é criada com a
palavra lambda, seguida de uma lista de parâmetros, dois pontos e logo em
seguida alguma expressão que determina o que a função faz, exemplos:

celsius_para_fahrenheit = lambda celsius: (celsius * 9/5) + 32


print(celsius_para_fahrenheit(25))

area_retangulo = lambda comprimento, largura: comprimento * largura


print(area_retangulo(10,20))

© Copyright 2018-2019 [Link] - All Rights Reserved


Desafio dos juros
● Crie uma função que recebe do usuário um valor de capital, um valor de juros, um número de meses e uma
letra que pode ser ‘S’ para simples ou ‘C’ para compostos e retorna esses 4 valores como uma tupla

● Crie uma função que recebe o valor do capital, o valor dos juros e a quantidade de meses que durou a
aplicação e retorna o valor final, usando a fórmula de juros simples

● Crie outra função que recebe o valor do capital, o valor dos juros e a quantidade de meses que durou a
aplicação e retorna o valor final, usando a fórmula de juros compostos

● Faça um programa usando essas 3 funções que pergunte ao usuário pelos valores e depois mostre o resultado

● Fórmulas: Simples = capital * taxa * tempo; Composto = capital * (1 + taxa)^tempo

[Link]

[Link]

© Copyright 2018-2019 [Link] - All Rights Reserved


Desafio do desvio padrão
● Crie uma função “leitura” que lê do terminal uma quantidade e vai ler do usuário
essa quantidade de números float e vai retornar esses números todos como uma
lista

● Crie uma função “soma” que recebe quantos argumentos o usuário quiser e retorna
a soma deles (usa *args)

● Crie uma função “media” que usa a função 2 para calcular a média de quantos
argumentos o usuário quiser (usa *args)

● Crie uma função “subtrai” que recebe uma lista e um número X e subtrai X de todos
os números da lista e retorna ela
Σ significa a soma
● Crie uma função “quadrado” que recebe uma lista e transforma todos os números da dos valores
lista no quadrado deles e retorna ela

● Crie uma função “raiz” que retorna a raiz do número float passado para ela

● Use todas essas funções para calcular o desvio padrão seguindo a fórmula, que é
um valor muito importante na ciência de dados

© Copyright 2018-2019 [Link] - All Rights Reserved


Desafio Bhaskara (Lambda)
● Crie um programa que recebe do usuário os coeficientes a, b e c de uma equação do segundo
grau

● Crie uma função lambda que calcula o valor de delta

● Crie uma função lambda que calcula o valor da raiz x’

● Crie uma função lambda que calcula o valor da raiz x’’

● Imprima o valor das raízes para o usuário

● Use apenas funções lambda nesse programa

● Cuidado com erros devido a raiz de número negativo

© Copyright 2018-2019 [Link] - All Rights Reserved


Desafio Fibonacci (Recursividade)
● Crie um programa que recebe um número inteiro do usuário e calcula o Fibonacci daquele
número

● Fibonacci de zero é zero, Fibonacci de um é um

● Fibonacci de qualquer número depois desse, é a soma do dois Fibonaccis que vieram antes,
por exemplo F(2) = F(1) + F(0) e F(3) = F(2) + F(1)

● Em linguagem matemática genérica: F(n) = F(n-1) + F(n-2)

● Use recursividade para resolver esse problema

● Valores que devem sair para cada número:

© Copyright 2018-2019 [Link] - All Rights Reserved


Desafio bônus para quem tiver tempo
● Refaça o desafio do desvio padrão substituindo todas as funções exceto a “leitura” por funções
lambda

● No final faça com que uma única função lambda que usa as outras lambdas gere o resultado
final em uma única linha

© Copyright 2018-2019 [Link] - All Rights Reserved


Desafio bônus do bônus para quem tiver mais tempo
● Refaça os desafios das aulas 1, 2 e 3, transformando os pedaços de código importantes ou
que se repetem em funções

© Copyright 2018-2019 [Link] - All Rights Reserved


71 3901 1052 | 71 9 9204 0134
@infi[Link]
[Link]fi[Link]
Salvador Shopping Business | Torre Europa Sala
310 Caminho das Árvores, Salvador - BA CEP:
40301-155
© Copyright 2018-2019 [Link] - All Rights

Você também pode gostar