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

Post on 18-Jul-2020

0 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Programação de Computadores

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

Otton Teixeira da Silveira Filho

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

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

Tabela ASCII

Caracteres - 1 B

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.

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

...

Exemplos com caracteres

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

Mais um exemplo com caracteres

...

Exemplos com caracteres

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

Exemplos com caracteres

Podemos acessar os elementos do tipo str pelo seus índices

Exemplos com caracteres

...

Cadeia de caracteres

Outra maneira é trabalharmos nossa entrada como lista

Exemplos com cadeias de caracteres

...

Cadeias de caracteres

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

● Isto é devido ao split()

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

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

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

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’)

Operador in

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

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

Operador in

Exemplos:

● ‘o‘ in “Tom“ retornará True

● ‘t‘ in “Tom“ retornará False

Operador in

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

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

Exemplos com cadeias de caracteres

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

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

Cadeias de caracteres

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

Cadeia de caracteres

Cadeia de caracteres

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

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

Cadeia de caracteres

...

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?

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

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.

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

Cadeia de caracteres

...

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

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

Cadeia de caracteres

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

Cadeia de caracteres

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

Exercício

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

Descubra quais e corrija

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

Cadeia de caracteres

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

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

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

Cadeia de caracteres

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

● del()

Cadeia de caracteres

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.

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.

top related