Prévia do material em texto
COMPUTAÇÃO I Período 2020-2, turmas EN1 e EPT Professor: Aloísio Pina Caracteres Até hoje só trabalhamos com dados numéricos. Agora veremos como trabalhar com dados textuais. Strings São sequências de caracteres entre aspas, simples ou duplas. Exemplos: isso é uma string isso também é uma string Uma característica interessante das strings é que podemos trabalhar com elas de forma semelhante a listas. Acessando um caractere da string Cada caractere da string é também uma string, e pode ser acessado através de seu índice entre colchetes. Os índices da string começam sempre em zero. Exemplo: 'A' In [1]: s = "isso é uma string" In [2]: r = 'isso também é uma string' In [3]: print(s) print(r) In [4]: s = "FRASE" In [ ]: s = " F R A S E" | | | | | 0 1 2 3 4 In [5]: s[2] Out[5]: 'E' --------------------------------------------------------------------------- IndexError Traceback (most recent call last) <ipython-input-7-b5dece75d686> in <module> ----> 1 s[5] IndexError: string index out of range Cada caractere da string pode ser acessado também através de índices negativos, começando no final da string. Os índices negativos da string começam sempre em -1 (não começam em zero porque dessa forma o índice zero marcaria duas posições distintas na string). Exemplo: 'E' 'A' 'F' Observação: Podemos concluir que o primeiro caractere da string está sempre no índice zero e o último caractere da string está sempre no índice -1. Funções intrínsecas úteis len(s): retorna o número de caracteres da string s ("tamanho" da string) list(s): retorna uma lista de todos caracteres da string s str(x): retorna x convertido para string Exemplos: 5 In [6]: s[4] Out[6]: In [7]: s[5] In [ ]: s = " F R A S E" | | | | | -5 -4 -3 -2 -1 In [8]: s[-1] Out[8]: In [9]: s[-3] Out[9]: In [10]: s[-5] Out[10]: In [11]: s = "FRASE" In [12]: len(s) Out[12]: list(s) ['F', 'R', 'A', 'S', 'E'] '25' Acessando todos os caracteres da string Eventualmente pode ser interessante acessar todos os caracteres da string, um de cada vez. Isso é feito de forma iterativa usando um comando de repetição. Se a variável de controle do comando de repetição for usada como índice na string, a cada iteração acessaremos um dos caracteres. Considerando que a string tem n caracteres e os índices começam em zero então o índice final é n-1. Podemos determinar n com a função len, portanto para acessar todos os caracteres de uma string s temos: Com while: ou: Com for: ou: Exemplo: imprimir na tela todos os caracteres da string s: F R A S E In [13]: Out[13]: In [14]: str(25) Out[14]: In [ ]: i = 0 while i <= len(s)-1: comandos com s[i] i = i + 1 In [ ]: i = 0 while i < len(s): comandos usando s[i] i = i + 1 In [ ]: for i in range(len(s)): comandos usando s[i] In [ ]: for c in s: comandos usando c In [15]: i = 0 while i < len(s): print(s[i]) i = i + 1 F R A S E Operações básicas em strings 1) Concatenação: ligar o final de uma string ao início de outra string, formando uma nova string, usando o operador de concatenação +. Exemplo: 'ferrovia' 2) Repetição: repetir os caracteres de uma string um determinado número de vezes, formando uma nova string, usando o operador de repetição *. Exemplo: 'HUEHUEHUE' 'HUEHUEHUE' Substrings Podemos definir substrings de uma string, especificando os índices de início e fim: s[ início : fim ] é a substring que contém todos os caracteres de s entre os índices "início" e "fim". Exemplo: 'RA' Obs.: Se o índice de início não for especificado, é o início da string; se o índice de fim não for especificado é o fim da string. Exemplo: In [16]: for c in s: print(c) In [17]: "ferro" + "via" Out[17]: In [18]: "HUE" * 3 Out[18]: In [19]: 3 * "HUE" Out[19]: In [20]: s = "FRASE" s[1:3] Out[20]: In [ ]: s = " F |R A |S E" | | | | | 0 1 2 3 4 'FRA' 'ASE' 'FRASE' Alteração de strings Ao contrário de listas, strings são imutáveis, portanto não podemos fazer atribuição direta nem substituição em strings. Exemplo: --------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-24-fed5a321187a> in <module> 1 s = "FRASE" ----> 2 s[0] = 'C' TypeError: 'str' object does not support item assignment --------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-25-3d8081795c9d> in <module> 1 s = "FRASE" ----> 2 s[1:4] = "AGOT" TypeError: 'str' object does not support item assignment No entanto, podemos alterar o valor de uma variável, susbstituindo uma string por outra nova criada a a partir de concatenação. Exemplo: 'CRASE' 'FAGOTE' In [21]: s[:3] Out[21]: In [22]: s[2:] Out[22]: In [23]: s[:] Out[23]: In [24]: s = "FRASE" s[0] = 'C' In [25]: s = "FRASE" s[1:4] = "AGOT" In [26]: s = "FRASE" s = 'C' + s[1:] s Out[26]: In [27]: s = "FRASE" s = s[:1] + "AGOT" + s[4:] s Out[27]: Comparação de strings Uma das operações mais comuns entre strings é a comparação. Isso é feito usando-se os operadores relacionais que já conhecemos: ==, !=, >, <, >=, <=. Exemplo: False Obs.: o que está sendo comparado não é o tamanho da string. Exemplo: True Obs.: a comparação é "alfabética". Exemplo: True Obs.: as letras minúsculas são diferentes das maiúsculas. Exemplo: True Obs.: todas as letras maiúsculas vem antes das minúsculas. Exemplo: False True Isso acontece porque todos os caracteres possíveis estão listados em uma tabela e a comparação é feita considerando-se a posição dos caracteres na tabela. Existem duas funções intrínsecas usadas para acesso a tal tabela: chr(i): retorna o caractere na posição i da tabela ord(c): retorna o índice do caractere c na tabela In [28]: "A" == "B" Out[28]: In [29]: "F" > "ABCDE" Out[29]: In [30]: "A" <= "B" Out[30]: In [31]: "A" != "a" Out[31]: In [32]: "a" < "A" Out[32]: In [33]: "Z" < "a" Out[33]: Exemplos: 'Z' 97 Operador in Serve para determinar se uma dada string é ou não substring de outra. O resultado da operação é True se for, ou False se não for. Exemplo: True False No ex. anterior, o resultado é False porque embora 'R' e 'S' estejam em s, não são contíguos. False No ex. anterior, o resultado é False porque embora 'A' e 'R' estejam em s e sejam contíguos, não estão na mesma ordem. Caracteres especiais Iniciam com \ (não confundir com /, operador de divisão). '\n': final de linha '\t': tabulação '\\': caractere \ Exemplos: uma linha outra linha In [34]: chr(90) Out[34]: In [35]: ord('a') Out[35]: In [36]: s = "FRASE" "RAS" in s Out[36]: In [37]: "RS" in s Out[37]: In [38]: "AR" in s Out[38]: In [39]: print("uma linha\noutra linha") In [40]: print("Tabulações\tseparam\tpalavras\tem\tcolunas") Tabulações separam palavras em colunas 1 2 3 4 5 6 7 \ File "<ipython-input-42-dff1232de400>", line 1 print("\") ^ SyntaxError: EOL while scanning string literal Métodos úteis de strings s.find(sub) -> retorna o índice da primeira ocorrência da substring sub em s s.count(sub) -> retorna o número de ocorrências não sobrepostas da substring sub em s s.lower() -> retorna s em minúsculas s.upper() -> retorna s em maiúsculas s.replace(old, new, n) -> retorna s com as n primeiras ocorrências de old susbstituídas por new (todas, se n não for especificado) s.split(sep) -> retorna uma lista com todas as strings obtidas "quebrando" s nas ocorrências de sep s.join(L) -> retorna uma string composta pela concatenação de todas as strings na lista L, intercaladas por s Obs.: Como as strings são imutáveis, todos os métodos retornam um valor. Obs.: Para saber todos os métodos de listas, basta usar:help(str) Exemplos: 20 2 'o teu chamego é meu xodó, o teu xodó me faz um bem.' print("1\t2\t3\t4\t5\t6\t7") In [41]: print("\\") In [42]: print("\") In [43]: s = "O teu chamego é meu xodó, o teu xodó me faz um bem." In [44]: s.find('xodó') Out[44]: In [45]: s.count('xodó') Out[45]: In [46]: s.lower() Out[46]: 'O TEU CHAMEGO É MEU XODÓ, O TEU XODÓ ME FAZ UM BEM.' 'O teu chamego é meu xabú, o teu xodó me faz um bem.' 'O teu chamego é meu xabú, o teu xabú me faz um bem.' ['O teu cha', 'go é ', 'u xodó, o teu xodó ', ' faz um bem.'] 'A aula chegou ao fim.' In [47]: s.upper() Out[47]: In [48]: s.replace('xodó', 'xabú', 1) Out[48]: In [49]: s.replace('xodó', 'xabú') Out[49]: In [50]: s.split("me") Out[50]: In [51]: L = ["A", "aula", "chegou", "ao", "fim."] s = ' ' s.join(L) Out[51]: