Pular para o conteúdo

String

Definição

Uma string é uma sequência indexada de caracteres.

curso = 'Bacharelado em Sistemas de Informação'
print(curso[0])
print(curso[9])
print(curso[4:13])
print(curso)

O exemplo mostra que é possível acessar um único caractere, um conjunto de caracteres ou a string completa.

B
d
arelado e
Bacharelado em Sistemas de Informação

Para definir uma string, pode-se usar aspas simples ou aspas duplas. Também pode-se usar tripla aspas para strings multilinhas.

curso1 = 'Bacharelado em Sistemas de Informação'
curso2 = "Bacharelado em Sistemas de Informação"
curso3 = '''Bacharelado em
Sistemas
de Informação'''
curso4 = """Bacharelado em
Sistemas
de Informação"""

print(curso1)
print(curso2)
print(curso3)
print(curso4)

Abaixo o resultado da execução.

Bacharelado em Sistemas de Informação
Bacharelado em Sistemas de Informação
Bacharelado em
Sistemas
de Informação
Bacharelado em
Sistemas
de Informação

Caracteres de escape

Na computação existe um conjunto de caracteres especiais chamados de caracteres de escape. Esses caracteres permitem uma interpretação diferenciada na hora da execução.

Um caractere de escape consiste de uma barra invertida seguida por uma letra ou por combinações de dígitos. A tabela abaixo fornece alguns exemplos.

Caractere de escapeSignificado
\’Aspas simples
\”Aspas duplas
\nNova linha
\tTabulação
\\Barra invertida
\uCódigo Unicode

No exemplo abaixo, uma frase de Clarice Lispector é colocada entre aspas (a string contém aspas).

frase = '\'Liberdade é pouco. O que eu desejo ainda não tem nome.\' - Clarice Lispector'
print(frase)

O resultado é

'Liberdade é pouco. O que eu desejo ainda não tem nome.' - Clarice Lispector

Para ignorar os caracteres de escape e exibir qualquer barra invertida que a string possuir, basta inserir r antes das aspas da string. O termo r vem de raw string (string pura).

print(r'\'Liberdade é pouco. O que eu desejo ainda não tem nome.\' - Clarice Lispector')

Veja que agora a barra invertida aparece na impressão da string.

\'Liberdade é pouco. O que eu desejo ainda não tem nome.\' - Clarice Lispector

Unicode

Uma string é na realidade uma sequência de caracteres UNICODE (codificados em UTF-8 por padrão) em Python 3. Isto significa que cada caractere de uma string é representado por U+ seguido por 4 a 6 dígitos hexadecimais (atualmente existem mais de um milhão de caracteres definidos na tabela Unicode) . Por exemplo,

  • A é U+0041
  • a é U+0061
  • Ç é U+00C7
  • ç é U+00E7
  • zero é U+0030
  • 1 é U+0031
  • $ é U+0024
  • % é U+0025
  • & é U+0026

Podemos usar o caractere de escape \u para verificar os exemplos acima.

print('\u0041', '\u0061', '\u00C7', '\u00E7', '\u0030', '\u0031', '\u0024', '\u0025', '\u0026')

A resposta é

A a Ç ç 0 1 $ % &

Índices

A string pode ser indexada da esquerda para a direita (índices positivos começando com zero) ou pode ser indexada da direita para a esquerda (índices negativos começando em -1).

O exemplo seguinte mostra como acessar um mesmo caractere ou um conjunto de caracteres usando índices positivos e índices negativos.

curso = 'Bacharelado em Sistemas de Informação'
print('curso[0] =', curso[0])
print('curso[-37] =', curso[-37])
print('curso[36] =', curso[36])
print('curso[-1] =', curso[-1])
print('curso[2:6] =', curso[2:6])
print('curso[-35:-31] =', curso[-35:-31])

Abaixo a resposta obtida.

curso[0] = B
curso[-37] = B
curso[36] = o
curso[-1] = o
curso[2:6] = char
curso[-35:-31] = char

É possível também usar o índice direto com a string, sem precisar criar uma variável. Por exemplo,

