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]: