Cadeias de Caracteres
Transcrição
Cadeias de Caracteres
Cadeias de Caracteres Jurandy Soares © Jurandy Soares, 2011 -- http://bit.ly/jurandy O Tipo Cadeia de Caracteres • Uma cadeia de caracteres (string em Inglês e str em Python) é uma sequência de caracteres • O tipo str é associado a variáveis que armazenam cadeias de caracteres • A tipo str em Python funciona como se fosse um tipo primitivo • Uma constante de cadeia de caracteres é constituída de um ou mais caracteres separados por aspas simples (') ou duplas(") ou por três aspas simples (''') ou duplas (""") • As aspas triplas são utilizadas para representar cadeias de caracteres com quebras de linha Exemplos: © Jurandy Soares, 2011 -- http://bit.ly/jurandy escola = 'Instituto Federal do Rio Grande do Norte' estado = "Rio Grande do Norte" temperatura = '36º C' cidades_grandes = '''Natal-RN Parnamirim-RN Mossoró-RN''' © Jurandy Soares, 2011 -- http://bit.ly/jurandy Variáveis Cadeias de Caracteres Criar e associar um valor a uma variável do tipo cadeia de caracteres: saudacoes = "Olá" Usar a variável como um argumento do tipo cadeia de caracteres em um comando: print(saudacoes) faz com que a cadeia Olá! seja exibida na tela © Jurandy Soares, 2011 -- http://bit.ly/jurandy Indexando Caracteres Dentro de uma Cadeia de Caracteres • O índice de um caractere em uma cadeia de caracteres é um inteiro que começa com 0 para o primeiro caracter e indica a posição do caracter. Por exemplo: cadeia = 'Esta é uma cadeia' E s t a 0 1 2 3 é 4 5 6 u m a 7 8 9 -8 -17 -16 -15 -14 -13 -12 -11 -10 -9 c a d e i a 10 11 12 13 14 15 16 -7 -6 -5 -4 -3 -2 -1 © Jurandy Soares, 2011 -- http://bit.ly/jurandy Funções • Uma função é uma operação com um nome e uma lista de argumentos (possivelmente vazia) • Uma função pode simplesmente executar uma ação ou ela pode retornar um valor • A chamada de uma função que não retorna valor é um comando, por exemplo: print('Olá quem quer que esteja aí!') A chamada de uma função que retorna um valor é uma expressão, por exemplo: n = input() © Jurandy Soares, 2011 -- http://bit.ly/jurandy Métodos • Um método é uma operação com um nome e uma lista de argumentos (possivelmente vazia) aplicada a um determinado objeto • A invocação de um método é feita da seguinte maneira: nomeDoObjeto.nomeDoMetodo(argumentos) • A invocação de um método pode simplesmente executar uma ação ou ela pode retornar um valor • A invocação de um método que não retorna valor é um comando, por exemplo: nomes = [] nomes.append('Maria') © Jurandy Soares, 2011 -- http://bit.ly/jurandy A invocação de um método que retorna um valor é uma expressão, por exemplo: nome = 'maria emília' nome.upper() © Jurandy Soares, 2011 -- http://bit.ly/jurandy Alguns Métodos para Cadeias de Caracteres • O tipo str tem muitos métodos que nos permitem manipular valores e variáveis do tipo cadeias de caracteres • Métodos de str são invocados com a seguinte sintaxe: varCadeia.nomeMétodo(argumentos) Exemplos: # ... © Jurandy Soares, 2011 -- http://bit.ly/jurandy Função Aplicável a Cadeias de Caracteres • len retorna o número de caracteres de uma dada cadeia, por exemplo: cadeia = 'Esta é uma cadeia' print(len(cadeia)) Qual é a saída? © Jurandy Soares, 2011 -- http://bit.ly/jurandy Obtenção do Elemento de uma Dada Posição varCadeia[pos] -> caracter da posição retorna o caracter na posição pos na cadeia dada, por exemplo: cadeia = 'Esta é uma cadeia' print(cadeia[0]) print(cadeia[1]) print(cadeia[5]) Qual é a saída? © Jurandy Soares, 2011 -- http://bit.ly/jurandy Obtenção do Elemento de uma Dada Posição (cont.) Lembrando... E s t a 0 1 2 3 é 4 5 6 u m a 7 8 9 -8 -17 -16 -15 -14 -13 -12 -11 -10 -9 c a d e i a 10 11 12 13 14 15 16 -7 -6 -5 -4 -3 -2 -1 A posição pode ser dada como um número positivo ou negativo. © Jurandy Soares, 2011 -- http://bit.ly/jurandy Entrada de um Único Caracter cadeia = input() caracter = cadeia[0] Nota: De fato, entra-se com uma linha inteira © Jurandy Soares, 2011 -- http://bit.ly/jurandy Fatiando Cadeias de Caracteres varCadeia[ini:fim] -> subcadeia retorna a cadeia que começa na posição ini e termina na posição (fim-1) da cadeia dada. varCadeia[ini:] -> subcadeia retorna uma cadeia que começa na posição ini e vai até o último caractere da cadeia dada. varCadeia[:fim] -> subcadeia retorna uma cadeia que começa na posição 0 e termina na posição (fim-1) da cadeia dada. varCadeia[ini:fim:passo] -> subcadeia retorna uma cadeia que começa na posição ini e termina na posição (fim-1) da cadeia dada, usando passo caracteres. © Jurandy Soares, 2011 -- http://bit.ly/jurandy Observação: ini, fim ou passo podem ser omissos quando os valores padrões forem assumidos: 0, len(varCadeia)-1 e 1, respectivamente. © Jurandy Soares, 2011 -- http://bit.ly/jurandy Exemplo de Fatiamento de Cadeias de Caracteres cadeia = 'Esta é uma cadeia' print(cadeia[0:4]) print(cadeia[5:7]) print(cadeia[0:16]) nome = 'Juliana Kelly' print(nome[:3]) print(nome[4:]) print(nome[1:6:2]) print(nome[:]) print(nome[::-1]) Qual é a saída do programa acima? © Jurandy Soares, 2011 -- http://bit.ly/jurandy Em Que Posição Encontra-se Subcadeia varCadeia.index(subcadeia) -> int retorna a posição da primeira ocorrência de subcadeia na cadeia dada ou apresenta um erro em tempo de execução, caso contrário varCadeia.find(subcadeia) -> int retorna a posição da primeira ocorrência de subcadeia na cadeia dada ou -1 se não encontrada, por exemplo: cadeia = 'Esta é uma cadeia' print(cadeia.index('Esta')) print(cadeia.index(' Esta')) print(cadeia.index('é')) print(cadeia.find(' é')) print(cadeia.find('ou')) print(cadeia.find(' ou')) © Jurandy Soares, 2011 -- http://bit.ly/jurandy Qual é a saída? © Jurandy Soares, 2011 -- http://bit.ly/jurandy Concatenando (Anexando) Cadeias O operador + pode ser usado para concatenar valores do tipo cadeia de caracteres, por exemplo: nome = 'Cíntia' saudacoes = 'Oi, ' + nome + '!' print(saudacoes) Atenção ao adicionar números à cadeia. Primeiro é necessário transformá-los em cadeias de caracteres. nome = 'Cíntia' idade = 15 saudacoes = 'Olá, ' + nome + '! Você tem ' + str(idade) + ' anos' print(saudacoes) © Jurandy Soares, 2011 -- http://bit.ly/jurandy Qual é a saída? © Jurandy Soares, 2011 -- http://bit.ly/jurandy Formatação de Cadeia de Caracteres varCadeia.format(arg1, arg2, argN) -> str Devolve uma cadeia de caracteres, substituindo "{0}" pelo valor de arg1, "{1}" pelo valor de arg2 e "{n}" pelo valor de argN, todos convertidos para sua representação como cadeia de caracteres. Os exemplos acima ficariam da seguinte maneira: nome = 'Cíntia' saudacoes = 'Oi, {0}!'.format(nome) print(saudacoes) nome = 'Cíntia' idade = 15 saudacoes = 'Olá, {0}! Você tem {1} anos'.format(nome, idade) © Jurandy Soares, 2011 -- http://bit.ly/jurandy print(saudacoes) © Jurandy Soares, 2011 -- http://bit.ly/jurandy Fazendo Mala-Direta com Cadeia de Caracteres Aquecimento: >>> convite = '''Olá {0}! Você está convidado(a) ao meu aniversário, que acontecerá no dia 07 de junho, às 21h00, no Hotel Thermas. (RSVP) Favor confirmar presença! Abraços, O aniversariante. ''' >>> print(convite.format('Manoel')) Encaixando a ideia acima em um laço: >>> convidados = 'Fulano', 'Beltrano', 'Cicrano' >>> for c in convidados: print(convite.format(c)) © Jurandy Soares, 2011 -- http://bit.ly/jurandy © Jurandy Soares, 2011 -- http://bit.ly/jurandy Caracteres de Fuga Como exibimos a seguinte cadeia? A palavra 'cobra' Isto produziria esse resultado? print('A palavra 'cobra'') Resposta: Não, isto daria um error de sintaxe -- o compilador veria 'A palavra ' entre o primeiro conjunto de aspas e ficaria confuso pelo que vem depois. Usa-se a barra invertida, "\", para fugir do significado especial das aspas simples: print('A palavra \'cobra\'') # ou print('A palavra "cobra"') © Jurandy Soares, 2011 -- http://bit.ly/jurandy Programa cadeiaCaracteres # Arquivo: cadeiacaracteres.py saudacao = "Olá turma!" comprimento = len(saudacao) print("O comprimento é", comprimento) caracter = saudacao[3] print("O caracter na posição 3 é", caracter) subcadeia = saudacao[1:3] print("Subcadeia[1..3] é", subcadeia) indice1 = saudacao.find("lá") print("O índice de \"lá\" é", indice1) indice2 = saudacao.find("lápis") print("O índice de \"lápis\" é", indice2) © Jurandy Soares, 2011 -- http://bit.ly/jurandy Qual é a Saída do Programa CadeiaCaracteres? • Análise os comandos de cadeiacaracteres e determine a saída produzida pelo programa. © Jurandy Soares, 2011 -- http://bit.ly/jurandy Sua Vez, Novamente! • Escreva um programa chamado quebranome, que pergunta ao usuário seu nome na forma Nome Sobrenome1 Sobrenome2 e exiba Nome, Sobrenome1 e Sobrenome1 em três linhas diferentes. • Em outras palavras, após o nome ser lido pela entrada, o programa precisa quebrá-lo em três pedados (Nome, Sobrenome1 e Sobrenome2) e exibir um por linha. © Jurandy Soares, 2011 -- http://bit.ly/jurandy Quebra Nome © Jurandy Soares, 2011 -- http://bit.ly/jurandy Listagem dos Principais Métodos da Classe str capitalize encode format isalnum isdecimal islower isprintable istitle join partition split startswith swapcase upper count endswith index isalpha isdigit isnumeric isspace isupper lower replace splitlines strip title © Jurandy Soares, 2011 -- http://bit.ly/jurandy Módulo string Use import string para utilizar o módulo string da biblioteca padrão de Python. Este módulo define algumas cadeias úteis: >> string.ascii_letters abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ >> string.ascii_lowercase abcdefghijklmnopqrstuvwxyz >> string.ascii_uppercase ABCDEFGHIJKLMNOPQRSTUVWXYZ >> string.capwords('o dia está ensolarado') 'O Dia Está Ensolarado' >> string.digits 0123456789 >> string.hexdigits 0123456789abcdefABCDEF © Jurandy Soares, 2011 -- http://bit.ly/jurandy >> string.maketrans <function maketrans at 0xb73d20ec> >> string.octdigits 01234567 >> string.printable 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~ >> string.punctuation !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~ >> string.whitespace © Jurandy Soares, 2011 -- http://bit.ly/jurandy Referências Estas transparências são adaptações para Python 3 de materiais de programação pegos da Internet. * http://www.cse.ohio-state.edu/cse201 © Jurandy Soares, 2011 -- http://bit.ly/jurandy