Introdução a Algoritmos eLinguagens de Programação                 Aula 13 | Trabalhando com strings             Apresenta...
Roteiro   Strings      ●       Uma sequência de caracteres      ●       Usando o interpretador      ●       Repetindo cada...
StringsUma sequênciade caracteres          UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
Uma sequência de caracteres         Caractere    Olá, mundo!        0   1    2 3 4    5 6 7 8                9 10         ...
Uma sequência de caracteres       nome = Luiz Augusto       sobrenome = Macedo Morais       nome_completo = nome +   + sob...
StringsUsando o interpretador          UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
Usando o Interpretador 1/3   >>> nome = Luiz Augusto   >>> sobrenome = Macedo Morais   >>> nome_completo = nome +   + sobr...
Usando o Interpretador 2/3   >>> nome = Luiz   >>> nome[1] = a   Traceback (most recent call last):     File "<stdin>", li...
Usando o Interpretador 3/3   >>> nome = Luiz   >>> indice = 0   >>> while indice < len(nome):   ...    print(nome[indice])...
StringsRepetindocada elemento          UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
Repetindo cada elemento nome = Luiz                     nome = Luiz indice = 0                        for letra in nome: w...
StringsUsando o interpretador          UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
Usando o Interpretador 1/2   >>> nome = Luiz Augusto   >>> for letra in nome:   ...    print(letra)   ...   L   u   i   z ...
Usando o Interpretador 2/2   >>> prefixos = CPMN   >>> sufixo = ão   >>> for prefixo in prefixos:   ...    print(prefixo +...
Mensagem secretaEntendendoo problema       UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
Entendendo o problemaVocê é um membro da APE (Associação de ProgramadoresEspiões) e tem uma vida dupla.Além de ser program...
Entendendo o problema  Você conseguiu interceptar         uma       mensagem  criptografada do inimigo.  Seu objetivo é de...
Mensagem secretaCifra de César        UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
Cifra de César | História● É um tipo muito simples de criptografia, no qual as letrassão substituídas por outras próximas,...
Cifra de César | Como funciona           Y   Z   A   B     C     D      E      F           Y   Z   A   B     C     D      ...
Mensagem secretaCódigo ASCII        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 n...
Código ASCII   ASCII significa American Standard Code for   Information Interchange, ou Código Padrão   Americano para o I...
Código ASCII   Em Python, existem duas funções para manipular   caracteres da tabela ASCII.   ord: Recebe um caractere e r...
Mensagem secretaUsando o interpretador               UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
Usando o Interpretador 1/2      letra = a      numero = ord(letra)      numero   97      nova_letra = chr(numero + 2)     ...
Usando o Interpretador 2/2    palavra = ialp    for letra in palavra:   ...    print(%s: %d % (letra, ord(letra)))   ...  ...
Mensagem secretaPrimeira tentativa           UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
Primeira tentativa        Abrindo o arquivo        mensagem.txtarquivo = open(mensagem.txt)                               ...
Mensagem secretaTest Drive      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   me...
Segunda tentativa   MAX_CHAVES = 10                            Número máximo                                              ...
Mensagem secretaTest Drive      UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
Mensagem secretaPerguntas Idiotas           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 wh...
O que aprendemos hoje?    ●      String    ●      Estrutura de repetição for    ●      Funções:       ● len()       ● ord(...
ReferênciasDOWNEY, Allen. Think Python: How to Think Like a Computer Scientist.Needham: Green Tea Press, 2008.SWEIGART, Al...
Próximos SlideShares
Carregando em…5
×

Aula 13 - Trabalhando com strings

2.162 visualizações

Publicada em

Publicada em: Educação

Aula 13 - Trabalhando com strings

  1. 1. Introdução a Algoritmos eLinguagens de Programação Aula 13 | Trabalhando com strings Apresentação Luiz Augusto de M. Morais
  2. 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
  3. 3. StringsUma sequênciade caracteres UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
  4. 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. 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
  6. 6. StringsUsando o interpretador UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
  7. 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. 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. 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
  10. 10. StringsRepetindocada elemento UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
  11. 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
  12. 12. StringsUsando o interpretador UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
  13. 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. 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
  15. 15. Mensagem secretaEntendendoo problema UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
  16. 16. Entendendo o problemaVocê é um membro da APE (Associação de ProgramadoresEspiões) e tem uma vida dupla.Além de ser programador duranteo dia, ainda passa as madrugadasno quartel general capturandoinformações valiosas de prováveisinimigos do Estado.Esta semana você tem uma novamissão... UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
  17. 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
  18. 18. Mensagem secretaCifra de César UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
  19. 19. Cifra de César | História● É um tipo muito simples de criptografia, no qual as letrassão substituídas por outras próximas, com um número fixode “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. 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
  21. 21. Mensagem secretaCódigo ASCII UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
  22. 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{vnyhmhylz{htluzhnlt5Wvyjh| zhkpzzv}vjñnhuohyè|th| tlu{v5HzzpuhkvAJolml5 UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
  23. 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. 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
  25. 25. Mensagem secretaUsando o interpretador UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
  26. 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. 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
  28. 28. Mensagem secretaPrimeira tentativa UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
  29. 29. Primeira tentativa Abrindo o arquivo mensagem.txtarquivo = open(mensagem.txt) Lendo o conteúdomensagem = arquivo.read() do arquivoarquivo.close() Fechando onova_mensagem = arquivofor letra in mensagem: nova_mensagem += chr(ord(letra) - 2) Trocando as letrasprint(Possível mensagem: %s % (chave, nova_mensagem)) UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
  30. 30. Mensagem secretaTest Drive UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
  31. 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. 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
  33. 33. Mensagem secretaTest Drive UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
  34. 34. Mensagem secretaPerguntas Idiotas UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
  35. 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. 36. O que aprendemos hoje? ● String ● Estrutura de repetição for ● Funções: ● len() ● ord() ● chr() ● open() UNIVERSIDADE ESTADUAL DA PARAÍBA | PROJETOHERMES
  37. 37. ReferênciasDOWNEY, 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

×