aula 14 - funções: não duplique seu código

31
Introdução a Algoritmos e Linguagens de Programação Apresentação Luiz Augusto de M. Morais Aula 14 | Funções: não duplique seu código

Upload: luiz-augusto-macedo-morais

Post on 10-Jul-2015

656 views

Category:

Education


3 download

TRANSCRIPT

Page 1: Aula 14 - Funções: não duplique seu código

Introdução a Algoritmos e

Linguagens de Programação

ApresentaçãoLuiz Augusto de M. Morais

Aula 14 | Funções: não duplique seu código

Page 2: Aula 14 - Funções: não duplique seu código

UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES

Roteiro

●Como funciona uma função●Criando sua própria função●Usando o interpretador●Parâmetros ou atributos?

Funções

●Entendendo o novo problema●Encapsulando o código●Primeira tentativa●Segunda tentativa●Removendo código duplicado

Mensagem secreta

Page 3: Aula 14 - Funções: não duplique seu código

Funções

Como funcionauma função

UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES

Page 4: Aula 14 - Funções: não duplique seu código

UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES

Como funciona uma função

saudacao = 'oi'

print(saudacao)

numero = int('1234')

caractere = chr(97)

Imprime algo na tela

Converte algo para inteiro

Retorna o caractere correspondente

Page 5: Aula 14 - Funções: não duplique seu código

UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES

Como funciona uma função

Atributos

Função

Resultado

Page 6: Aula 14 - Funções: não duplique seu código

Funções

Criandosua própria função

UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES

Page 7: Aula 14 - Funções: não duplique seu código

UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES

Criando sua própria função

def somar(n1, n2):

soma = n1 + n2

return soma

Comando para definir função

Nome da função

Comando de retorno

Parâmetros da função

Page 8: Aula 14 - Funções: não duplique seu código

UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES

Usando o Interpretador 1/3

>>> def somar(n1, n2):... soma = n1 + n2... return soma...>>> somar(2, 3)5>>> subtrair(3, 5)Traceback (most recent call last): File "<stdin>", line 1, in <module>NameError: name 'subtrair' is not defined

Page 9: Aula 14 - Funções: não duplique seu código

UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES

Usando o Interpretador 2/3

>>> def subtrair(x, y):... return x – y...>>> subtrair(3, 5)-2>>> subtrair(somar(2, 2), 3)1>>> a = 3>>> b = 7>>> c = somar(a, b)>>> c10

Page 10: Aula 14 - Funções: não duplique seu código

UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES

Usando o Interpretador 3/3

>>> def fatorial(numero):... fat = 1... while numero > 1:... fat *= numero... numero -= 1... return fat...>>> fatorial(2)2>>> fatorial(4)24

Page 11: Aula 14 - Funções: não duplique seu código

Funções

Parâmetrosou atributos?

UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES

Page 12: Aula 14 - Funções: não duplique seu código

UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES

Parâmetros ou atributos?

def somar(n1, n2):

soma = n1 + n2

return soma

somar(2, 4)

Parâmetros da função

Atributos da função

Page 13: Aula 14 - Funções: não duplique seu código

Mensagem secreta

Entendendoo novo problema

UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES

Page 14: Aula 14 - Funções: não duplique seu código

UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES

Entendendo o novo problema

Você é agora é responsável por enviar e receber informações criptografadas para a companhia.

Seu objetivo agora é criar uma função que facilite descriptografar as mensagens recebidas de seus colegas.

Lembre-se: Agora você conhece a chave.

Page 15: Aula 14 - Funções: não duplique seu código

Mensagem secreta

Encapsulandoo código

UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES

Page 16: Aula 14 - Funções: não duplique seu código

UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES

Encapsulando o código

Agora vamos reutilizar o código desenvolvido anteriormente para criar uma função para descriptografar mensagens.

Page 17: Aula 14 - Funções: não duplique seu código

Mensagem secreta

Primeira tentativa

UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES

Page 18: Aula 14 - Funções: não duplique seu código

UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES

Primeira tentativa

def descript(mensagem, chave):

