Operações com String
Teoria
Indexação de strings
Okay, agora que a gente já aprendeu a usar as strings, vou te contar o que elas são: sequências de caracteres. Cara, na verdade, todo texto é composto por um conjunto de várias letras, né? Por isso, em Python é a mesma coisa. E a ideia que a gente vai trocar é sobre como pegar essas letras individualmente e como formatar as strings!
Primeiro, se toda string é uma sequência de caracteres, como a gente pode pegar um único termo dessa sequência?!
Relaxa! Vou te mostrar que é simples! Começando por um exemplo prático. Olha esse código:
O resultado desse programa vai ser esse:
Viu que só apareceu o Y, e não a string toda?! Isso é porque a gente usou aqueles colchetes ali ([]). A gente pode, depois da string, colocar os colchetes pra especificar qual letra da sequência a gente quer.
Além disso, repara que a primeira letra tem o índice 0. Isso porque os computadores começam as contagens no 0, diferente da gente, que começa a contar no 1. Por isso, a primeira posição é a 0, beleza?! Essa é a relação entre as letras da string nome e os índices:
Fatiamento de String
Mas além de usar os colchetes pra pegar só uma letra, a gente também consegue pegar uma fatia da nossa string. Por exemplo:
O resultado desse código é:
Olha lá! Também dá pra pegar uma fatia da string usando “:” dentro dos colchetes. Nesse caso, a gente pegou uma fatia de string começando na letra do índice 0 e parou na letra de índice 2, sem contar com ela (lembra disso, a última letra da fatia não vem junto).
Porém, as strings são imutáveis. Isso significa que depois que você cria uma string você pode ler ela toda ou ler uma parte dela, mas não pode editar!
Formatação de strings
Cara, é muito comum a gente precisar fazer combinações de textos com dados de diversos tipos que a gente tem no nosso programa. A gente podia ficar fazendo conversão de tipos e concatenando, mas pra facilitar a nossa vida existem algumas formas de formatar strings.
Porém, Python é uma linguagem bem velhinha. Com o passar do tempo, várias formas de formatação de string foram criadas. Mas você não precisa aprender todas, óbvio. Você só precisa aprender a que cai na sua prova! Eu vou ensinar 3 aqui, mas você tem que me prometer que só vai ler a que cai na sua faculdade, ok???
Aqui, eu vou escrever um código com três tipos de formatação ao mesmo tempo pra tu se familiarizar. Depois, vou descrever cada um deles!
Repara que em texto1 a gente usou só conversão de tipo e concatenação. Funcionou bem e teve resultado igual às demais! Já a variável texto2 usou um tipo de formatação que vou te falar agora!
Formatação com .format()
Tudo que você precisa fazer é colocar {n} dentro da sua string, com n sendo um número natural. No fim da string, você coloca um .format() e dentro dessa função você coloca os valores a serem substituídos.
É importante você reparar na ordem! Todo {0} no texto vai ser substituído pelo primeiro valor dentro de .format(), nesse caso, nome. Assim como todo valor de {1} vai ser substituído por idade, beleza?! Se liga nos testes:
E o resultado desse programa quando a gente executa é:
Formatação com %
Essa é de longe a mais complicadinha, porque você tem que especificar o tipo do dado que você quer passar, respeitando essa tabelinha:
Repara que tem um x ali no float. No lugar de x você coloca o número de casas decimais que você quer, beleza?! Essa formatação arredonda automaticamente o número de casas decimais, e isso é muito bom! Olha um exemplo aqui embaixo:
É bem parecido, né?! Só mudo que a gente precisa especificar o tipo. Olha o resultado:
Formatação com f’’
Esse tipo de formatação, colocando um f na frente da string, possibilita a gente colocar dentro da string {expressão}, que vai ser substituído automaticamente no texto. Essa formatação é de longe a mais fácil.
Se liga em como usar ela, na prática e sem enrolação:
E o resultado:
Show! Agora que a gente tá voando em string, bora fazer uns exercícios!!
Te espero lá!
Fatiamento de String
Formatação de strings
Formatação com .format()
Formatação com %
Formatação com f’’
Exercícios Resolvidos
Exercício Resolvido #1
CEFET (Itaguaí), 2019.2 – P1
1 ) Implemente um script responsável por receber uma palavra e imprimi-la na ordem inversa.
Exemplo:
Entrada: Entre com a palavra: CEFET
Saída: TEFEC
Passo 1
Cara, já que a gente tem que receber alguma coisa do usuário, vamos começar perguntando, com a função input().
Beleza! Agora a gente precisa inverter essa palavra. Pra isso, vamos usar as regras de fatiamento de string.
Passo 2
Pra inverter uma string, você só precisa pegar todos os caracteres de trás pra frente, ou seja, de -1 em -1.
Agora a gente tá guardando na variável “palavra” o inverso dela. Pra finalizar, só precisamos exibir.
Passo 3
Pra exibir, já sabe, né?! Função print()!!!
E assim a gente finaliza a questão! =)
Resposta
Exercício Resolvido #2
PUC-Rio, Adaptado
Uma biblioteca distribui um cartão magnético para que os alunos possam frequentá-la. A senha inicial, enviada pelo correio, é gerada automaticamente a partir da data de nascimento do aluno ('dd/mm/aaaa') do seguinte modo:
mm'$'dd(invertido) + '#' + dd'!'mm(invertido) + '\'+aaaa
Exemplo:
Data de nascimento: 25/10/1995
25$01#10!52\1995
Escreva um programa que leia o dia, mês e ano de nascimento de um aluno e retorne sua senha de acordo com as regras acima.
Passo 1
Fala aí, seus doido! Cara, a primeira coisa que a gente tem que fazer aqui é pedir pro usuário os dados da data de nascimento. Vamos começar usando a função input() pra fazer essas perguntas pro usuário.
Criamos três variáveis, pra guardar os três dados da data de nascimento. Mas repara que a gente não converteu os dados pra números inteiros. O resultado da função input() é sempre texto (string). Mas como a gente não pretende fazer operações matemáticas, não precisamos converter pra números.
Na verdade, é justamente o contrário, pois a gente vai precisar fazer concatenações, que são operações de string. Por isso, a gente realmente precisa que esses dados fiquem na forma de string, ok?!
Passo 2
Agora, a gente tem que criar uma string de senha que vai seguir o modelo descrito no enunciado:
mm'$'dd(invertido) + '#' + dd'!'mm(invertido) + '\'+aaaa
O primeiro problema que a gente quer entender é que pra formatar essa senha a gente precisa do mês e o dia invertidos. Vamos começar invertendo essas variáveis.
Pra pegar uma cópia de string de trás pra frente, a gente pode pegar a string com seguida do fatiamento [::-1]. Strings de trás pra frente são muito comuns e é importante você lembrar desse padrão, beleza?!
Passo 3
Beleza! Agora já temos todos os dados necessários pra fazer a senha. Vamos seguir o modelo.
mm'$'dd(invertido) + '#' + dd'!'mm(invertido) + '\'+aaaa
Olha, a gente simplesmente foi concatenando (unindo) as strings pra que o resultado fique no formato esperado no enunciado. É importante tu se ligar que pra colocar uma contra barra na string, assim como manda no modelo do enunciado, a gente tem que colocar duas barras na string. (\\).
Isso é porque a contra barra (\) é usada pra inserir caracteres especiais na string, e pra adicionar a própria contra barra é necessário usar duas.
Agora, só precisamos exibir pro usuário.
Passo 4
No fim, a gente precisa exibir a senha que a gente montou pro aluno. Pra exibir, precisamos usar a função print().
Agora sim! O resultado vai ser exibido no final e assim a gente finaliza o exercício! Te espero no próximo, doido!
Resposta
Exercício Resolvido #3
PUC-Rio, Adaptado
Escreva um programa que receba uma string e exiba a string com o caractere ”#” no início, no meio e no final dela. Por exemplo, se a entrada for ”abcd”, a saída deve ser ”#ab#cd#”. Outro exemplo: se receber ”abcde”, a função deve retornar ”#ab#cde#
Passo 1
Cara, se a gente precisa receber uma string do usuário, já lembramos logo da função input(). Vamos perguntar pro usuário!
Pronto! Agora a gente já tem na variável “string” a string que a gente quer “editar”. Vamos começar colocando os hashtags (#) no início e no fim, que é mais de boas de fazer.
Passo 2
Pra gente adicionar hashtags no início e no fim, a gente pode concatenar.
Viu?! A gente concatenou (vulgo “uniu”) a string que a gente recebeu com um hashtag antes e um depois. Agora só falta a gente colocar um hashtag no meio. Pra fazer isso a gente vai precisar lembrar dos fatiamentos de string.
Passo 3
No terceiro passo, a gente precisa separar a string no meio pra conseguir concatenar uma hashtag lá.
Vou te dar um exemplo antes pra tu se ligar na ideia. Vamos supor que nossa string até então tá assim:
Pra gente colocar uma hashtag ali no meio, vamos dividir a string em duas.
Isso porque depois que a gente separa, a gente consegue concatenar uma hashtag ali no meio! Saca só:
Depois, o resultado vai ser isso:
Viu? Malandramente!
Mas pra dividir nossa string em duas, precisamos saber o tamanho dela, e pra isso a gente precisa da função len().
Olha, a gente criou uma variável chamada “meio” com o índice do caractere na metade da string. É importante tu reparar que a gente precisa, nesse caso, fazer uma divisão inteira ali.
Isso porque não existe índice fracionário na string! Por exemplo, se a string tiver um comprimento ímpar, quando a gente dividir por 2 o resultado seria um número fracionário. A ideia de usar a divisão inteira é arredondar pra baixo, retornando sempre um número inteiro.
A gente pega a string do início até o meio, concatena com o hashtag e depois pega do meio até o final. Implementamos a ideia! Agora só falta a gente exibir pro usuário.
Passo 4
Pra exibir pro usuário você já sabe, né?! Isso aí, doido! Função print()!
Agora sim, conseguimos finalizar nosso exercício. Te espero no próximo, cara! Valeuuu!
Resposta
Exercício Resolvido #4
PUC-Rio, Adaptado
Escreva um programa que receba uma string e retorne uma concatenação da string com 4 cópias da string formada pelo primeiro, segundo, último e penúltimo caracteres. Exemplo, se a entrada for abcdefg, a saída será abcdefgabgfabgfabgfabgf .
Passo 1
Cara, já que a gente tem que receber alguma coisa do usuário, vamos começar perguntando, com a função input().
Beleza! Agora, a gente precisa pegar a sequência descrita no enunciado: primeiro, segundo, último e penúltimo.
Passo 2
Pra preparar nossa sequência, vamos usar fatiamento de string.
Na primeira parte, a gente pega a string do início até o segundo intervalo. A gente também concatena com os últimos caracteres de trás pra frente depois. Mas calma, vou te lembrar dessa parada de fatiamento. Se liga na palavra de exemplo:
Pra usar fatiamento, a gente precisa se ligar nos intervalos entre as letras.
Repara que quando a gente usa palavra[:2], a gente tá pedindo as letras entre as barrinhas 0 e 2. Repara que, independente da palavra, esse intervalo vai retornar as duas primeiras letras da string, sacou?! Beleza. A segunda parte ali parece um pouco mais complicada, mas nem é! Saca só:
A gente também consegue usar índices negativos pra contar as barrinhas de intervalos de trás pra frente. Porém, saca que a última barra é -1. Se liga que se a gente quer as últimas duas letras, elas sempre vão estar entre as barrinhas -1 e -3. Por isso a gente usou palavra[-1:-3].
Mas além disso, a gente quer que essas duas letras venham de trás pra frente (ultimo e depois penúltimo). E, pra gente inverter uma string, a gente usa o passo -1. Por isso, o intervalo fica palavra[-1:-3:-1].
Passo 3
Agora que a gente já tem a sequência de primeiro-segundo-último-penúltimo, agora vamos juntar ela numa nova variável. No enunciado diz que o resultado a ser exibido é a concatenação da string original com 4 vezes a sequência que a gente pegou.
Beleza! Agora a gente só precisa exibir o resultado pro usuário!
Passo 4
Pra exibir o resultado pro usuário, vamos usar a função print()!
Pronto! Finalizamos nosso exercício! Como o enunciado fornece dados de teste, é uma boa ideia a gente testar. Nesse caso, por ser trivial, deixo o teste a cargo do leitor…
Tô zoando, bora executar esse programa e testar!
Executei e coloquei a entrada fornecida no enunciado, e o resultado foi igualzinho o fornecido pelo enunciado. Isso quer dizer que nossa resolução tá certa! Ufa! Te vejo no próximo exercício, meu chegado.
Resposta
Exercício Resolvido #5
PUC-Rio, Adaptado
Escreva um programa que receba duas strings como parâmetros e retorne a concatenação da primeira com o inverso da segunda, com exceção do primeiro caractere de cada uma.
Exemplo: dadas as entradas abcd e mnopq, o valor de retorno será bcdqpon .
Passo 1
Cara, já que a gente tem que receber alguma coisa do usuário, vamos começar perguntando, com a função input(). Aqui, vamos perguntas as duas strings. Eu escolhi nomes bem criativos pras minhas variáveis, olha:
Beleza! Agora a gente precisa a segunda string. Pra isso, vamos usar as regras de fatiamento de string.
Passo 2
Se liga, a gente quer pegar as strings sem o primeiro caractere. Bora dar uma revisada ninja nos intervalos de string. Olha essa string:
Se a gente quer toda a string, com exceção do primeiro caractere, então basta a gente pegar da barrinha de número 1 em diante, sacou? Independentemente de qual seja a string. Inclusive, a função input() retorna uma string, então a gente pode aplicar o fatiamento direto na função input().
Pronto! Agora, vai ser guardado nas variáveis string1 e string2 as strings digitadas pelo usuário sem o primeiro caractere. Agora, o enunciado tá mandando a gente inverter a segunda string.
Passo 3
Pra inverter uma string, você só precisa pegar todos os caracteres de trás pra frente. Ou seja, levando em consideração que o último caractere de uma string tem índice -1, pra pegar a string de trás pra frente é só a gente pegar as letras de -1 em -1.
A gente agora guardou dentro da string2 o inverso da antiga string2. Beleza! Agora, o enunciado diz que a gente precisa concatenar essas duas strings.
Passo 4
Pra concatenar (unir) duas strings, a gente pode usar o operador de soma (+).
Agora, colocamos na variável “resultado” a união das duas strings. A gente só precisa exibir pro usuário agora.
Passo 5
Pra exibir, vamos usar a função print().
Pronto! Finalizamos. Mas antes, vamos testar com os dados que foram fornecidos pelo enunciado, beleza?!
Olha, executamos o programa, colocamos os dados de entrada fornecidos pelo enunciado e a saída foi igualzinha a do enunciado também. Significa que nosso programa tá funcionando bem! Agora sim, oficialmente executamos a questão!
Resposta
Exercício Resolvido #6
Elaboração própria
Considere S a string contendo o seguinte poema em Python:
- Qual fatiamento de S corresponde a string “tchutchuca”?
- Qual fatiamento de S corresponde a string “funk”?
- Qual fatiamento de S corresponde a string “adnil” (“linda” de trás pra frente)?
Passo 1
Fala aí, cara! Na verdade, o principal objetivo desse exercício é fazer a gente pensar sobre os caracteres “\n”. Isso aí, o número de caracteres desta string S é diferente do que tu pensa, brow! Se liga que cada quebra de linha é representada por um caractere “\n”, e nessa string tem 3 quebras de linha.
Quando a gente aperta enter pra pular uma linha, o computador automaticamente insere um “\n”. E esses \n são contados como caracteres da string, sacou? Nesse caso, o tamanho da string é a quantidade de letras e espaços + 3 “\n”. Depois que tu se ligar nisso, pra resolver o exercício é só ir contando as letras. Vamo lá!
Passo 2
No item A, pra gente pegar só a palavra “tchutchuca” na string S, precisamos saber o intervalo dessa palavra na string. Pra isso, bora contar as letras.
Antes de começar a palavra que a gente tá buscando, tem 53 letras (contando com os espaços). Mas a gente tem que contar com as duas quebras de linha também!
Por isso, a nossa palavra começa no índice 55. Só precisamos saber até qual índice a palavra vai pra gente conseguir pegar a fatia certinha. Vamos contar quantas letras tem a palavra “tchutchuca”.
Eu contei aqui e deu 10. Então, se o índice começa em 55 e a palavra tem 10 letras, o índice do final da palavra é 55+10 = 65. Vamos testar!
O resultado desse programa foi:
Então é isso mesmo! Conseguimos! Partiu letra B.
Passo 3
Precisamos fazer a mesma coisa com a palavra “funk”. Felizmente essa palavra tá mais perto, aí vamos ter que contar menos letras! hahahah
Antes da palavra tem 15 letras, contando com os espaços. Além disso, não pulamos linha nenhuma vez. Então, vamos começar o fatiamento no índice 15.
Agora, vamos contar o número de letras da palavra “funk”.
Contei aqui e deu 4. Então, se a palavra começa no 15 e tem 4 letras, ela deve terminar em 15+4 = 19, certo?! Por isso, o fatiamento que corresponde a palavra “funk” é S[15:19].
Deu certo! Partiu item C.
Passo 4
Caraca! Vamos ter que contar um montão de letras agora. Porém, não esquece que a gente quer pegar a palavra de trás pra frente. Então vamos contar quantas letras tem até o início da nossa string. Se liga que o início da palavra “adnil” começa no “a”. Quantas letras tem até esse “a”?
Até aqui tinha 70 letras, contando com espaços e quebras de linha. Se liga que, como a gente quer a palavra de trás pra frente, o início de “adnil” é no fim da palavra “linda”. E o fim da palavra “adnil” é no início da palavra “linda”. Doideira, né?! Mas aí a gente consegue a string de trás pra frente.
Se liga que a palavra começa no índice 70, e a palavra “adnil” tem 5 letras. Então, o fim do intervalo do fatiamento é 70-5= 65.
Como resultado, esse programa não exibe NADA. Precisamos pensar em uma parada antes de finalizar essa questão. Acontece que nosso intervalo tá começando em 70 e terminando em 65. Reparou que tá decrescendo?! Quando a gente usa intervalos decrescentes, temos que enfatizar!! Pra isso, vamos usar o passo -1. Ficaria S[70:65:-1].
Agora sim! Conseguimos finalizar mais esse item, e parece que era o último!!! Ufa! FInalizamos o exercício! Te espero no próximo, doido.
Resposta
- S[55:65]
- S[15:19]
- S[70:65:-1]
Exercício Resolvido #7
Elaboração própria
Escreva um programa que receba a data de nascimento do usuário no formato dd/mm/aaaa, armazene cada um dos dados em variáveis inteiras, chamadas dia, mês e ano. Por fim, exiba o somatório dos dados.
Passo 1
Fala aí! Como a gente precisa perguntar alguma coisa pro usuário, vamos começar com o input(), ok?!
Dessa forma, a gente consegue pegar e guardar na variável “data” o que for digitado pelo usuário. Vamos considerar que vai ser uma string no formato dd/mm/aaaa, já que o enunciado explicitou. Agora, precisamos salvar o dia, mês e ano em variáveis separadas. Pra isso, bora lembrar um pouquinho do fatiamento de string. Vamos considerar o dia do natal pro exemplo.
Na variável “data” vai ter uma string nesse formato:
Precisamos separar os dados e vamos fazer isso por fatiamento. Qual fatiamento dessa string corresponde ao dia?
Pro dia, podemos pegar o intervalo data[0:2]. Pro mês, data[3:5] e pro ano data[6:10].
Beleza! Conseguimos guardar nas variáveis os respectivos valores. Mas se liga que no enunciado tá dizendo que essas variáveis precisam ser inteiras, e quando pegamos fatiamento de string a gente recebe string. Vamos converter esses valores pra que nossas strings sejam números inteiros.
Passo 2
Pra converter os dados pra inteiro, precisamos usar a função int() antes desses dados entrarem na variável:
Agora sim! Os dados foram guardados nas variáveis no formato de números inteiros, e isso é essencial pra que a gente consiga calcular o somatório. Vamos calcular logo o somatório também.
Pronto! Agora só falta a gente exibir.
Passo 3
Pra exibir, tu tá ligado! A gente usa a função print().
Além disso, também precisamos usar formatação de string pra colocar a soma dentro da string do print(). Se liga que existem várias formas diferentes de formatar strings. Escolhi uma, mas você pode (e deve) fazer da forma que seu professor escolher, ok?!
Te espero no próximo exercício, doido!
Resposta
Exercício Resolvido #8
PUC-Rio, Adaptado
Escreva um programa que recebe uma string e o tamanho da linha (número de caracteres), e retorne a string centralizada.
Exemplo de entrada:
'João Pé de Feijão'
50
Saída:
“ João Pé de Feijão“
Passo 1
Fala aí! Primeiro, a gente precisa pegar os dados do usuário, e vamos fazer isso com a função input().
Como no tamanho a gente espera um número inteiro, então a gente já converte direto a resposta da função input() pra inteiro com a função int(). Na variável “frase” a gente espera uma string, e a função input() retorna uma string por padrão, por isso não precisamos de nenhuma conversão, ok?!
Passo 2
Agora, a gente precisa exibir uma string do tamanho que foi especificado pelo usuário. Pra isso, vamos preencher as laterais da string recebida até que ela tenha o tamanho especificado, sacou?
Então vamos começar calculando quantos espaços a gente precisa colocar de cada lado.
Se a gente precisa chegar na quantidade “tamanho”, vamos primeiro pegar a diferença entre o tamanho da string que a gente já tem e o tamanho que a gente quer. Depois, a gente divide por dois pra colocar dos dois lados da string. Mas se liga que a divisão precisa ser inteira, ok?! Nada de números reais aqui!
Passo 3
Sabendo a quantidade necessária de espaços em cada lado, a gente só precisa colocar. Vamos atualizar a variável “frase” colocando espaços dos dois lados da string.
Depois, a gente só precisa exibir!
Passo 4
Pra exibir, vamos usar a função print() na variável “frase”, que foi atualizada pra estar centralizada com a quantidade de espaços que a gente calculou.
E pronto! Finalizamos o exercício! Te espero no próximo, maninho!