Manipulando Strings - Python
Uma string representa uma sequência de caracteres em codificação Unicode, delimitada por aspas. Para definir strings, o Python permite usar tanto aspas simples quanto aspas duplas:
message = "Hello World!"
print(message) # Hello World!
name = 'Tom'
print(name) # Tom
Se a string for longa, você pode dividi-la em partes e colocá-las em diferentes linhas de código. Nesse caso, toda a string é colocada entre parênteses, e suas partes individuais são delimitadas por aspas:
text = ("Laudate omnes gentes laudate "
"Magnificat in secula ")
print(text)
Se quisermos definir um texto multilinha, podemos usar aspas triplas, sejam elas simples ou duplas:
'''
Este é um comentário
'''
text = '''Laudate omnes gentes laudate
Magnificat in secula
Et anima mea laudate
Magnificat in secula
'''
print(text)
Ao usar aspas triplas, não as confunda com comentários: se o texto entre aspas triplas é atribuído a uma variável, ele é uma string, não um comentário.
Sequências de escape em strings
Uma string pode conter vários caracteres especiais: sequências de escape. Algumas delas são:
: permite adicionar uma barra invertida (\\
) dentro da string\
: permite adicionar uma aspa simples dentro da string\'
: permite adicionar uma aspa dupla dentro da string\"
: adiciona uma nova linha\n
: adiciona uma tabulação (quatro espaços)\t
Vamos usar algumas dessas sequências:
text = "Message:\n\"Hello World\""
print(text)
Saída no console:
Message: "Hello World"
Embora essas sequências possam nos ajudar em algumas situações, como inserir aspas na string, fazer tabulações ou quebras de linha, elas também podem atrapalhar. Por exemplo:
path = "C:\python\name.txt"
print(path)
Aqui, a variável path
\n
C:\python ame.txt
Para evitar essa situação, colocamos o prefixo r
path = r"C:\python\name.txt"
print(path)
Inserindo valores em strings
O Python permite inserir valores de outras variáveis dentro de uma string. Para isso, colocamos as variáveis entre chaves {}
f
userName = "Tom"
userAge = 37
user = f"name: {userName} age: {userAge}"
print(user) # name: Tom age: 37
Neste caso, {userName}
userName
{userAge}
userAge
Acessando caracteres de uma string
Podemos acessar caracteres individuais de uma string usando índices entre colchetes:
string = "hello world"
c0 = string[0] # h
print(c0)
c6 = string[6] # w
print(c6)
c11 = string[11] # IndexError: string index out of range
print(c11)
A indexação começa em zero, então o primeiro caractere da string tem índice 0. Se tentarmos acessar um índice que não existe na string, receberemos uma exceção IndexError
Para acessar caracteres a partir do final da string, podemos usar índices negativos. Por exemplo, o índice -1 representa o último caractere, -2 o penúltimo, e assim por diante:
string = "hello world"
c1 = string[-1] # d
print(c1)
c5 = string[-5] # w
print(c5)
Ao trabalhar com caracteres, é importante lembrar que strings são imutáveis; portanto, se tentarmos alterar um caractere individual, receberemos um erro, como no exemplo a seguir:
string = "hello world"
string[1] = "R" # TypeError: 'str' object does not support item assignment
Só podemos redefinir completamente o valor da string, atribuindo-lhe um novo valor.
Percorrendo uma string
Podemos percorrer todos os caracteres de uma string usando um loop for
string = "hello world"
for char in string:
print(char)
Extraindo substrings
Se necessário, podemos extrair não apenas caracteres individuais, mas também substrings. Para isso, usamos a seguinte sintaxe:
: extrai uma sequência de caracteres desde o índice 0 até o índicestring[:end]
(não incluindoend
)end
: extrai caracteres do índicestring[start:end]
atéstart
(não incluindoend
)end
: extrai caracteres do índicestring[start:end:step]
atéstart
(não incluindoend
), pulando deend
emstep
step
Vamos usar todas as variantes de extração de substrings:
string = "hello world"
# do índice 0 até o 5
sub_string1 = string[:5]
print(sub_string1) # hello
# do índice 2 até o 5
sub_string2 = string[2:5]
print(sub_string2) # llo
# do índice 2 ao 9, pulando de dois em dois
sub_string3 = string[2:9:2]
print(sub_string3) # lowr
Concatenando strings
Uma das operações mais comuns com strings é a concatenação. Para unir strings, usamos o operador de adição:
name = "Tom"
surname = "Smith"
fullname = name + " " + surname
print(fullname) # Tom Smith
Concatenar duas strings é simples, mas e se quisermos juntar uma string com um número? Nesse caso, precisamos converter o número em string usando a função str()
name = "Tom"
age = 33
info = "Name: " + name + " Age: " + str(age)
print(info) # Name: Tom Age: 33
Repetindo strings
Para repetir uma string várias vezes, usamos o operador de multiplicação:
print("a" * 3) # aaa
print("he" * 4) # hehehehe
Comparando strings
É importante falar sobre a comparação de strings. A comparação é feita em ordem lexicográfica. Ao comparar strings, os caracteres e seus casos (maiúsculas/minúsculas) são considerados. Por exemplo, um dígito é considerado menor que qualquer letra alfabética. Uma letra maiúscula é considerada menor que uma letra minúscula. Por exemplo:
str1 = "1a"
str2 = "aa"
str3 = "Aa"
print(str1 > str2) # False, já que o primeiro caractere de str1 é um dígito
print(str2 > str3) # True, pois o primeiro caractere de str2 é minúsculo
Portanto, a string "1a"
"aa"
"1a"
"2a"
Se os primeiros caracteres forem letras do alfabeto no mesmo caso, a comparação segue a ordem alfabética. Assim, "aa"
"ba"
"ba"
"ca"
Se os primeiros caracteres forem iguais, os segundos caracteres são comparados, se existirem.
A sensibilidade ao caso nem sempre é desejável, pois podemos estar lidando com strings essencialmente iguais. Nesse caso, antes de comparar, podemos converter ambas as strings para o mesmo caso.
A função lower()
upper()
str1 = "Tom"
str2 = "tom"
print(str1 == str2) # False - as strings não são iguais
print(str1.lower() == str2.lower()) # True
Funções ord e len
Como as strings contêm caracteres Unicode, podemos usar a função ord()
print(ord("A")) # 65
Para obter o comprimento de uma string, usamos a função len()
string = "hello world"
length = len(string)
print(length) # 11
Buscando em uma string
Com a expressão termo in string
termo
string
True
False
text = "hello world"
exist = "hello" in text
print(exist) # True
exist = "sword" in text
print(exist) # False
Da mesma forma, usando o operador not in
text = "hello world"
print("hello" not in text) # False
print("sword" not in text) # True