programação de computadoresotton/graduacao/programacao/10_str... · podemos fazer uma lista se...

52
Programação de Computadores Instituto de Computação UFF Departamento de Ciência da Computação Otton Teixeira da Silveira Filho

Upload: others

Post on 18-Jul-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Programação de Computadoresotton/graduacao/programacao/10_str... · Podemos fazer uma lista se “transformar“ numa cadeia de caracteres De quebra no próximo exemplo faremos

Programação de Computadores

Instituto de Computação UFFDepartamento de Ciência da Computação

Otton Teixeira da Silveira Filho

Page 2: Programação de Computadoresotton/graduacao/programacao/10_str... · Podemos fazer uma lista se “transformar“ numa cadeia de caracteres De quebra no próximo exemplo faremos

Conteúdo

● Caracteres e Cadeia de Caracteres

● Cadeia de Caracteres e listas

● Operações específicas para cadeias de caracteres:

funções e métodos

● Uma outra compreenção sobre o for

● Uso do del()

● Exercícios

Page 3: Programação de Computadoresotton/graduacao/programacao/10_str... · Podemos fazer uma lista se “transformar“ numa cadeia de caracteres De quebra no próximo exemplo faremos

str-cadeias de caracteres

O tipo str em Python reserva espaço na memória do computador e permite atribuirmos os caracteres que estão definidos na tabela ASCII e suas extensões

Page 4: Programação de Computadoresotton/graduacao/programacao/10_str... · Podemos fazer uma lista se “transformar“ numa cadeia de caracteres De quebra no próximo exemplo faremos

Tabela ASCII

Caracteres - 1 B

Page 5: Programação de Computadoresotton/graduacao/programacao/10_str... · Podemos fazer uma lista se “transformar“ numa cadeia de caracteres De quebra no próximo exemplo faremos

Exemplos com caracteres

Observe que temos um número inteiro associado a cada caracter. Por reconhecer o tipo da variável como str (e se referenciar ao número associado na tabela) é que os programas que estejam executando no computador reagem a estas variáveis de forma conveniente.

Page 6: Programação de Computadoresotton/graduacao/programacao/10_str... · Podemos fazer uma lista se “transformar“ numa cadeia de caracteres De quebra no próximo exemplo faremos

Exemplos com caracteres

As atribuições de caracteres são feitas de forma similar aos outros tipos já apresentados, como no fragmento abaixo

a = '/'

b = 'B'

c = a

...

Page 7: Programação de Computadoresotton/graduacao/programacao/10_str... · Podemos fazer uma lista se “transformar“ numa cadeia de caracteres De quebra no próximo exemplo faremos

Exemplos com caracteres

Podemos fazer comparações entre caracteres nos lembrando de que as referências serão sempre os valores da tabela ASCII

Page 8: Programação de Computadoresotton/graduacao/programacao/10_str... · Podemos fazer uma lista se “transformar“ numa cadeia de caracteres De quebra no próximo exemplo faremos

Mais um exemplo com caracteres

...

Page 9: Programação de Computadoresotton/graduacao/programacao/10_str... · Podemos fazer uma lista se “transformar“ numa cadeia de caracteres De quebra no próximo exemplo faremos

Exemplos com caracteres

Experimente teclar algo como a letra S e a letra s e depois olhe a correspondência na tabela ASCII

Page 10: Programação de Computadoresotton/graduacao/programacao/10_str... · Podemos fazer uma lista se “transformar“ numa cadeia de caracteres De quebra no próximo exemplo faremos

Exemplos com caracteres

Podemos acessar os elementos do tipo str pelo seus índices

Page 11: Programação de Computadoresotton/graduacao/programacao/10_str... · Podemos fazer uma lista se “transformar“ numa cadeia de caracteres De quebra no próximo exemplo faremos

Exemplos com caracteres

...

Page 12: Programação de Computadoresotton/graduacao/programacao/10_str... · Podemos fazer uma lista se “transformar“ numa cadeia de caracteres De quebra no próximo exemplo faremos

Cadeia de caracteres

Outra maneira é trabalharmos nossa entrada como lista

Page 13: Programação de Computadoresotton/graduacao/programacao/10_str... · Podemos fazer uma lista se “transformar“ numa cadeia de caracteres De quebra no próximo exemplo faremos

Exemplos com cadeias de caracteres

...

Page 14: Programação de Computadoresotton/graduacao/programacao/10_str... · Podemos fazer uma lista se “transformar“ numa cadeia de caracteres De quebra no próximo exemplo faremos

Cadeias de caracteres

Experimente usar type() para verificar se temos realmente uma lista como saída do input()

● Isto é devido ao split()

Page 15: Programação de Computadoresotton/graduacao/programacao/10_str... · Podemos fazer uma lista se “transformar“ numa cadeia de caracteres De quebra no próximo exemplo faremos

Cadeias de caracteres

Observe que Python faz umas gentilezas para o programador mas é bom ser explícito sempre que possível e conveniente para não haver mal entendidos

Page 16: Programação de Computadoresotton/graduacao/programacao/10_str... · Podemos fazer uma lista se “transformar“ numa cadeia de caracteres De quebra no próximo exemplo faremos

Tipos mutáveis e imutáveis

Temos formas diferentes de trabalhar ao usarmos um tipo ou outro, cada um com suas vantagens e desvantagens

Há uma grande diferença entre o tipo str e list:

Enquanto list é mutável str é imutável, ou seja, podemos alterar diretamente os valores de uma lista mas o mesmo não pode ser feito com uma cadeia de caracteres

Page 17: Programação de Computadoresotton/graduacao/programacao/10_str... · Podemos fazer uma lista se “transformar“ numa cadeia de caracteres De quebra no próximo exemplo faremos

Tipos mutáveis e imutáveis

Temos formas diferentes de trabalhar ao usarmos um tipo ou outro, cada um com suas vantagens e desvantagens

Há uma grande diferença entre o tipo str e list:

Enquanto list é mutável str é imutável, ou seja, podemos alterar diretamente os valores de uma lista mas o mesmo não pode ser feito com uma cadeia de caracteres

● Numa lista constituída de elementos do tipo cadeia de caracteres (str), podemos mudar o conteúdo da lista mas não a cadeia de caracter

Page 18: Programação de Computadoresotton/graduacao/programacao/10_str... · Podemos fazer uma lista se “transformar“ numa cadeia de caracteres De quebra no próximo exemplo faremos

Tipos simples e compostos

É bom observar novamente que diferente dos tipos como int, float, bool, ditos tipos simples ou primitivos, str é um tipo composto, ou seja, ele é constituído de “partes menores”.

Por exemplo, uma frase é constituída de ‘palavras’ (sub cadeias) e estas por caracteres (sub cadeias das ‘palavras’)

Page 19: Programação de Computadoresotton/graduacao/programacao/10_str... · Podemos fazer uma lista se “transformar“ numa cadeia de caracteres De quebra no próximo exemplo faremos

Operador in

Vejamos um operador que será útil no momento, embora ele já tenha sido apresentado informalmente

Page 20: Programação de Computadoresotton/graduacao/programacao/10_str... · Podemos fazer uma lista se “transformar“ numa cadeia de caracteres De quebra no próximo exemplo faremos

Operador in

Vejamos um operador que será útil no momento, embora ele já tenha sido apresentado informalmente

● in

Este operador retorna se falso ou verdadeiro se dada uma subcadeia (substring) se encontra em outra cadeia de caracteres

Page 21: Programação de Computadoresotton/graduacao/programacao/10_str... · Podemos fazer uma lista se “transformar“ numa cadeia de caracteres De quebra no próximo exemplo faremos

Operador in

Exemplos:

● ‘o‘ in “Tom“ retornará True

● ‘t‘ in “Tom“ retornará False

Page 22: Programação de Computadoresotton/graduacao/programacao/10_str... · Podemos fazer uma lista se “transformar“ numa cadeia de caracteres De quebra no próximo exemplo faremos

Operador in

Page 23: Programação de Computadoresotton/graduacao/programacao/10_str... · Podemos fazer uma lista se “transformar“ numa cadeia de caracteres De quebra no próximo exemplo faremos

Exemplos com cadeias de caracteres

Aqui vemos que temos uma autêntica operação lógica que pode simplificar operações com cadeias de caracteres

Page 24: Programação de Computadoresotton/graduacao/programacao/10_str... · Podemos fazer uma lista se “transformar“ numa cadeia de caracteres De quebra no próximo exemplo faremos

Exemplos com cadeias de caracteres

Aqui vemos que temos uma autêntica operação lógica que pode simplificar operações com cadeias de caracteres

Vejamos um uso do for de outra forma

Page 25: Programação de Computadoresotton/graduacao/programacao/10_str... · Podemos fazer uma lista se “transformar“ numa cadeia de caracteres De quebra no próximo exemplo faremos

Exemplos com cadeias de caracteres

Page 26: Programação de Computadoresotton/graduacao/programacao/10_str... · Podemos fazer uma lista se “transformar“ numa cadeia de caracteres De quebra no próximo exemplo faremos

Mais sobre o for

Aqui vemos mais sobre as possibilidades do for. Relembre que ele é descrito como

for elemento_do_iterador in iterador: comandos

onde iterador não se limita ao gerado pelo range() mas também pode ser lista, cadeia de caracteres e outros tipos compostos

Page 27: Programação de Computadoresotton/graduacao/programacao/10_str... · Podemos fazer uma lista se “transformar“ numa cadeia de caracteres De quebra no próximo exemplo faremos

Cadeias de caracteres

Podemos fazer uma lista se “transformar“ numa cadeia de caracteres

De quebra no próximo exemplo faremos uso de uma função já apresentada len() e também de uma sobrecarga do operador + que já vimos anteriormente

Page 28: Programação de Computadoresotton/graduacao/programacao/10_str... · Podemos fazer uma lista se “transformar“ numa cadeia de caracteres De quebra no próximo exemplo faremos

Cadeias de caracteres

Page 29: Programação de Computadoresotton/graduacao/programacao/10_str... · Podemos fazer uma lista se “transformar“ numa cadeia de caracteres De quebra no próximo exemplo faremos

Exemplos com cadeias de caracteres

Observe que criamos uma cadeira de caracteres vazia introduzindo nenhum caracter

O “problema” que temos está na impressão sem espaços em branco da cadeia de caracteres.

Mas, é claro, foi precisamente o que pedimos para ser feito...

Vamos adicionar espaços em branco para nosso conforto...

Page 30: Programação de Computadoresotton/graduacao/programacao/10_str... · Podemos fazer uma lista se “transformar“ numa cadeia de caracteres De quebra no próximo exemplo faremos

Cadeia de caracteres

Page 31: Programação de Computadoresotton/graduacao/programacao/10_str... · Podemos fazer uma lista se “transformar“ numa cadeia de caracteres De quebra no próximo exemplo faremos

Cadeia de caracteres

Ficou mais legível e ganhamos um pouco mais de conhecimento de manipulação de cadeia de caracteres

Page 32: Programação de Computadoresotton/graduacao/programacao/10_str... · Podemos fazer uma lista se “transformar“ numa cadeia de caracteres De quebra no próximo exemplo faremos

Cadeia de caracteres

Vejamos mais algumas operações que podemos fazer diretamente com o tipo str

● count(item_a) – conta o número de ocorrências de item_a da cadeia

● replace(item_a, item_b) – substitui todas as ocorrências de item_a por item_b

● find(item_a) – retorna o índice mais a esquerda onde item_a foi encontrado

