Python 3.x
Tipo de Dados
String
Introdução à Ciência da Computação
Prof. Edison Ishikawa
Departamen to de Ciência da Co mpu tação
Sumário
•
String
- um tipo de
dado composto
(objeto)
•
Trabalhando como
uma coisa única
•
Trabalhando com suas
partes
•
Tamanho da string
•
Percorrendo a string
•
Fatiando a string
•
Comparando strings
•
Strings são
imutáveis
•
Uma função find
(encontrar)
•
Operações com
strings
•
Iterando e contando
•
O módulo string
•
Classificação de
caracteres
Departamen to de Ciência da Co mp ut açãoDado composto
• Até agora foram vistos 3 tipos diferentes de dados: int, float e string
• string: qualitativamente difere dos outros dois, pois são feitas de pedaços menores – caracteres
• Tipos que consistem de pedaços menores são chamados tipos de dados compostos
• Dependendo do que se queira fazer, pode-se tratar um tipo de dado composto como uma coisa única, ou pode ser útil acessar suas partes
Departamen to de Ciência da Co mp ut ação
Classes e Objetos
•
Programação Orientada a Objetos (POO) facilita a
escrita e manutenção dos programas
•
Classe
•
Definição de um novo tipo de dados que associa
dados e operações em uma só estrutura
•
Objeto
•
É uma instância de uma classe
•
Pode ser entendido como uma variável de um
tipo de classe
•
Exemplo:
• Classe: Pessoa
• Objeto: João, Maria etc
Departamen to de Ciência da Co mp ut ação
Classes e Objetos - Métodos
• No nosso exemplo a Classe Pessoa pode possuir osseguintes atributos:
• Nome
• Idade
• Em POO uma operação em um atributo de um objeto é feito por uma operação denominada método
• Por exemplo:
• Aumentar a idade do objeto Pessoa
• Criamos um método (função) que incrementa o atributo idade do objeto Pessoa • Inc_idade( ) idade += 1 Departamen to de Ciência da Co mp ut ação
Classes, Objetos e Métodos
Exemploclass Pessoa:
def __init__(self, nome): self.nome=nome
def idade(self, idade_atual): self.idade = idade_atual
def le_idade(self): return self.idade
def le_nome(self): return self.nome
gente1 = Pessoa("João") gente1.idade(21)
gente2 = Pessoa("Maria") Gente2.idade(18)
print(gente1.le_nome(), " tem ", gente1.le_idade(), “ anos.”)
print(gente2.le_nome(), " tem ", gente2.le_idade(), “ anos.”)
João tem 21 anos. Maria tem 18 anos.
Departamen to de Ciência da Co mp ut ação Para acessar um método usamos a notação . (ponto)
Trabalhando como uma coisa única
• Toda string é um objeto, como o exemplo gente1 e gente 2 do slide anterior, ou seja:
• Tem seus atributos e
• Ex Pessoa: gente1.idade(21)
• Seus próprios métodos.
• Ex Pessoa: gente2.le_nome() Departamen to de Ciência da Co mp ut ação
Exemplo objeto string
>>> minha_string = “Hello, World!”
>>> tudo_maiusculo = minha_string.upper() >>> tudo_maiusculo ‘HELLO, WORLD!’ O que acontece com minha_string?
Trabalhando como uma coisa única
• Existem outro métodos como lower, capitalize e swapcase que fazem outras coisas interessantes
• Para ver quais métodos estão disponíveis, consulte a documentação do Help, procurando por métodos para strings e leia a documentação do Python
• Ou se estiver com preguiça, simplesmente digite o seguinte código Departamen to de Ciência da Co mp ut ação
Trabalhando como uma coisa única
• Quando se digita o nome do método, mais ajuda aparece como os parâmetros do método
Departamen to de Ciência da Co mp ut ação
Trabalhando com partes da string
• O operador de indexação (Python usa colchetes paradelimitar o índice) seleciona um único caractere que é uma substring de uma string
• Entretanto, é importante notar que letra[1] refere-se à letra número 1 da string e não à primeira letra (de fato é a segunda) Departamen to de Ciência da Co mp ut ação Exemplo: >>>fruta = “banana” >>>letra = fruta[1] >>>print(letra) a
A expressão fruta[1] seleciona o caractere número 1 de fruta
A variável letra armazena o resultado da expressão
Trabalhando com partes da string
• Índice (index)• É a expressão entre colchetes [ ]
• Especifica um membro de uma coleção ordenada
• Neste caso, a coleção de caracteres em uma string
• Indica que membro da coleção você quer
• Pode ser qualquer expressão inteira
• Note que o índice retorna uma string
• Python não tem um tipo especial para caracter.
• Caracter é apenas uma string de comprimento 1
Departamen to de Ciência da Co mp ut ação Exemplo >>>fruta = “banana” >>>list(enumerate(furta))
Tamanho (length)
• Já que começamos a contar do zero, as seis letras são numeradas de 0 a 5.
• Qual foi o erro!
Departamen to de Ciência da Co mp ut ação Exemplo >>>fruta = “banana” >>>tamanho = len(fruta) >>>ultima = fruta[tamanho]
Traceback (most recent call last):
File "<pyshell#3>", line 1, in <module> ultima = fruta[tamanho]
Tamanho (length)
• Para pegar o último caractere, temos que subtrair 1 de comprimento:
• A contagem começa do zero!
• Como alternativa, podemos usar índices negativos, os quais contam de trás pra frente os elementos da string. A expressão fruta[-1] resulta a última letra, fruta[-2] resulta a penúltima (a segunda de trás para frente), e assim por diante.
Departamen to de Ciência da Co mp ut ação Exemplo >>>fruta=“banana” >>>tamanho = len(fruta) >>>ultima = fruta[tamanho – 1]
Percorrendo a string toda
• É muito comum se percorrer a string toda, caracter a caracter, para fazer alguma coisa: Contar, Achar, etc. • E a gente, normalmente, inicia do começo!
• Seleciona cada caracter
• Faz operações com cada caracter
• E faz isto até o fim
• Este padrão de processamento é conhecido como
traversal
• Uma maneira de fazer um traversal (muito ruim por sinal) é codificar um traversal com o comando while
Departamen to de Ciência da Co mp ut ação Exemplo i = 0 while i < len(fruta): letra = frita[ i ] print(letra) i += 1
Percorrendo a string toda
• Este loop atravessa a string e mostra cada letra em uma linha
• Usa i como índice, o que não torna o código mais legível • A condição do loop é i < len(fruta)
• Logo, quando i é igual ao comprimento da string a codição fica falsa e o corpo do loop não é mais executado
• O último caracter acessado é um índice len(fruta) -1, que é o último caracter da string
• Só que este código é muito mais longo do que o necessário e não é muito claro
Departamen to de Ciência da Co mp ut ação Exemplo i = 0 while i < len(fruta): letra = frita[ i ] print(letra) i += 1
Percorrendo a string toda
• É muito mais fácil e claro usar o loop for• A cada iteração do loop for o próximo caracter da string é atribuída à variavel letra
• O loop continua até a última letra
• Perceberam a expressividade, o poder de comunicar o que se quer fazer do loop for em comparação com o loop while Departamen to de Ciência da Co mp ut ação Exemplo fruta = “banana”
for letra in fruta: print(letra)
Percorrendo a string toda
• Podemos também utilizar concatenação e um loop for para produzir uma série de nomes listados em ordem alfabética: Departamen to de Ciência da Co mp ut ação Exemplo prefixos = "JKLMN" sufixo = "ack"
for letra in prefixos:
print (letra + sufixo)
Saída Jack Kack Lack Mack Nack
Fatiando strings
Departamen to de Ciência da Co mp ut açãoFatiando strings
• Um segmento de uma string é chamado de uma fatia.
• Selecionar uma fatia é similar a selecionar um caractere:
Departamen to de Ciência da Co mp ut ação Exemplo
>>> disciplina = "Introdução à Ciência da Computação" >>> print(disciplina[0:10]) Introdução >>> print(disciplina[11:12]) à >>>print(disciplina[13:20]) Ciência >>>print(disciplina[21:33]) da Computação
Fatiando strings
• Este comportamento não é intuitivo. Faz mais sentido imaginar que os índices apontam para os intervalos entre os caracteres:
• Se o primeiro índice for omitido (antes dos dois pontos ‘:’), a fatia começa no início da string. Se o segundo for omitido, a fatia vai até o fim da string:
Departamen to de Ciência da Co mp ut ação Exemplo >>> fruta = "banana" >>> fruta[:3] ’ban’ >>> fruta[3:] ’ana’
Comparação de strings
• O operador de comparação funciona com strings. Para ver se duas strings são iguais:
• Outras operações de comparação são úteis para colocar palavras em ordem alfabética:
Departamen to de Ciência da Co mp ut ação Exemplo if palavra == "banana":
print ("Sim, nós não temos bananas!")
Exemplo
if palavra < "banana":
print ("Sua palavra," + palavra + ", vem antes de banana.")
elif palavra > "banana":
print ("Sua palavra," + palavra + ", vem depois de banana.")
else:
Strings são imutáveis
• É tentador usar o operador [ ] no lado esquerdo de uma expressão de atribuição, com a intenção de alterar um caractere em uma string:
• Em vez de produzir a saída Elô, Mundo!, este código produz o erro em tempo de execução (runtime error):
TypeError: object doesn’t support item assignment
(ErroDeTipo: objeto não dá suporte à atribuição de item.) Departamen to de Ciência da Co mp ut ação Exemplo
saudacao = "Alô, mundo!" saudacao[0] = ’E’ # ERRO!
Strings são imutáveis
• Strings são imutáveis, o que significa que você não pode mudar uma string que já existe. O melhor que se pode fazer é criar uma nova string que seja uma variação da original: Departamen to de Ciência da Co mp ut ação Exemplo
saudacao = "Alô, mundo!"
novaSaudacao = ’E’ + saudação[1:]
print (novaSaudacao)
A solução aqui é concatenar uma nova primeira letra
com uma fatia de saudacao. Esta operação não tem nenhum efeito sobre a string original.
Operadores
in
and
not in
• O operado in testa se a string pertence a outra string
Departamen to de Ciência da Co mp ut ação Exemplo >>> “p” in “apple” True >>> “i” in “apple” False >>> “ap” in “apple” True >>> “pa” in “apple” False >>> “a” in “a” True >>> “apple” in “apple” True
Operadores
in
and
not in
• O operador not in retorna o oposto lógico de in:
Departamen to de Ciência da Co mp ut ação Exemplo >>> “x” not in “apple” True
Operadores
in
and
not in
• Combinando o operador in com concatenação de string usando +, pode-se escrever uma função que remove todas as vogais da string
Departamen to de Ciência da Co mp ut ação Exemplo def remove_vogais(frase): vogais = “aeiou” string_sem_vogal = “” for letra in frase:
if letra.lower() not in vogais: string_sm_vogal += letra return string_sem_vogal
Para remover vogais Maiúculas e
A função
find( )
•
find (encontrar) pode ser entendida como o
oposto do operador [].
•
•Em vez de pegar um índice e extrair o
caractere correspondente, ela pega um
caractere e encontra em qual índice aquele
caractere aparece.
•
•Se o caractere não é encontrado, a função
sai do loop e retorna -1.
Departamen to de Ciência da Co mp ut ação Exemplo def find(str, ch): indice = 0
while indice < len(str): if str[indice] == ch: return indice
indice = indice + 1 return -1
A função
find( )
•
Este é o primeiro exemplo que vemos de uma
instrução return dentro de um loop. Se
str[indice] == ch, a função retorna
imediatamente, abandonando o loop
prematuramente.
•
•Tal padrão de computação é às vezes
chamado de travessia “eureka”, porque tão
logo o programa encontra o que está
procurando, ele pode gritar “Eureka!” e parar
de procurar.
Departamen to de Ciência da Co mp ut ação Exemplo def find(str, ch): indice = 0while indice < len(str): if str[indice] == ch: return indice
indice = indice + 1 return -1
Iterando e contando
• Este programa conta o número de vezes que a letra a aparece em uma string
• Demonstra o padrão de computação chamado de contador.
• A variável contador é inicializada em 0 e então incrementada cada vez que um a é encontrado.
• (Incrementar é o mesmo que aumentar em um; é o oposto de decrementar)
• Quando se sai do loop, contador guarda o resultado - o número total de a’s
Departamen to de Ciência da Co mp ut ação Exemplo fruta = "banana" contador = 0
for letra in fruta: if letra == ’a’
contador = contador + 1
O módulo string
• O módulo string contém funções úteis que manipulam strings. Conforme é usual, nós temos que importar o módulo antes que possamos utilizá-lo:
• O módulo string inclui uma função chamada find que faz a mesma coisa que a função que escrevemos. Para
chamá-la, usamos a notação de ponto:
• Este exemplo demonstra um dos benefícios dos
módulos - eles ajudam a evitar colisões entre nomes de funções nativas e nomes de funções definidas pelo
usuário. Usando a notação de ponto podemos especificar que versão de find nós queremos.
Departamen to de Ciência da Co mp ut ação Exemplo >>> import string >>> fruta = "banana"
>>> indice = string.find(fruta, "a")
>>> print (indice)
O módulo string
• De fato, string.find é mais generalizada que a nossa versão. Primeiramente, ela pode encontrar substrings, não apenas caracteres:
• Além disso, ela pode receber um argumento adicional que especifica o índice pelo qual ela deve começar sua procura:
• Ou ela pode receber dois argumentos adicionais que especificam o intervalo de índices:
Departamen to de Ciência da Co mp ut ação >>> string.find("banana", "na") 2 >>> string.find("banana", "na", 3) 4 >>> string.find("bob", "b", 1, 2) -1
a busca falha porque a letra b não aparece no intervalo entre 1 e 2 (não incluindo o 2) do índice.
Classificação de caracteres
• Muitas vezes é útil examinar um caractere e testar se eleé maiúsculo ou minúsculo, ou se ele é um caractere ou um dígito.
• O módulo string oferece várias constantes que são úteis para esses propósitos.
• Por exemplo, string.lowercase contém todas as letras que o sistema considera como sendo minúsculas e string.uppercase contém todas as letras maiúsculas.
Departamen to de Ciência da Co mp ut ação Exemplo >>> print(string.ascii_letters) abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ >>> print(string.ascii_uppercase) ABCDEFGHIJKLMNOPQRSTUVWXYZ >>>print(string.ascii_lowercase) abcdefghijklmnopqrstuvwxyz >>> print(string.digits) 0123456789
O método split
• Método muito útil que separa uma string com muitas palavras em uma lista de palavras individuais,
removendo todos os espaços em branco entre elas
Departamen to de Ciência da Co mp ut ação Exemplo
>>> frase = "Quem a paca cara compra, paca cara pagará." >>> palavras = frase.split()
>>> palavras
['Quem', 'a', 'paca', 'cara', 'compra,', 'paca', 'cara', 'pagará.']
Limpando a string
• Exercício 1• Frequentemente mainpulamos strings com símbolos de pontuação (.,;!?@#$%¨&...) ou formatação (\t ou \n).
• No entanto, se nosso programa conta a frequência das palavras ou confere a sua pronúncia, é melhor filtrar estes caracteres.
• Faça um programa que filtre a string, tirando todos os outros símbolos, ficando só as palavras e o espaço em branco entre elas.
Departamen to de Ciência da Co mp ut ação
Formatando strings
• Método format• Python 3.x introduziu uma nova forma de representar máscaras em strings.
• Essa nova versão é mais poderosa que as tradicionais mácaras que utilizam a combinação de %d, %s e %f.
• A nova forma representa valores entre chaves:
• O número entre colchetes é uma referência aos parâmetros passados ao método format, onde 0 é o primeiro parâmetro, 1 o segundo e assim por diante
• Uma das vantagens desta nova sintaxe é poder utilizar o mesmo parâmetro duas vezes.
Departamen to de Ciência da Co mp ut ação Exemplo
>>> "{0} {1}".format("Alô", "Mundo!")
'Alô Mundo!'
>>> "{0} x {1} R${2}".format(5, "maçã", "1.20")
'5 x maçã R$1.20'
>>> “{0} – {1} – {0}”.format(“#”, “UnB”, “#”)
Formatando números
• Método format• Colocando zeros à esquerda
• “{0:05}.format(5), fica ‘000005’
• Preenchendo com outros caracteres
• “{0:#=7}.format(5), fica '######5‘
• Separando milhares
• "{0:10,}".format(75775732), fica '75,775,732‘
• Consulte o manual do Python 3.x para outras formatações Departamen to de Ciência da Co mp ut ação
Exercício 2
• Escreva uma função que dada uma string a escreva de trás para a frente (reverte a string)
• Exemplo: • Entrada: • “Python” • Saída • “nohtyP” Departamen to de Ciência da Co mp ut ação
Exercício 3
• Escreva uma função que espelhe o seu argumento
• Exemplo: • Entrada • “Python” • Saída • “PythonnohtyP” Departamen to de Ciência da Co mp ut ação
Exercício 4
• Escreva uma função que reconheça palíndromos
• Palíndromos são palavras ou frases que podem ser lidas
da esquerda para a direita ou da direita para a esquerda.
• Dica: use a função que reverte a string para facilitar
• Exemplo: • Entrada • “Ana” • “Roma” • “omissíssimo” • Saída • True • False • True Departamen to de Ciência da Co mp ut ação
Bibliografia
• How to Think Like a Computer Scientist: Learning
with Python 3 – Documentation - Release 3rd Edition
• Peter Wentworth, Jeffrey Elkner,Allen B. Downey and
Chris Meyers • Apr 26, 2017 Departamen to de Ciência da Co mp ut ação