nova_mensagem = ''

for letra in mensagem:

nova_mensagem += chr(ord(letra) - chave)

return nova_mensagem

chave = int(input('Informe o número da chave: '))

arquivo = open('mensagem.txt')

mensagem = arquivo.read()

arquivo.close()

mensagem_descript = descript(mensagem, chave)

print('Mensagem: %s' % mensagem_descript)

Page 19: Aula 14 - Funções: não duplique seu código

Mensagem secreta

Test Drive

UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES

Page 20: Aula 14 - Funções: não duplique seu código

Mensagem secreta

Segunda tentativa

UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES

Page 21: Aula 14 - Funções: não duplique seu código

UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES

Segunda tentativa

Agora que já temos uma função que descriptografa mensagens, que tal criar uma que faça o processo contrário?

Já ao trabalho!

Page 22: Aula 14 - Funções: não duplique seu código

UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES

Segunda tentativa 1/2

def cript(mensagem, chave):

nova_mensagem = ''

for letra in mensagem:

nova_mensagem += chr(ord(letra) + chave)

return nova_mensagem

def descript(mensagem, chave):

nova_mensagem = ''

for letra in mensagem:

nova_mensagem += chr(ord(letra) - chave)

return nova_mensagem

Page 23: Aula 14 - Funções: não duplique seu código

UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES

Segunda tentativa 2/2while True: opcao = input('c = criptografar, d = descriptografar; s = sair: ') nome_arquivo = 'mensagem2.txt' if opcao == 'c': arquivo = open(nome_arquivo, 'w') mensagem = input('Informe a mensagem a ser criptografada: ') chave = int(input('Informe a chave: ')) mensagem_cript = cript(mensagem, chave) arquivo.write(mensagem_cript) arquivo.close() print('Mensagem criptografada com sucesso!') elif opcao == 'd': arquivo = open(nome_arquivo) mensagem = arquivo.read() arquivo.close() chave = int(input('Informe a chave: ')) mensagem_descript = descript(mensagem, chave) print('Mensagem: %s' % mensagem_descript) elif opcao == 's': break else: print('Comando inválido!')

Page 24: Aula 14 - Funções: não duplique seu código

Mensagem secreta

Test Drive

UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES

Page 25: Aula 14 - Funções: não duplique seu código

Mensagem secreta

Removendocódigo duplicado

UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES

Page 26: Aula 14 - Funções: não duplique seu código

UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES

Removendo código duplicado

def cript(mensagem, chave):

nova_mensagem = ''

for letra in mensagem:

nova_mensagem += chr(ord(letra) + chave)

return nova_mensagem

def descript(mensagem, chave):

nova_mensagem = ''

for letra in mensagem:

nova_mensagem += chr(ord(letra) - chave)

return nova_mensagem

O que repete

Page 27: Aula 14 - Funções: não duplique seu código

UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES

Removendo código duplicado

def cifra(mensagem, chave, modo):

nova_mensagem = ''

for letra in mensagem:

if modo == 'c':

nova_mensagem += chr(ord(letra) + chave)

else:

nova_mensagem += chr(ord(letra) - chave)

return nova_mensagem

Page 28: Aula 14 - Funções: não duplique seu código

Mensagem secreta

Perguntas Idiotas

UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES

Page 29: Aula 14 - Funções: não duplique seu código

UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES

Perguntas Idiotas

●Ainda não entendi a diferença entre parâmetros e atributos●Por que eu devo criar funções?●Pra que serve o argumento 'w' na função open?●O que significa elif, mesmo?

Page 30: Aula 14 - Funções: não duplique seu código

●Funções●Estrutura condicional if-elif-else●Comandos:

● def● return● break

UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES

O que aprendemos hoje?

Page 31: Aula 14 - Funções: não duplique seu código

Referências

UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETO HERMES

DOWNEY, Allen. Think Python: How to Think Like a Computer Scientist.Needham: Green Tea Press, 2008.

SWEIGART, Al. Invent Your Own Computer Games with Python.2. ed. [S. l. : s. n.]. 2010.