Aula 13 - Trabalhando com strings
-
Upload
luiz-augusto-macedo-morais -
Category
Education
-
view
1.648 -
download
1
Transcript of Aula 13 - Trabalhando com strings
Introdução a Algoritmos e
Linguagens de Programação
ApresentaçãoLuiz Augusto de M. Morais
Aula 13 | Trabalhando com strings
UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
Roteiro
●Uma sequência de caracteres●Usando o interpretador●Repetindo cada elemento
Strings
●Entendendo o problema●Cifra de César●Código ASCII●Primeira tentativa●Escolhendo a chave certa●Segunda tentativa
Mensagem secreta
Strings
Uma sequênciade caracteres
UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
Uma sequência de caracteres
'Olá, mundo!'0 1 2 3 4 5 6 7 8 9 10
Caractere
Índice da string
UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
Uma sequência de caracteres
nome = 'Luiz Augusto'
sobrenome = 'Macedo Morais'
nome_completo = nome + ' ' + sobrenome
print(nome_completo)
tamanho_nome = len(nome_completo)
print(tamanho_nome)
primeira_letra = nome[0]
print(primeira_letra)
Juntando strings
Acessando o índice da string
Sabendo o tamanho da string
Strings
Usando o interpretador
UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
Usando o Interpretador 1/3
>>> nome = 'Luiz Augusto'>>> sobrenome = 'Macedo Morais'>>> nome_completo = nome + ' ' + sobrenome>>> nome_completo'Luiz Augusto Macedo Morais'>>> len(nome_completo)26>>> primeira_letra, ultima_letra = nome[0], nome[-1]>>> primeira_letra'L'>>> ultima_letra'o'
UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
Usando o Interpretador 2/3
>>> nome = 'Luiz'>>> nome[1] = 'a'Traceback (most recent call last): File "<stdin>", line 1, in <module>TypeError: 'str' object does not support item assignment>>> novo_nome = nome.replace('u', 'a')>>> novo_nome'Laiz'>>> nome'Luiz'
UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
Usando o Interpretador 3/3
>>> nome = 'Luiz'>>> indice = 0>>> while indice < len(nome):... print(nome[indice])... indice += 1...Luiz
Strings
Repetindocada elemento
UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
Repetindo cada elemento
nome = 'Luiz'
indice = 0
while indice < len(nome):
print(nome[indice])
indice += 1
nome = 'Luiz'
for letra in nome:
print(letra)
Strings
Usando o interpretador
UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
Usando o Interpretador 1/2
>>> nome = 'Luiz Augusto'>>> for letra in nome:... print(letra)...Luiz
UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
Usando o Interpretador 2/2
>>> prefixos = 'CPMN'>>> sufixo = 'ão'>>> for prefixo in prefixos:... print(prefixo + sufixo)...CãoPãoMãoNão
Mensagem secreta
Entendendoo problema
UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
Entendendo o problema
Você é um membro da APE (Associação de Programadores Espiões) e tem uma vida dupla.
Além de ser programador durante o dia, ainda passa as madrugadas no quartel general capturando informações valiosas de prováveis inimigos do Estado.
Esta semana você tem uma nova missão...
UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
Entendendo o problema
Você conseguiu interceptar uma mensagem criptografada do inimigo.
Seu objetivo é desenvolver um programa que consiga descriptografar a mensagem antes que aconteça uma tragédia.
Uma pista: seu colega disse que a mensagem se parece com uma cifra de César. Investigue isso.
Mensagem secreta
Cifra de César
UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
Cifra de César | História
●É um tipo muito simples de criptografia, no qual as letras são substituídas por outras próximas, com um número fixo de “casas”;
●Júlio César usou para se comunicar com seus generais;
●Muito fácil de ser quebrada;
UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
Cifra de César | Como funciona
Y Z A B C E F
Y Z A B C D E F
DA
C
chave = 2
Mensagem secreta
Código ASCII
UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
Código ASCII
Finalmente você teve acesso à mensagem e descobriu que todos os elementos da mensagem estão presentes na tabela ASCII.
Mensagem secreta
Whyhiðuz(']vjñ'jvuzln|p|'klzjypw{vnyhmhy'lz{h'tluzhnlt5�Wvy'jh|zh'kpzzv'}vjñ'nhuohyè'|t'h|tlu{v5�HzzpuhkvA'Jolml5�
UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
Código ASCII
ASCII significa American Standard Code for Information Interchange, ou Código Padrão Americano para o Intercâmbio de Informação.
A tabela ASCII contém os caracteres que são utilizados para representar o texto em computadores.
Para saber mais informações sobre o código ASCII, acesse a página da tabela na Wikipedia.
UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
Código ASCII
Em Python, existem duas funções para manipular caracteres da tabela ASCII.
ord: Recebe um caractere e retorna o número correspondente na tabela.
chr: Recebe um número e retorna o caractere correspondente na tabela.
Mensagem secreta
Usando o interpretador
UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
Usando o Interpretador 1/2
>>> letra = 'a'>>> numero = ord(letra)>>> numero97>>> nova_letra = chr(numero + 2)>>> nova_letra'c'
UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
Usando o Interpretador 2/2
>>> palavra = 'ialp'>>> for letra in palavra:... print('%s: %d' % (letra, ord(letra)))...i: 105a: 97l: 108p: 112
Mensagem secreta
Primeira tentativa
UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
Primeira tentativa
arquivo = open('mensagem.txt')
mensagem = arquivo.read()
arquivo.close()
nova_mensagem = ''
for letra in mensagem:
nova_mensagem += chr(ord(letra) - 2)
print('Possível mensagem: %s' % (chave, nova_mensagem))
Abrindo o arquivo mensagem.txt
Lendo o conteúdo do arquivo
Trocando as letras
Fechando o arquivo
Mensagem secreta
Test Drive
UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
Segunda tentativa
Nós já descobrimos que a mensagem possui caracteres da tabela ASCII e que foi criptografada por meio da cifra de César.
No entanto, não sabemos qual é a chave empregada na cifra. Por isso, vamos tentar descriptografar por força bruta.
UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
Segunda tentativa
MAX_CHAVES = 10
arquivo = open('mensagem.txt')
mensagem = arquivo.read()
arquivo.close()
chave = 1
while chave <= MAX_CHAVES:
nova_mensagem = ''
for letra in mensagem:
nova_mensagem += chr(ord(letra) - chave)
print('Chave %d: %s\n' % (chave, nova_mensagem))
chave += 1
Número máximo de chaves
Repetindo até o nº máximo de chaves
Mostrando a mensagem gerada a partir de cada chave
Mensagem secreta
Test Drive
UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
Mensagem secreta
Perguntas Idiotas
UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
Perguntas Idiotas
●Por que eu não posso modificar o valor de uma string?●É melhor usar a estrutura for ao invés do while?●Por que eu tenho que fechar o arquivo?
●String●Estrutura de repetição for●Funções:
● len()● ord()● chr()● open()
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.