Todos estes são métodos...

Page 33: Programação de Computadoresotton/graduacao/programacao/10_str... · Podemos fazer uma lista se “transformar“ numa cadeia de caracteres De quebra no próximo exemplo faremos

Cadeia de caracteres

...

Page 34: Programação de Computadoresotton/graduacao/programacao/10_str... · Podemos fazer uma lista se “transformar“ numa cadeia de caracteres De quebra no próximo exemplo faremos

Cadeia de caracteres

Mas aqui temos uma questão:

Se uma cadeia de caracteres é um tipo imutável, o que aconteceu quando usamos o replace?

Page 35: Programação de Computadoresotton/graduacao/programacao/10_str... · Podemos fazer uma lista se “transformar“ numa cadeia de caracteres De quebra no próximo exemplo faremos

Cadeia de caracteres

Mas aqui temos uma questão:

Se uma cadeia de caracteres é um tipo imutável, o que aconteceu quando usamos o replace?

Geramos uma outra cadeia de caracteres, ou seja, alocamos um espaço de memória diferente daquela cadeia original

Page 36: Programação de Computadoresotton/graduacao/programacao/10_str... · Podemos fazer uma lista se “transformar“ numa cadeia de caracteres De quebra no próximo exemplo faremos

Cadeia de caracteres

Um exercício:

Faça um programa em Python no qual se lê uma frase dada numa única cadeia de caracteres e que gere outra cadeia de caracteres sem os espaços em branco.

Page 37: Programação de Computadoresotton/graduacao/programacao/10_str... · Podemos fazer uma lista se “transformar“ numa cadeia de caracteres De quebra no próximo exemplo faremos

Cadeia de caracteres

Vamos introduzir mais algumas operações com cadeias de caracteres. Se cad é uma cadeia de caracteres:

● Fatiamento:

cad[n:m] gera uma cadeia do n-ésimo caracter ao m-ésimo caracter

cad[n:m:p] gera uma cadeia do n-ésimo caracter ao m-ésimo caracter deslocando de p em p

● min(cad) – retorna o menor elemento da cadeia

● max(cad) – retorna o maior elemento da cadeia

Page 38: Programação de Computadoresotton/graduacao/programacao/10_str... · Podemos fazer uma lista se “transformar“ numa cadeia de caracteres De quebra no próximo exemplo faremos

Cadeia de caracteres

...

Page 39: Programação de Computadoresotton/graduacao/programacao/10_str... · Podemos fazer uma lista se “transformar“ numa cadeia de caracteres De quebra no próximo exemplo faremos

Cadeia de caracteres

Observe que maior e menor aqui estão referidos aos valores da tabela ASCII e que o 'menor' caracter encontrado é o caracter espaço em branco, indicado na tabela ASCII como SP

Page 40: Programação de Computadoresotton/graduacao/programacao/10_str... · Podemos fazer uma lista se “transformar“ numa cadeia de caracteres De quebra no próximo exemplo faremos

Cadeia de caracteres

Vejamos como examinar uma cadeia de caracteres de várias maneiras, o que será útil para futuros exemplos e exercícios.

Aqui novamente suporemos estar trabalhando com uma cadeia de caracteres de nome cad

● cad.isnumeric() – retorna True se a cadeia é constituída de apenas caracteres numéricos

● cad.isspace() – retorna True se há somente espaços em branco

● cad.isalpha() – retorna True se há somente caracteres do alfabeto

● cad.isalnum() – retorna True se há somente caracteres alfanuméricos

Page 41: Programação de Computadoresotton/graduacao/programacao/10_str... · Podemos fazer uma lista se “transformar“ numa cadeia de caracteres De quebra no próximo exemplo faremos

Cadeia de caracteres

Observe que tais métodos podem ser, por exemplo, muito úteis em filtragem de dados de entrada

Page 42: Programação de Computadoresotton/graduacao/programacao/10_str... · Podemos fazer uma lista se “transformar“ numa cadeia de caracteres De quebra no próximo exemplo faremos

