Aula 13 - Trabalhando com strings

37
Introdução a Algoritmos e Linguagens de Programação Apresentação Luiz Augusto de M. Morais Aula 13 | Trabalhando com strings

Transcript of Aula 13 - Trabalhando com strings

Page 1: 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

Page 2: 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

Page 3: Aula 13 - Trabalhando com strings

Strings

Uma sequênciade caracteres

UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES

Page 4: Aula 13 - Trabalhando com strings

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

Page 5: Aula 13 - Trabalhando com strings

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

Page 6: Aula 13 - Trabalhando com strings

Strings

Usando o interpretador

UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES

Page 7: Aula 13 - Trabalhando com strings

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'

Page 8: Aula 13 - Trabalhando com strings

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'

Page 9: Aula 13 - Trabalhando com strings

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

Page 10: Aula 13 - Trabalhando com strings

Strings

Repetindocada elemento

UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES

Page 11: Aula 13 - Trabalhando com strings

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)

Page 12: Aula 13 - Trabalhando com strings

Strings

Usando o interpretador

UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES

Page 13: Aula 13 - Trabalhando com strings

UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES

Usando o Interpretador 1/2

>>> nome = 'Luiz Augusto'>>> for letra in nome:... print(letra)...Luiz

Page 14: Aula 13 - Trabalhando com strings

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

Page 15: Aula 13 - Trabalhando com strings

Mensagem secreta

Entendendoo problema

UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES

Page 16: Aula 13 - Trabalhando com strings

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...

Page 17: Aula 13 - Trabalhando com strings

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.

Page 18: Aula 13 - Trabalhando com strings

Mensagem secreta

Cifra de César

UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES

Page 19: Aula 13 - Trabalhando com strings

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;

Page 20: Aula 13 - Trabalhando com strings

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

Page 21: Aula 13 - Trabalhando com strings

Mensagem secreta

Código ASCII

UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES

Page 22: Aula 13 - Trabalhando com strings

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�

Page 23: Aula 13 - Trabalhando com strings

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.

Page 24: Aula 13 - Trabalhando com strings

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.

Page 25: Aula 13 - Trabalhando com strings

Mensagem secreta

Usando o interpretador

UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES

Page 26: Aula 13 - Trabalhando com strings

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'

Page 27: Aula 13 - Trabalhando com strings

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

Page 28: Aula 13 - Trabalhando com strings

Mensagem secreta

Primeira tentativa

UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES

Page 29: Aula 13 - Trabalhando com strings

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

Page 30: Aula 13 - Trabalhando com strings

Mensagem secreta

Test Drive

UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES

Page 31: Aula 13 - Trabalhando com strings

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.

Page 32: Aula 13 - Trabalhando com strings

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

Page 33: Aula 13 - Trabalhando com strings

Mensagem secreta

Test Drive

UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES

Page 34: Aula 13 - Trabalhando com strings

Mensagem secreta

Perguntas Idiotas

UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES

Page 35: Aula 13 - Trabalhando com strings

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?

Page 36: Aula 13 - Trabalhando com strings

●String●Estrutura de repetição for●Funções:

● len()● ord()● chr()● open()

UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES

O que aprendemos hoje?

Page 37: Aula 13 - Trabalhando com strings

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.