DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
Aula 13 - Trabalhando com strings
1. Introdução a Algoritmos e
Linguagens de Programação
Aula 13 | Trabalhando com strings
Apresentação
Luiz Augusto de M. Morais
2. Roteiro
Strings
●
Uma sequência de caracteres
●
Usando o interpretador
●
Repetindo cada elemento
Mensagem secreta
●
Entendendo o problema
●
Cifra de César
●
Código ASCII
●
Primeira tentativa
●
Escolhendo a chave certa
●
Segunda tentativa
UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
4. Uma sequência de caracteres
Caractere
'Olá, mundo!'
0 1 2 3 4 5 6 7 8 9 10
Índice da string
UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
5. Uma sequência de caracteres
nome = 'Luiz Augusto'
sobrenome = 'Macedo Morais'
nome_completo = nome + ' ' + sobrenome Juntando
strings
print(nome_completo)
tamanho_nome = len(nome_completo)
print(tamanho_nome)
primeira_letra = nome[0]
print(primeira_letra)
Sabendo o
Acessando o tamanho da string
índice da string
UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
7. 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
8. 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
9. Usando o Interpretador 3/3
>>> nome = 'Luiz'
>>> indice = 0
>>> while indice < len(nome):
... print(nome[indice])
... indice += 1
...
L
u
i
z
UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
11. Repetindo cada elemento
nome = 'Luiz' nome = 'Luiz'
indice = 0 for letra in nome:
while indice < len(nome): print(letra)
print(nome[indice])
indice += 1
UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
13. Usando o Interpretador 1/2
>>> nome = 'Luiz Augusto'
>>> for letra in nome:
... print(letra)
...
L
u
i
z
UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
14. Usando o Interpretador 2/2
>>> prefixos = 'CPMN'
>>> sufixo = 'ão'
>>> for prefixo in prefixos:
... print(prefixo + sufixo)
...
Cão
Pão
Mão
Não
UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
16. 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
17. 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.
UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
19. 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
20. Cifra de César | Como funciona
Y Z A B C D E F
Y Z A B C D E F
chave = 2
UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
22. 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'tluzhnlt5Wvy'jh|
zh'kpzzv'}vjñ'nhuohyè'|t'h|
tlu{v5HzzpuhkvA'Jolml5
UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
23. 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
24. 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.
UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
26. Usando o Interpretador 1/2
letra = 'a'
numero = ord(letra)
numero
97
nova_letra = chr(numero + 2)
nova_letra
'c'
UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
27. Usando o Interpretador 2/2
palavra = 'ialp'
for letra in palavra:
... print('%s: %d' % (letra, ord(letra)))
...
i: 105
a: 97
l: 108
p: 112
UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
29. Primeira tentativa
Abrindo o arquivo
mensagem.txt
arquivo = open('mensagem.txt')
Lendo o conteúdo
mensagem = arquivo.read() do arquivo
arquivo.close() Fechando o
nova_mensagem = '' arquivo
for letra in mensagem:
nova_mensagem += chr(ord(letra) - 2) Trocando as letras
print('Possível mensagem: %s' % (chave, nova_mensagem))
UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
31. 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
32. Segunda tentativa
MAX_CHAVES = 10 Número máximo
de chaves
arquivo = open('mensagem.txt')
mensagem = arquivo.read()
arquivo.close()
chave = 1
Repetindo até o nº
while chave = MAX_CHAVES:
máximo de chaves
nova_mensagem = ''
for letra in mensagem:
nova_mensagem += chr(ord(letra) - chave)
print('Chave %d: %sn' % (chave, nova_mensagem))
chave += 1
Mostrando a
mensagem gerada a
partir de cada chave
UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
35. 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?
UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
36. O que aprendemos hoje?
●
String
●
Estrutura de repetição for
●
Funções:
● len()
● ord()
● chr()
● open()
UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
37. Referências
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.
UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETO HERMES