Cadeia de caracteres

● Este programa emitirá uma mensagem errada em algumas situações

Page 43: Programação de Computadoresotton/graduacao/programacao/10_str... · Podemos fazer uma lista se “transformar“ numa cadeia de caracteres De quebra no próximo exemplo faremos

Exercício

Este programa emitirá uma mensagem errada em algumas situações

Descubra quais e corrija

Page 44: Programação de Computadoresotton/graduacao/programacao/10_str... · Podemos fazer uma lista se “transformar“ numa cadeia de caracteres De quebra no próximo exemplo faremos

Cadeia de caracteres

Repare que encontramos uma maneira pela qual podemos manipular o conteúdo de uma cadeia de caracteres. Basta criar uma nova cadeia ou usar o recurso do

● list()

que cria uma lista a partir do colocado como seu argumento

Page 45: Programação de Computadoresotton/graduacao/programacao/10_str... · Podemos fazer uma lista se “transformar“ numa cadeia de caracteres De quebra no próximo exemplo faremos

Cadeia de caracteres

Page 46: Programação de Computadoresotton/graduacao/programacao/10_str... · Podemos fazer uma lista se “transformar“ numa cadeia de caracteres De quebra no próximo exemplo faremos

Cadeia de caracteres

Repare a forma com a qual imprimimos os elementos da lista antes e depois de modificarmos.

Em geral a operação do print() faz com que ao terminar a impressão solicitada, haja um salto para a próxima linha. Este salto é dado pelo uso de um caracter não imprimível.

Aqui substituímos o caracter padrão pelo espaço em branco numa impressão e por nenhum caracter para a outra impressão

Page 47: Programação de Computadoresotton/graduacao/programacao/10_str... · Podemos fazer uma lista se “transformar“ numa cadeia de caracteres De quebra no próximo exemplo faremos

Cadeia de caracteres

Também usamos uma gambiarra:

usamos o print() sem argumentos para forçar um salto de linha, já que, seja lá o que você pedir para imprimir, o print() saltará para a próxima linha

Page 48: Programação de Computadoresotton/graduacao/programacao/10_str... · Podemos fazer uma lista se “transformar“ numa cadeia de caracteres De quebra no próximo exemplo faremos

Cadeia de caracteres

Mas esta história de ficar criando cadeia de caracteres fica enchendo a memória do computador.

Para programas como estes do curso, isto não é um grande problema mas, se você estiver trabalhando com uma massa de dados maior, podemos aí ter problemas

● O próprio Python faz o que é chamado Coleta de Lixo mas um programador organizado age diretamente

Page 49: Programação de Computadoresotton/graduacao/programacao/10_str... · Podemos fazer uma lista se “transformar“ numa cadeia de caracteres De quebra no próximo exemplo faremos

Cadeia de caracteres

Python permite você liberar o espaço de memória ocupado por uma variável de maneira direta usando o

● del()

Page 50: Programação de Computadoresotton/graduacao/programacao/10_str... · Podemos fazer uma lista se “transformar“ numa cadeia de caracteres De quebra no próximo exemplo faremos

Cadeia de caracteres

Page 51: Programação de Computadoresotton/graduacao/programacao/10_str... · Podemos fazer uma lista se “transformar“ numa cadeia de caracteres De quebra no próximo exemplo faremos

Exercício

Crie um programa em Python que, dada uma cadeia de caracteres, gere outra cadeia de caracteres na qual não há vogais. Imprima as duas cadeias.

Page 52: Programação de Computadoresotton/graduacao/programacao/10_str... · Podemos fazer uma lista se “transformar“ numa cadeia de caracteres De quebra no próximo exemplo faremos

Exercício

Faça um programa em Python no qual se lê uma cadeia de caracteres com letras minúsculas e depois ordene as letras em ordem alfabética. Imprima o resultado.