Dominando Strings em Python

Vamos aprender as mais importantes funções de strings em Python e para praticar vamos entender como a geração de e-mail em massa funciona.

Concatenar em Python

Em português a palavra concatenar não é muito utilizada, ela significa juntar. Utilizamos concatenação para unir duas strings e transformá-las em uma só. Para concatenar strings em python utilizamos a operação +.

nome = "Abigail"
cumprimento = "Olá, " + nome
print(cumprimento)

Funções

O python traz várias funções de string prontas para utilizarmos. Toda variável que é uma string vem com essas funções, basta chamar a função diretamente da variável que você deseja. Normalmente a função não altera a variável que você está utilizando, ela te devolve outra variável como resultado.

resultado = variavel_string.funcao()

Também é possível chamar a função diretamente da string, assim:

resultado = "string".funcao()

Vamos ver algumas das funções mais utilizadas.

Função upper – Converter para letra maiúscula

Transforma todas as letras da string em maiúsculas.

maiusculas = "quero todas em maiúsculas".upper()
print(maiusculas) # QUERO TODAS EM MAIÚSCULAS

Função lower – Converter para letra minúscula

Transforma todas as letras da string em minúsculas.

minusculas = "QUERO TODAS EM MAIÚSCULAS".lower()
print(minusculas) # quero todas em minúsculas

Função capitalize – Primeira letra em maiúscula

Altera a primeira letra para maiúscula.

resultado = "maria madalena".capitalize()
print(resultado) # Maria madalena

Função startswith – Começa com

Retorna True caso a string comece com o valor enviado. Atenção: essa função é case sensitive, ou seja, “Abi” é diferente de “abi”. Isto acontece por que para o computador o caractere A é diferente do caractere a. Lembrem-se que o computador apenas sabe trabalhar com 0 e 1. Há um mapa de caracteres que mapeia todas as letras do alfabeto para um determinado código. A tabela UNICODE define um código para cada letra. Não é preciso decorar isto, nunca utilizamos estes caracteres diretamente mas é importante entender por que cada letra é interpretada de maneira diferente.

resultado = "Abigail".startswith("Abi") # retorna True
resultado = "Abigail".startswith("abi") # retorna False

Função endswith – Termina com

Similar ao startswith, esta função retorna True caso a string termine com o valor enviado.

resultado = “Abigail”.endswith(“ail”) # retorna True
resultado = “Abigail”.endswith(“AIL”) # retorna false

Função replace – Substituir

Substitui o uma string por todas as ocorrências da string fornecida.

nome = "Abigail"
cumprimento = "Olá, {nome}"
cumprimento = cumprimento.replace("{nome}", nome) # retorna Olá, Abigail

Função count – Quantidade de palavras

Devolve o número de ocorrências da palavra fornecida no texto.

texto = "Seja bem-vinda à Academia Hopper! Espero que esteja gostando do nosso conteúdo. Aqui voce vai aprender sobre programação utilizando a linguagem de programação python."

count = texto.count("python") # retorna 1

E-mail em massa

Já imaginou como o envio de e-mail em massa funciona? Imagina uma loja que vende produtos online, quando você faz a compra recebe um e-mail informando os produtos que você comprou, já pensou como isto funciona? É muito simples, basta utilizar a função replace. Para isto, criamos uma template com placeholders das informações que são específicas para cada usuário:

template_email = """Olá, {nome}. Agradecemos sua compra! O produto {nome_produto} já está a caminho, você poderá acompanhar a entrega pelo site dos correios com o localizador {localizador}. 

Não esqueça de deixar sua opinião sobre {nome_produto}!"""

Neste exemplo estou utilizando os placeholders com chaves, mas poderia ser qualquer outra coisa. É interessante utilizar caracteres especiais para não confundir com o texto simples. Poderíamos usar #nome# $nome [nome] ou até mesmo &nome.

Veja que neste exemplo eu utilizei 3 aspas duplas para definir a variável do e-mail, isto é por que o texto ocupa mais de uma linha de código. Em python para definir uma variável string que ocupa mais de uma linha se utiliza 3 aspas duplas.

Para gerar a versão final do texto do e-mail utilizaremos a função replace:

nome = "Abigail"
produto = "garrafa térmica"
localizador = "UX78300"

email = template_email.replace("{nome}", nome)
email = email.replace("{nome_produto}", produto)
email = email.replace("{localizador}", localizador)

