Strings são tipos que armazenam uma sequência de caracteres:
>>> "Texto bonito" 'Texto bonito' >>> "Texto com acentos de cedilhas: hoje é dia de caça!" 'Texto com acentos de cedilhas: hoje é dia de caça!'
As strings aceitam aspas simples também:
>>> nome = 'Silvio Santos' >>> nome 'Silvio Santos'
Note
Strings aceitam os dois tipos de aspas, desde que seja consistente. Se começou com uma, termine com aquela!
- >>> cor_da_caneta = "azul brilhante'
- File "<stdin>", line 1
- cor_da_caneta = "azul brilhante'
^
SyntaxError: EOL while scanning string literal
Também é possível fazer algumas operações com strings:
>>> nome * 3 'Silvio SantosSilvio SantosSilvio Santos' >>> nome * 3.14 Traceback (most recent call last): ... TypeError: can't multiply sequence by non-int of type 'float'
>>> canto1 = 'vem aí, ' >>> canto2 = 'lá ' >>> nome + ' ' + canto1 + canto2 * 6 + '!!' 'Silvio Santos vem aí, lá lá lá lá lá lá !!'
Para strings em várias linhas, utilize 3 aspas:
>>> string_grande = '''Aqui consigo inserir um textão com várias linhas, posso iniciar em uma... ... e posso continuar em outra ... e em outra ... e mais uma ... e acabou.''' >>> string_grande 'Aqui consigo inserir um textão com várias linhas, posso iniciar em uma...ne posso continuar em outrane em outrane mais umane acabou.' >>> print(string_grande) Aqui consigo inserir um textão com várias linhas, posso iniciar em uma... e posso continuar em outra e em outra e mais uma e acabou.
Caso queira um texto que dentro tem aspas, como Me dá um copo d'água
, é necessário utilizar aspas duplas para formar a string:
>>> agua = "Me dá um copo d'água" >>> agua "Me dá um copo d'água"
E também é possível utilizar aspas simples, duplas e triplas ao mesmo tempo! Olha só:
>>> todas_as_aspas = """Essa é uma string que tem: ... - aspas 'simples' ... - aspas "duplas" ... - aspas '''triplas''' ... Legal né?""" >>> todas_as_aspas 'Essa é uma string que tem:n- aspas 'simples'n- aspas "duplas"n- aspas '''triplas'''nLegal né?' >>> print(todas_as_aspas) Essa é uma string que tem: - aspas 'simples' - aspas "duplas" - aspas '''triplas''' Legal né?
A função embutida len()
nos permite, entre outras coisas, saber o tamanho de uma string:
>>> len('Abracadabra') 11 >>> palavras = 'Faz um pull request lá' >>> len(palavras) 22
Assim, vemos que a palavra Abracadabra
tem 11 letras.
Como visto anteriormente, o método len()
pode ser utilizado para obter o tamanho de estruturas, sejam elas strings, listas, etc. Esse tamanho representa a quantidade de elementos na estrutura.
Para obter somente um caractere de dentro dessas estruturas, deve-se utilizar o acesso por índices, no qual o índice entre colchetes []
representa a posição do elemento que se deseja acessar.
Note
Os índices começam em zero.
>>> palavra = 'Python' >>> palavra[0] # primeira 'P' >>> palavra[5] # última 'n'
Índices negativos correspondem à percorrer a estrutura (string, lista, ...) na ordem reversa:
>>> palavra[-1] # última também 'n' >>> palavra[-3] # terceira de tras pra frente 'h'
Se, ao invés de obter apenas um elemento de uma estrutura (string, lista, ...), deseja-se obter múltiplos elementos, deve-se utilizar slicing (fatiamento). No lugar de colocar o índice do elemento entre chaves, deve-se colocar o índice do primeiro elemento, dois pontos (:
) e o próximo índice do último elemento desejado, tudo entre colchetes. Por exemplo:
>>> frase = "Aprender Python é muito divertido!" >>> frase[0] 'A' >>> frase[5] 'd' >>> frase[0:5] # do zero até o antes do 5 'Apren' >>> frase[:] # tudo! 'Aprender Python é muito divertido!' >>> frase 'Aprender Python é muito divertido!' >>> frase[6:] # Se omitido o segundo índice significa 'obter até o final' 'er Python é muito divertido!' >>> frase[:6] # se omitido o primeiro indice, significa 'obter desde o começo' 'Aprend' >>> frase[2:-3] # funciona com números negativos também 'render Python é muito diverti' >>> frase[0:-5] 'Aprender Python é muito diver' >>> frase[0:-6] 'Aprender Python é muito dive' >>> frase[0:-7] 'Aprender Python é muito div' >>> frase[2:-2] 'render Python é muito divertid'
É possível controlar o passo que a fatia usa. Para isso, coloca-se mais um dois pontos (:
) depois do segundo índice e o tamanho do passo:
>>> frase[::1] # do começo, até o fim, de 1 em 1. Ou seja, tudo do jeito que ja era, não faz diferença nenhuma. 'Aprender Python é muito divertido!' >>> frase[::2] # do começo, até o fim, de 2 em 2 'Arne yhnémiodvrio >>> frase[2:-2:2] # Do terceiro, até o ante penúltimo, de 2 em dois 'rne yhnémiodvri'
Resumindo: para fazer uma fatia de nossa string, precisamos saber de onde começa, até onde vai e o tamanho do passo.
fatiável[começo : fim : passo]
Note
As fatias incluem o índice do primeiro elemento e não incluem o elemento do índice final. Por isso que frase[0:-1]
perde o último elemento.
Caso o final da fatia seja antes do começo, obtemos um resultado vazio:
>>> frase[15:2] ''
E se quisermos uma fatia fora da string?
>>> frase[123:345] ''
Mas e se o final da fatia for mais para frente que o tamanho da string? Não tem problemas, o Python vai até o onde der:
>>> frase[8:123456789] ' Python é muito divertido!' >>> frase[8:] ' Python é muito divertido!' >>> frase[123456789] Traceback (most recent call last): File "<stdin>", line 1, in <module> IndexError: string index out of range
Tamanhos negativos de passo também funcionam. Passos positivos significam para frente e passos negativos significam para trás:
>>> "Python"[::-1] 'nohtyP'
Quando usamos passos negativos, a fatia começa no fim e termina no começo e é percorrida ao contrário. Ou seja, invertemos a ordem. Mas tome cuidado:
>>> "Python"[2:6] 'thon' >>> "Python"[2:6:-1] '' >>> "Python"[6:2] '' >>> "Python"[6:2:-1] 'noh'
No caso de "Python"[6:2]
, o começo é depois do fim. Por isso a string fica vazia.
No caso de "Python"[2:6:-1]
, o começo é o índice 6
, o fim é o índice 2
, percorrida ao contrário. Ou seja, temos uma string vazia ao contrário, que continua vazia.
Quando fazemos "Python"[6:2:-1]
, o começo é o índice 2
, o fim é o índice 6
, percorrida ao contrário. Lembre que o índice final nunca é incluído. Ou seja, temos a string hon
a ser invertida. O que resulta em noh
.
Se você quiser fazer uma fatia invertida, ou seja, inverter um trecho de uma string, é muito mais fácil fazer primeiro a fatia e depois a inversão:
>>> texto = "No alto da montanha havia uma rosa" >>> texto[3:19] 'alto da montanha' >>> texto[3:19][::-1] 'ahnatnom ad otla'
A formatação de string nos permite criar frases dinâmicas, utilizando valores de quaisquer variáveis desejadas. Por exemplo:
string_format
- def input(text):
value = "Silvio Santos" print(text + value) return value
string_format
>>> nome = input('Digite seu nome ') Digite seu nome Silvio Santos >>> nome 'Silvio Santos' >>> frase = 'Olá, {}'.format(nome) >>> frase 'Olá, Silvio Santos'
Vale lembrar que as chaves {}
só são trocadas pelo valor após a chamada do método str.format()
:
>>> string_a_ser_formatada = '{} me formate!' >>> string_a_ser_formatada '{} me formate!'
>>> string_a_ser_formatada.format("Não") # também podemos passar valores diretamente para formatação, apesar de ser desncessário 'Não me formate!'
A string a ser formatada não é alterada nesse processo, já que não foi feita nenhuma atribuição:
>>> string_a_ser_formatada '{} me formate!'
É possível formatar uma quantidade arbitrária de valores:
>>> '{} x {} = {}'.format(7, 6, 7 * 6) '7 x 6 = 42'
>>> palavra = 'Python' >>> numero = 10 >>> booleano = False >>> '{} é {}. E as outras linguagens? {}'.format(palavra, numero, booleano) 'Python é 10. E as outras linguagens? False'
Se tivermos a frase Sílvio Santos vem aí, oleoleolá!
e quisermos separar cada palavra, como fazer? Pode-se usar o fatiamento:
>>> frase = "Sílvio Santos vem aí, oleoleolá!" >>> frase[:6] 'Sílvio' >>> frase[7:13] 'Santos' >>> frase[14:17] 'vem' >>> frase[18:21] 'aí,' >>> frase[22:] 'oleoleolá!'
Mas também podemos usar a função split()
:
>>> frase.split() ['Sílvio', 'Santos', 'vem', 'aí,', 'oleoleolá!']
Note
É possível transformar uma string em número, dado que seja um número:
>>> numero = int("2") >>> numero 2
Note
A volta também é possível:
>>> numero_string = str(1900) >>> numero_string '1900' >>> type(numero_string) <class 'str'>