– Strings – Textos e importância no Python – Por que aprender Strings e a importância pro Python
No módulo “variáveis”, descobrimos que os textos no Python são em geral variáveis do tipo STRING. No entanto, ainda temos alguns outros conhecimentos muito importantes sobre esse tipo de variável que são fundamentais. Veja abaixo:
STRINGs no Python são listas:
Ainda não vimos em detalhes o que são listas no Python, mas por enquanto, guarde essa informação e entenda que para o Python cada caractere é um item de uma lista.
Se pegarmos um e-mail genérico ‘joao@hashtag.com’, podemos dividir todos os seus caracteres em uma lista.
joao@hashtag.com
j o a o @ h a s h t a g . c o m
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Algo que pode gerar confusão no início, é que o número de caracteres é sempre um número a mais que a posição. Como vemos na figura acima, como o Python inicia na posição 0, o número de caracteres sempre será 1 a mais que o número de posições.
– Índice e tamanho da String
Usando o mesmo exemplo, vamos agora ver como utilizar as posições no Python.
Perceba, que podemos acessar qualquer posição ou range de posições através da estrutura VARIÁVEL[POSIÇÃO]!
Outro ponto de atenção é o caso de range. Ao colocarmos [0:5] não estamos pegando a posição 5. Para o Python, este intervalo se inicia na posição [0], mas finaliza na posição [4].
joao@hashtag.com
j o a o @ h a s h t a g . c o m
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
email='joao@hashtag.com'
print(email[0]) #pegando a posição [0] do valor atribuído a variável email
______________
j
print(email[0:5]) #pegando a posição [0] até a posição [5] do valor atribuído a variável email
______________
joao@
Podemos associar métodos à nossa string que facilitarão muito o tratamento desses dados. Um dos métodos mais usados é o LEN()
joao@hashtag.com
j o a o @ h a s h t a g . c o m
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
email='joao@hashtag.com'
len(email) #fornece o tamanho da variavel LEN. ATENÇÃO! CONSIDERA TODOS OS CARACTERES
______________
16
A T E N Ç Ã O !
O LEN() sempre contará TODOS os caracteres da sua STRING. Ou seja, ESPAÇO(‘ ‘), VÍRGULAS (‘,’), PONTOS(‘.’), etc serão
considerados!
– Índice Negativo e Pedaço de String
Como vimos anteriormente, o índice da posição dos caracteres segue o modelo abaixo
joao@hashtag.com
j o a o @ h a s h t a g . c o m
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Outra forma possível é a posição com índice negativo. Veja o exemplo abaixo
joao@hashtag.com
j o a o @ h a s h t a g . c o m
-16 -15 -14 -13 -12 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1
Perceba que as duas formas são válidas e coexistem no Python. Se quisermos o caractere ‘@’, podemos usar tanto [4] como [-12].
D I C A
Em geral, vamos usar o índice negativo em casos que é sabido que o que buscamos está
mais próximo do fim da string. MAS nada impede que você use só o positivo ou só o negativo.
Assim como vimos nos índices positivos, podemos utilizar a mesma lógica para pegarmos
pedaços da string. Todos os dados até o caractere [-5](não incluso)
joao@hashtag.com
j o a o @ h a s h t a g . c o m
-16 -15 -14 -13 -12 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1
email[:-5]
___________
'joão@hashta'
‘:’ Indica que se trata de um intervalo
Assim como vimos nos índices positivos, podemos utilizar a mesma lógica para pegarmos pedaços da string. Todos os dados a partir do caractere [-5] (nesse caso incluso)
joao@hashtag.com
j o a o @ h a s h t a g . c o m
-16 -15 -14 -13 -12 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1
email[-5:]
___________
'g.com'
Assim como vimos nos índices positivos, podemos utilizar a mesma lógica para pegarmos pedaços da string. Todos os caracteres do índice [-16] até o [-1] (não incluso)
joao@hashtag.com
j o a o @ h a s h t a g . c o m
-16 -15 -14 -13 -12 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1
email[-16:-1]
___________
'joao@hashtag.co'
– Textos e importância no Python – Operações com String
Resumo das Operações com String
• str → transforma número em string;
• in → verifica se um texto está contido dentro do outro
• operador + → concatenar string
• format e {} → substitui valores
• %s → substitui textos
• %d → substitui números decimais
Para mostrar as diferenças entre essas operações, o exemplo abaixo será usado como base.
faturamento = 2000
custo = 500
lucro = faturamento - custo
– Textos e importância no Python – Operações com String
• Uso do str() e do concatenar com +
print('O faturamento da loja foi de: ' + faturamento)
--------------------------------------------------------------------
TypeError: can only concatenate str (not "int") to str
Esse erro acontece porque só é possível concatenar string com string, e nesse caso a variável faturamento é do tipo int. Para concatenarmos essa variável, devemos transformar seu valor em string com o uso do str().
print('O faturamento da loja foi de: ' + str(faturamento))
_____________________________________
O faturamento da loja foi de: 2000
– Operações com String
As desvantagens desse método são:
• Ter sempre que lembrar de transformar as variáveis com o uso do str()
• Para textos grandes esse método se torna muito mais trabalhoso do que os outros métodos
print('O faturamento da loja foi de: ' + str(faturamento) + 'O custo foi de' + str(custo) + 'O lucro foi de' + str(lucro))
_____________________________________
O faturamento da loja foi de: 2000 O custo foi de 500 O lucro foi de 1500
• Uso do Format
print('O faturamento da loja foi de: {} '.format(faturamento))
_____________________________________
O faturamento da loja foi de: 2000
Como vimos no módulo 5, para usarmos o format precisamos inserir um par de chaves {} na posição que gostaríamos de ter as nossas variáveis ou valores substituídos. E no final do texto usamos o método format com os valores que queremos substituir entre parênteses, como neste exemplo de cima.
– Operações com String
print('O faturamento da loja foi de: {}, O custo foi de {}, O lucro foi de {}'.format(faturamento))
--------------------------------------------------------------------
IndexError: Replacament index 1 out of range for positional args tuple
Se tentarmos substituir apenas 1 variável em 3 chaves como no exemplo acima, será gerado um erro. Porque como temos 3 chaves, é esperado que tenha 3 informações dentro do format. Na imagem abaixo podemos ver como resolver este erro.
print('O faturamento da loja foi de: {}, o custo foi de {} e o lucro foi de {}'.format(faturamento, custo, lucro))
__________________________________________________
O faturamento da loja foi de: 2000, o custo foi de 500 e o lucro foi de 1500
Outra forma de usar o format é com os índices das variáveis dentro das chaves. No exemplo que estamos trabalhando, a variável faturamento tem índice 0 (zero), a variável custo tem índice 1 e a variável lucro tem índice 2.
print('O faturamento da loja foi de: {1}, o custo foi de {2} e o lucro foi de {3}'.format(faturamento, custo, lucro))
__________________________________________________
O faturamento da loja foi de: 2000, o custo foi de 500 e o lucro foi de 1500
Com isso, é possível alterar a ordem em que as variáveis aparecem.
A T E N Ç Ã O !
Quando usar os índices das variáveis dentro das chaves {}, nenhuma das chaves pode ficar vazia
É possível também repetir valores dentro das chaves {}.
• Uso do %s e %d
Funciona de forma parecida com o format
Quando queremos fazer substituição por uma string, usamos %s
Quando queremos fazer substituição por um número, usamos %d
print('O faturamento foi de: %s' % 'faturamento')
_______________
O faturamento foi de: faturamento
print('O faturamento foi de: %d' % faturamento)
_______________
O faturamento foi de: 2000
Mesmo exemplo usado no format, mas agora usando %
print('O faturamento da loja foi de: %d, o custo foi de %d e o lucro foi de %d'%(faturamento, custo, lucro))
__________________________________________________
O faturamento da loja foi de: 2000, o custo foi de 500 e o lucro foi de 1500
O recomendado é que se use o format, porque o format é mais flexível, é a forma mais utilizada e que ficou padronizada para a versão do Python 3
• Uso do in
Verifica se um valor específico está contido em uma determinada sequência (strings, listas, etc.). Retorna True se o valor estiver contido na sequência, e False se o valor não estiver contido na sequência.
Verifica se o @ está contido em lira@gmail.com
Retornou True, pois está contido.
print('@' in 'lira@gmail.com')
___________
True
Verifica se o @ está contido em lira.gmail.com
Retornou False, pois não está contido.
print('@' in 'lira.gmail.com')
___________
False
– Métodos String – Apresentação
Você deve se lembrar que no módulo 5 falamos sobre métodos e o que eles são.
As strings, assim como os outros tipos de variáveis, possuem uma série de métodos que podem ser utilizados para ajudar no tratamento dos dados. Aqui do lado temos todos os métodos da string e no próximo slide vamos ver os mais importantes.
.CAPITALIZE → Transforma APENAS a primeira letra de uma STRING em MAIÚSCULA
texto = 'lira'
print(texto.capitalize())
.CASEFOLD → Transforma todas as letras MAIÚSCULAS em MINÚSCULAS
texto = 'lira'
print(texto.casefold())
.COUNT → CONTA o número de vezes que um caractere específico aparece na STRING. No caso ao lado ‘.’
texto = 'lira@yahoo.com.br'
print(texto.count('.'))
_________________
2
.ENDSWITH → Retorna TRUE (VERDADEIRO) ou FALSE (FALSO) para um teste SE a string termina com uma STRING específica. No exemplo ao lado, como ‘lira@gmail.com termina com gmail.com, o resultado é TRUE.
texto = 'lira@gmail.com'
print(texto.endswith('@gmail.com'))
.FIND → Encontra a posição do termo procurado. Atenção! Lembre-se que a contagem de posição se inicia em [0]
texto = 'lira@gmail.com'
print(texto.find('@'))
.FORMAT → Já falamos sobre ela anteriormente, lembra? Ela insere o valor de uma variável no termo indicado por {}. Muito útil para evitar ter que transformar o formato de cada variável individualmente
faturamento = 1000
print('O faturamento da loja foi de {}'.format(faturamento))
.ISALNUM → Verifica se um texto é todo feito com caracteres alfanuméricos (letras e números) -> letras com acento ou ç são considerados letras para essa função.
texto = 'joão123'
print(texto.isalnum())
.ISALPHA → Verifica se um texto é todo feito de letras. Caso o texto fosse ‘João123’, o retorno seria FALSE visto que 123 não são letras.
texto = 'joão'
print(texto.isalpha())
.ISNUMERIC → Verifica se um texto é todo feito por números
texto = '123'
print(texto.isnumeric())
.REPLACE → Substitui um caractere escolhido por outro. No exemplo ao lado, temos que o símbolo PONTO(‘.’) foi alterado por´VÍRGULA(‘,’). Atenção! Nesse caso, veja que temos 2 argumentos no método. 2 pontos são importantes:
1) A ordem faz diferença;
2) A VÍRGULA indicada em vermelho é o separador dos
dois argumentos
texto = '1000.00'
print(texto.replace('.',','))
.SPLIT → Separa o texto da STRING baseado em algum caractere indicado. No caso ao lado, temos a separação do texto antes e depois do ‘@’ . Perceba que o split já criou uma lista ao fazer essa separação. Isso será bem útil para você
texto = 'lira@gmail.com'
print(texto.split('@'))
.SPLITLINES → Cria uma lista, onde cada item é o texto de uma linha. Cada “ENTER” é criado um novo item na lista.
texto = 'lira@gmail.com'
print(texto.split())
.TITLE → Coloca todas as letras iniciais das palavras MAIÚSCULAS
texto = 'joão paulo lira'
print(texto.title())
STRIP → Retira os caracteres indesejados, como por exemplo, espaços que não agregam valor. Perceba que no resultado fornecido pelo Python não existem os espaços indesejados.
texto = ' BEB123453 '
print(texto.strip())
.STARTSWITH → Retorna TRUE ou FALSE para um teste se uma STRING se inicia com um texto específico. No caso ao lado, temos que BEB123453 se inicia com BEB, logo, o Python retorna TRUE.
texto = 'BEB123453'
print(texto.starswith(BEB))
.UPPER → Altera todo o texto para MAIÚSCULAS. Números ficam inalterados.
texto = 'BEB123453'
print(texto.upper())
– Formatação de números
Nas aulas anteriores usamos o format apenas para substituir as chaves pelos valores das variáveis. Mas o format também pode formatar o texto, formatar os números para aparecerem no formato de moeda, porcentagem, com 2 casas decimais, por exemplo.
Vamos ver agora as principais formatações para se usar com o format.
Formatações personalizadas com o format
:< Alinha o texto à esquerda (se tiver espaço na tela para isso)
:> Alinha o texto à direita (se tiver espaço na tela para isso)
:^ Alinha o texto ao centro (se tiver espaço na tela para isso)
:+ Coloca o sinal sempre na frente do número (independente se é positivo ou negativo)
:, Coloca a vírgula como separador de milhar
:_ Coloca o _ como separador de milhar
:e Formato Científico
:f Número com quantidade fixa de casas decimais
:x Formato HEX minúscula (para cores)
:X Formato HEX maiúscula (para cores)
:% Formato Percentual
• Exemplo de Alinhamento
Formato padrão sem alinhamento
email = 'lira@gmail.com'
print('Meu email não é {}, show?'.format(email))
__________________
Meu email não é lira@gmail.com, show?
Caixa de texto com tamanho de 30 caracteres e texto alinhado à esquerda (:<)
email = 'lira@gmail.com'
print('Meu email não é {:<30}, show?'.format(email))
__________________
Meu email não é lira@gmail.com , show?
Caixa de texto com tamanho de 30 caracteres e texto alinhado à direita (:>)
email = 'lira@gmail.com'
print('Meu email não é {:>30}, show?'.format(email))
__________________
Meu email não é lira@gmail.com, show?
Caixa de texto com tamanho de 30 caracteres e texto alinhado ao centro (:^)
email = 'lira@gmail.com'
print('Meu email não é {:^30}, show?'.format(email))
__________________
Meu email não é lira@gmail.com , show?
• Exemplo de Edição de Sinal
custo = 500
faturamento = 270
lucro = faturamento - custo
print('Faturamento foi {:+} e lucro foi {:+}'.format(faturamento, lucro)
____________________
Faturamento foi +270 e lucro foi -230
Quando usamos essa formatação (:+), sempre será colocado sinal na frente dos números,
não importando se esses números são positivos ou negativos.
Nesse caso, o faturamento foi positivo (+270), mas o lucro foi negativo (-230)
• Exemplo de Separador de Milhar
custo = 5000
faturamento = 2700
lucro = faturamento - custo
print('Faturamento foi {:,} e lucro foi {:,}'.format(faturamento, lucro)
____________________
Faturamento foi 2,700 e lucro foi -2,300
Quando usamos essa formatação (:,), os números passam a ter separadores de milhar.
Se quiser o sinal e o separador de milhar, devemos fazer como abaixo (:+,)
custo = 5000
faturamento = 2700
lucro = faturamento - custo
print('Faturamento foi {:+,} e lucro foi {:+,}'.format(faturamento, lucro)
____________________
Faturamento foi +2,700 e lucro foi -2,300
Nesse caso, o faturamento foi positivo (+2700), mas o lucro foi negativo (-2300)
• Formato com Casas Decimais Fixas
custo = 500
faturamento = 270
lucro = faturamento - custo
print('Faturamento foi {:f} e lucro foi {:f}'.format(faturamento, lucro)
____________________
Faturamento foi 270.000000 e lucro foi -230.000000
Por padrão, quando rodamos o código com (:f), os números passam a ter 6 casas decimais. Mas se quisermos definir a quantidade de casas decimais, devemos usar a seguinte formatação:
:.[número de casas decimais]f
Por exemplo, (:.2f) para 2 casas decimais, (:.1f) para 1 casa decimal. É muito importante não esquecer do ponto (.)
custo = 500
faturamento = 270
lucro = faturamento - custo
print('Faturamento foi {:.2f} e lucro foi {:.1f}'.format(faturamento, lucro)
____________________
Faturamento foi 270.00 e lucro foi -230.0
• Formato Percentual
custo = 500
faturamento = 1300
lucro = faturamento - custo
margem = lucro / faturamento
print('Margem de lucro foi de {:%} '.format(margem))
____________________
Margem de lucro foi de 61.538462%
Quando usamos essa formatação (:%), os números passam a ter o formato percentual
Para ajustarmos também o número de casas decimais, devemos combinar essas duas formatações como na imagem abaixo.
custo = 500
faturamento = 1300
lucro = faturamento - custo
margem = lucro / faturamento
print('Margem de lucro foi de {:.2%} '.format(margem))
____________________
Margem de lucro foi de 61.54%
• Formato Moeda → Combinação de Formatos
custo = 5000
faturamento = 27000
lucro = faturamento - custo
print('Faturamento foi R$ {:,.2f} e lucro foi R$ {:,.2f}'.format(faturamento, lucro)
____________________
Faturamento foi R$ 27,000.00 e lucro foi R$ 22,000.00
Com a formatação usada (:,.2f), os números passam a ter o formato de milhar e 2 casas decimais. Mas e se quisermos colocar esses valores no formato brasileiro (ponto como separador de milhar e vírgula para separar casa decimal)?
Existem módulos que fazem isso, mas podemos usar o método de string .replace().
Vamos substituir a vírgula por ponto, e o ponto por vírgula. Para isso, em vez de usarmos o separador de milhar vírgula, devemos usar o separador de milhar underline. Isso permitirá a substituição com o replace, caso contrário ocorreria um conflito, pois não é
possível fazer 2 substituições simultâneas (substituir vírgula por ponto e ponto por vírgula, ao mesmo tempo).
Lembrando que lucro_texto é do tipo string
#transformando no formato brasileiro
lucro_texto = 'R${:_.2f}'.format(lucro)
print(lucro_texto.replace('.',',').replace('_','.'))
____________
R$22.000,00
• Função round() para arredondar números, caso seja necessário
Quando definimos o número de casas decimais usando a formatação (por exemplo, :.2f) dentro do format, o valor é automaticamente arredondado. Mas existe também a função round, que arredonda um valor de acordo com o número de casas decimais
imposto = 0.15758
preco = 100
valor_imposto = round(preco * imposto,1)
print('Imposto sobre o preço é de {}'.format(valor_imposto))
__________________
Imposto sobre o preço é de 15.8
Nenhum comentário:
Postar um comentário