O primeiro replace devolve o texto do email com o nome Abigail já substituído, porém os campos {nome_produto} e {localizador} ainda estão na string, por isto o próximo replace deve ser feito na variável email que recebeu o resultado do primeiro replace, e assim por diante.

Note também que o termo {nome_produto} aparece duas vezes no texto do email, mas só é preciso chamar o replace para ele uma única vez pois todas as ocorrências de {nome_produto} serão substituídas em apenas uma chamada.

Versão final: https://repl.it/@julianajuliano/Strings

Analisando textos como o Google

O Google analisa o conteúdo de todos os sites na internet e com os resultados ele consegue indicar para seus usuários quais são as páginas que tem o conteúdo mais relevantes. Uma maneira simplificada de fazer isso é contar cada palavra relevante (excluindo palavras como que, a, e, ou que não tem significado).

Podemos analisar o texto guardado em variáveis e indicar para o usuário qual dos textos é mais relevante em relação à palavra que ele está procurando.

Vamos criar duas variáveis com textos diferentes, uma sobre cães e outra sobre nutrição.

texto1 = """A maioria das raças de cachorros foi criada pelo homem para servir a um propósito. Então os cachorros foram divididos em grupos. No Brasil, o CBKC divide os cães em 11 grupos. São eles:
 
Grupo 1 (pastores e boiadeiros), Grupo 2 (pinschers, schnauzers e molossóides), Grupo 3 (terriers), Grupo 4 (dachshunds), Grupo 5 (spitz e cães primitivos), Grupo 6 (farejadores e raças assemelhadas), Grupo 7 (apontadores), Grupo 8 (retrievers, levantadores e cães d’água), Grupo 9 (cães de companhia e toys), Grupo 10 (galgos) e Grupo 11 (raças com registro provisório).

Já o AKC, conhecido como American Kennel Club, divide as raças de cães em 7 grupos. Nós do Tudo Sobre Cachorros achamos que essa divisão americana faz mais sentido do que a brasileira, pois os cães desses 7 grupos realmente se assemelham mais entre si.
 

Grupo dos EsportistasGrupo dos HoundsGrupo dos TrabalhadoresGrupo dos PastoresGrupo dos TerriersGrupo dos ToysGrupo dos Não-esportistas
 
Hoje existem mais de 300 raças de cachorros, que desempenham diferentes funções como guarda, caça, pastoreio, companhia etc. Veja aqui um artigo completo de como surgiram as raças.
 
Se você quer saber o preço do filhote de cada raça, veja aqui nossa tabela."""

texto2 = """Interessado em nutrição esportiva? Então, continue neste artigo.

Ao incluir a prática de esportes na sua rotina, lembre-se que a alimentação deve acompanhar o novo hábito. Os alimentos que você consome devem suprir as suas necessidades energéticas e nutricionais antes, durante e após os treinos.

O crescimento muscular só é possível a partir da nutrição correta e equilibrada entre os nutrientes necessários ao organismo humano. Assim, ao começar a fazer exercícios físicos, é importante consultar um nutricionista para adequar a sua dieta.

Qual a importância da nutrição esportiva?
Relacionamos a alimentação adequada às necessidades do nosso organismo a fim de atingir algum objetivo específico, seja emagrecer, conquistar o sonhado corpo musculoso ou simplesmente atingir um bom condicionamento físico."""

Podemos pedir para o usuário digitar uma palavra que ele quer buscar. E então devemos comparar o número de ocorrências da palavra indicada no texto1 e no texto2 e devolver para o usuário o texto que tiver mais ocorrências. Além disto precisamos confirmar que o texto contém pelo menos uma ocorrência, para isto comparamos se o contador é maior que zero.

palavra = input("Palavra a ser pesquisada: ")

count_texto1 = texto1.count(palavra)
count_texto2 = texto2.count(palavra)

if count_texto1 > 0 and count_texto1 > count_texto2:
  print(texto1)
if count_texto2 > 0 and count_texto2 > count_texto1:
  print(texto2)
else:
  print("Não encontramos nenhum resultado relevante")

Esta é uma versão extremamente simplificada do que o Google faz, ela serve para entendermos um pouco de como estas coisas funcionam. A verdade é que o Google é um grande analisador de strings.

Versão final: https://repl.it/@julianajuliano/GoogleSearchCount