• Nenhum resultado encontrado

Departamento de Ciência da Computação Python 3.x Tipo de Dados String. Introdução à Ciência da Computação. Prof. Edison Ishikawa

N/A
N/A
Protected

Academic year: 2021

Share "Departamento de Ciência da Computação Python 3.x Tipo de Dados String. Introdução à Ciência da Computação. Prof. Edison Ishikawa"

Copied!
40
0
0

Texto

(1)

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

(2)

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ção

(3)

Dado 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

(4)

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

(5)

Classes e Objetos - Métodos

• No nosso exemplo a Classe Pessoa pode possuir os

seguintes 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

(6)

Classes, Objetos e Métodos

Exemplo

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

(7)

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?

(8)

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

(9)

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

(10)

Trabalhando com partes da string

• O operador de indexação (Python usa colchetes para

delimitar 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

(11)

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

(12)

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]

(13)

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]

(14)

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

(15)

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

(16)

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)

(17)

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

(18)

Fatiando strings

Departamen to de Ciência da Co mp ut ação

(19)

Fatiando 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

(20)

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’

(21)

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:

(22)

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!

(23)

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.

(24)

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

(25)

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

(26)

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

(27)

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

(28)

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 = 0

while indice < len(str): if str[indice] == ch: return indice

indice = indice + 1 return -1

(29)

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

(30)

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)

(31)

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.

(32)

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

(33)

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á.']

(34)

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

(35)

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”, “#”)

(36)

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

(37)

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

(38)

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

(39)

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

(40)

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

Referências

Documentos relacionados

Computadores em Java”, Livros Técnicos e Científicos Editora, 2003... “Java:

Como esses computadores se interligam para formar uma

Em função da forma de comunicação entre os processadores e o grau de Em função da forma de comunicação entre os processadores e o grau de compartilhamento da memória principal e

De acordo com Erber e Sayed-Ahmed (2005, p.100), considerando-se o país de origem, esta forma específica de outsourcing pode ser definida como a “realocação dos processos de

Retirado do Livro de William Stallings (Arquitetura e Organização de

Ementa: Fundamentos teóricos e práticos da interação ser humano-computador. Paradigmas de interação. Modelagem, projeto e concretização de interfaces. Modelos e frameworks

O projetista determina que é possível haver um aumento substancial na taxa de clock, mas esse aumento afetará o restante do projeto que da CPU, fazendo com que o

Ciência da Computação Doutorado Corina Maria Tedeschi Busnardo Efetivo 40h Letras Anglo-Portuguesas Doutorado Daniel dos Santos Kaster Efetivo Tide Bel. Ciência da Computação