Curso de Python - Aula 6 - Um pouco mais sobre strings
E aqui vamos nós para mais uma aula de Python!
Mas antes da aula vamos aos recados e comentários…
Eu achei bem interessante o último exercício da aula 5, aquele em que vocês deveriam transformar a frase “o menino é legal” em “a menina é legal”. O que eu achei interessante é que somente alguns perceberam que bastava trocar as letras “o” pela letra “a”. Mas percebam que não existe “certo” ou “errado”, o que eu pedi foi para transformar uma frase em outra, então tivemos resultados assim:
1
frase.replace("o menino", "a menina")
Que faz o que eu pedi, mas, como eu disse, dava para fazer assim:
1
frase.replace("o","a")
Bem mais simples, não?
Então vamos à aula de hoje!
Hoje vamos falar um pouco mais sobre as strings… Sim, eu sei que já vimos bastante coisa sobre elas, mas hoje vamos ver um pouco mais :)
Substrings
Uma coisa interessante sobre as strings é que você pode acessar pedaços delas de forma muito simples, vejam o exemplo:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/usr/bin/env python
# -*- coding: utf-8 -*-
titulo = 'aulas de python'
# Pegando caractere por caractere
print(titulo[0])
print(titulo[4])
# Agora pegando intervalos de caracteres
print(titulo[0:5])
print(titulo[9:15])
# Outros modos:
# Do começo até X
print(titulo[:5])
# De X até o fim
print(titulo[9:])
O resultado:
1
2
3
4
5
6
7
8
$ ./substr.py
a
s
aulas
python
aulas
python
$
Agora as explicações:
- Linha 4: Defini uma variável chamada titulo e à ela dei o valor “aulas de python”.
- Linha 7: Exibi o caractere 0 (zero) desda string, ou seja, a letra “a”.
- Linha 8: Mesmo esquema da linha 7, só que desta vez exibindo o caractere número 4, ou seja, a letra “s”.
Agora vem a parte legal:
- Linhas 11 e 12: Exibi uma lista de caracteres, primeiro a lista de 0 até 5 para mostrar a palavra “aulas”…
Pausa para compreender melhor
O Python faz a numeração dos caracteres de uma string desse jeito:
Certo, simples né? Para pegar a letra “v” eu faria isso:
1
texto[5]
E para pegar a palavra “Como” eu faria isso:
1
texto[0:3]
Nãããoooo!!! Isso retornaria apenas a string “Com”. Mas… Por que isso?
Ora, é bem simples, a lista [A:B] vai de A (inclusive) até B (exclusive). Muito complexo? Bem, ela vai de A até um antes de B, o nome disso é Slice (cortar em inglês).
Fim da pausa!
Continuando… Então se eu pegar dos caracteres de 0 até 5 (na linha 11), então eu consigo pegar a palavra “aulas”. O mesmo vale para a linha 12, onde eu pego a palavra “python”.
Linhas 17 e 20: Nestas linhas eu usei um outro recurso interessante, quando você não fornece o primeiro elemento da lista de caracteres o Python entende que você quer o primeiro caractere da string, o caractere 0 (zero). Da mesma forma quando você não fornece o segundo elemento da lista o Python entende que você quer que seja o último caractere.
Sabendo disso tudo você se pergunta se é possível fazer algo como substituir uma letra dentro de uma string:
1
texto[6] = "b"
Não! Não é possível alterar strings desta forma. Para isso utilize a função str.replace() que já vimos (aqui)[/aulas/python/2008/11/23/curso-de-python-aula-5-matematica-recados-e-strings.html).
Uma outra forma de pegar substrings é usando a função str.__getslice__(), desta forma:
1
2
titulo = "aulas de python"
print(titulo.__getslice__(0,5))
É claro que é bem mais simples usar a primeira forma (texto[0:5]), mas é bom saber que existem outros meios :)
Strip
Calma… não é o que alguns pensaram… Agora veremos mais uma função da biblioteca str, a função str.strip(). Os que já programam em alguma linguagem podem conhecer essa função pelo nome trim.
Vamos aos exemplos:
1
2
3
4
5
6
7
8
#!/usr/bin/env python
# -*- coding: utf-8 -*-
titulo = ' aulas de python '
print(titulo.strip())
print(titulo.lstrip())
print(titulo.rstrip())
Desta vez a string tem o valor de “** aulas de python ** ”, sim, com cinco espaços em branco antes e depois do texto. Aqui foi proposital, mas você pode se deparar com um texto assim por ai.
Na linha 6 eu removi os espaços no começo e no fim da string com a função str.strip(). Na linha 7 eu removi apenas os espaços no começo da string usando a função str.lstrip() (Left Strip). E na linha 8 eu removi apenas os espaços no fim da string usando a função str.rstrip() (Right Strip).
Find
Agora um função legal para pesquisar textos:
1
2
3
4
5
6
7
#!/usr/bin/env python
# -*- coding: utf-8 -*-
titulo = 'aulas de python'
print(titulo.find('de'))
print(titulo.find('we'))
O resultado:
1
2
3
4
$ ./find.py
6
-1
$
Na linha 6 eu pesquisei pelo texto “de” e fui informado que ele está começa no caractere 6. Isso é legal para não ficar contando “de olho” onde uma substring começa. Já na linha 7 eu pesquisei pelo texto “we”, mas como ele não existe na string eu recebi o resultado -1. Isso é interessante para fazer pesquisas em textos.
Lição de casa!
Com isso vamos para a lição de casa de hoje, que ainda é bem leve e desta vez não requer código.
- Se eu tenho o texto “Oi me chamo João! Como é o seu nome?”, como eu faria para saber em que posição a palavra “nome” começa? E como eu retornaria essa palavra?
- Ainda na mesma string da 1, como eu trocaria o nome João por José?
- Como eu faço para remover os espaços no início de um texto? E no fim? E no início e no fim?
E agora um desafio!
Calcule a área sob o gráfico da função f = x + 3, sendo que x vai de 2 à 4. Apenas com o que já aprendemos aqui já é possível fazer isso.
Bons estudos.
InFog