print("UNIRIO"[3])

tem como resposta:

R

Slice

Como vimos acima, é possível extrair uma fatia (slice) de uma string. Três parâmetros podem ser definidos em uma extração.

string[início:fim:incremento]

Um exemplo é mostrado a seguir.

curso = 'Bacharelado em Sistemas de Informação'
print('* 1 - ', curso[5:10])
print('* 2 - ', curso[0:20:3])
print('* 3 - ', curso[::2])
print('* 4 - ', curso[10::2])
print('* 5 - ', curso[:20:2])
print('* 6 - ', curso[-1:-11:-1])

O resultado da execução é mostrado abaixo. Quando início não é definido, assume-se o valor zero. Quando fim não é definido, assume-se até o final do string. Quando incremento não é definido, assume-se o valor 1. É possível percorrer a string da direita para a esquerda, basta definir um valor negativo para incremento.

* 1 - relad
* 2 - BhedeSt
* 3 - Bcaeaoe itmsd nomço
* 4 - oe itmsd nomço
* 5 - Bcaeaoe it
* 6 - oãçamrofnI

Em relação ao índice fim, é interessante fazer uma observação. No exemplo abaixo, a string possui 37 caracteres. Portanto, a última caractere da string tem o índice 36. No primeiro comando print(), o índice fim é explicitamente definido. No segundo comando print(), não é dado um valor para o índice fim, logo deve-se considerar até a última posição da string.

curso = 'Bacharelado em Sistemas de Informação'
print('* 1 - ', curso[27:36])
print('* 2 - ', curso[27:])O resultado abaixo mostra que os comandos são diferentes.

Os dois comandos print() mostram diferentes resultados. No primeiro comando, a extração vai de 27 a 35. No segundo comando, a extração vai de 27 a 36. A explicação é simples: quando o índice não é definido, a execução é feita até descobrir que não há mais caracteres a serem processados.

* 1 - Informaçã
* 2 - Informação

Concatenação e Repetição

É possível juntar uma string com outras strings usando o operador ‘+’. Para juntar uma string com um número é preciso converter primeiro o número em uma string.

Para repetir uma string mais de uma vez pode-se usar o operador ‘*’.

a = 'teste '
b = 'de '
c = 'string '
print(a + b + c)
print(a + str(100))
print(c + str(3.4))
print(c * 5)

Veja que o último comando multiplica uma string por 5. Como resultado temos a mesma string repetida 5 vezes.

teste de string
teste 100
string 3.4
string string string string string

Operadores

É possível usar os operadores in e not in com strings.

curso = 'Bacharelado em Sistemas de Informação'
print('Sistemas' in curso)
print('sistemas' in curso)
print('sistemas' not in curso)

O primeiro resultado do programa acima é True, o segundo é False e o terceiro é True, pois Python é case sensitive (diferencia letras maiúsculas de letras minúsculas)

Métodos

Existem vários métodos que podem ser usados com strings. Abaixo alguns exemplos.

  • str() – converte um determinado valor em string;
  • len() – retorna o tamanho da string;
  • count() – informa a quantidade de vezes que um caractere ou um conjunto de caracteres aparece na string;
  • find() – identifica a posição de uma determinada caractere ou de um determinado conjunto de caracteres;
  • split() – divide uma string usando um separador fornecido;
  • join() – junta strings;
  • upper() – converte todas as letras de uma string para maiúsculas;
  • lower() – converte todas as letras de uma string para minúsculas;
  • swapcase() – transforma letras maiúsculas em minúsculas e letras minúsculas em maiúsculas;
  • format() – formata e adiciona valores à string;
  • replace() – substitui caracteres na string.

O método str() pede a especificação do objeto a ser convertido para uma string. Veja o exemplo abaixo onde a é uma string, b é um número real e c é um número inteiro.

a = 'Python'
b = 3.8
c = 5
print(a + ' ' + str(b) + '.' + str(c))

A resposta obtida com a execução é

Python 3.8.5

