Post on 10-Jul-2015
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
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
Funções
Como funcionauma função
UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
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
UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
Como funciona uma função
Atributos
Função
Resultado
Funções
Criandosua própria função
UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
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
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
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
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
Funções
Parâmetrosou atributos?
UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
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
Mensagem secreta
Entendendoo novo problema
UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
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.
Mensagem secreta
Encapsulandoo código
UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
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.
Mensagem secreta
Primeira tentativa
UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
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)
Mensagem secreta
Test Drive
UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
Mensagem secreta
Segunda tentativa
UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
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!
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
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!')
Mensagem secreta
Test Drive
UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
Mensagem secreta
Removendocódigo duplicado
UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
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
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
Mensagem secreta
Perguntas Idiotas
UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
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?
●Funções●Estrutura condicional if-elif-else●Comandos:
● def● return● break
UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
O que aprendemos hoje?
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.