Se os objetos float e int não tivessem sido convertidos em string, o programa teria apresentado erro.

Abaixo é mostrado exemplos dos métodos comentados acima.

nome ='Bacharelado em Sistemas de Informação'
print('* 1 - Tamanho da string =', len(nome))
print('* 2 - Número de vezes que a letra a aparece =', nome.count('a'))
print('* 3 - Posição de Sistemas na string =', nome.find('Sistemas'))
print('* 4 - Separa palavras da string =', nome.split(' '))
print('* 5 - Junta strings =', ' * '.join(('BSI', 'EIA', 'UNIRIO')))
print('* 6 - Letras maiúsuculas =', nome.upper())
print('* 7 - Letras minúsculas =', nome.lower())
print('* 8 - Troca tamanho das letras =', nome.swapcase())
print('* 9 - Formata com variáveis =', nome + ' é nota {0} no {1}'.format(5,'Enade'))
print('* 10 - Substitui caracteres =', nome.replace('Bacharelado','Licenciatura'))

O resultado do programa é mostrado a seguir.

* 1 - Tamanho da string = 37
* 2 - Número de vezes que a letra a aparece = 5
* 3 - Posição de Sistemas na string = 15
* 4 - Separa palavras da string = ['Bacharelado', 'em', 'Sistemas', 'de', 'Informação']
* 5 - Junta strings = BSI * EIA * UNIRIO
* 6 - Letras maiúsuculas = BACHARELADO EM SISTEMAS DE INFORMAÇÃO
* 7 - Letras minúsculas = bacharelado em sistemas de informação
* 8 - Troca tamanho das letras = bACHARELADO EM sISTEMAS DE iNFORMAÇÃO
* 9 - Formata com variáveis = Bacharelado em Sistemas de Informação é nota 5 no Enade
* 10 - Substitui caracteres = Licenciatura em Sistemas de Informação

Existem também alguns métodos que permitem testar o conteúdo de uma string.

  • isalnum() – retorna verdadeiro se todas as caracteres na string forem alfanuméricas;
  • isalpha() – retorna verdadeiro se todas as caracteres na string forem alfabéticas;
  • isdigit() – retorna verdadeiro se todas as caracteres na string forem dígitos (valores de zero a 9);
  • isspace() – retorna verdadeiro se todas as caracteres na string forem espaços;
  • isupper() -retorna verdadeiro se a string só tiver letras maiúsculas;
  • islower() – retorna verdadeiro se a string só tiver letras minúsculas.

Todos os exemplos abaixo retornam ‘True’.

print('123abc'.isalnum())
print('Unirio'.isalpha())
print('012345'.isdigit())
print(' '.isspace())
print('UNIRIO 2020'.isupper())
print('unirio 2020'.islower())

Já os exemplos a seguir retornam ‘False’.

print('123#bc'.isalnum())
print('Uni123'.isalpha())
print('A12345'.isdigit())
print(''.isspace())
print('Unirio'.isupper())
print('Unirio'.islower())

Identificador

Uma string é imutável. Isto significa que não é possível alterar qualquer caractere da string. Para alterar uma string é preciso alocar um novo objeto. Isto pode ser facilmente verificado com o uso do método id().

a = 'Sistemas de Informação'
b = 'Sistemas de Informação'
print('id(a) = ', id(a), 'id(b) = ', id(b))
print('id(string) =', id('Sistemas de Informação'))
a = a.lower()
print('id(a) = ', id(a), 'id(b) = ', id(b))

Abaixo a resposta gerada pelo programa. Inicialmente o programa define duas variáveis com a mesma string. Note que as duas variáveis possuem a mesma identificação (140071467772712). São dois nomes para um mesmo objeto. Essa string, sem um nome de variável, também possui a mesma identificação (Python trata variáveis apenas como nomes para objetos). Quando a string é alterada (converte todas as letras para minúsculas), um objeto é alocado para armazenar a nova string.

id(a) = 140071467772712 id(b) = 140071467772712
id(string) = 140071467772712
id(a) = 140071444774320 id(b) = 140071467772712