Strings
Teoria
Usando textos em Python
Em Python, tudo que a gente colocar entre aspas é considerado texto. No entanto, o nome verdadeiro dos dados de tipo texto é string. E esse tipo tem várias características importantes que a gente tem que dominar pra mandar bem na prova, beleza? Vamos Falar sobre algumas delas aqui.
Primeiro, vamos fazer uma variável do tipo string pra gente ficar testando as paradas que a gente vai aprender agora:
É assim que a gente faz pra criar uma variável do tipo string, usando aspas. Mas é legal você saber que não precisa ser aspas duplas (“). Também pode ser feito com a simples (‘). Olha:
Também funciona, beleza? Você só precisa tomar cuidado na hora de fechar as aspas, porque você tem que fechar com o mesmo tipo de aspas que você abriu. Olha esse exemplo:
Se você tentar executar esse programa, vai ver que vai dar erro. Isso é porque a gente fechou a string com aspas duplas (“), apesar de ter começado a string com uma aspa simples (‘). Isso é um problemão, beleza?
Usando caracteres especiais nas strings
Mas, calma aí… Nem todos os caracteres a gente consegue escrever! Como a gente pode salvar uma quebra de linha dentro da string?!
Obs: quebra de linha é pular linha.
Pra solucionar esse problema, a gente usa a notação de caracteres especiais. Essa notação sempre começa com contra barra (\). Olha o exemplo:
Tá vendo aquele “\n” dentro da nossa string?! Ele tá dizendo que a gente quer pular uma linha naquele ponto do texto (essa barra ao contrário fica do lado esquerdo da letra Z no teclado, confere aí).
Olha o resultado desse código:
Repara que a gente pulou linha ali no meio da string, justamente onde a gente escreveu \n na string, viu?
Usamos essa barrinha ao contrário (contra-barra) pra expressar dentro da string todos os caracteres que não dá pra digitar normalmente. O primeiro que a gente aprendeu foi esse \n (n de new line), mas tem outros.
Por exemplo, se a gente usa aspas pra iniciar e finalizar a string, como a gente poderia escrever uma aspa dentro da nossa string?
A resposta é a gente usar a contra barra também! Se liga em como dá pra fazer:
Olha, quando a gente escrever \’ na string, ele não fecha a string. Aí a gente consegue salvar a aspa dentro da string.
Esse truque também serve pra aspa dupla, usando \”. Além desse, você também pode querer escrever o próprio caractere \ na sua string, por algum motivo. Tipo assim:
Se a gente colocar só essa barra na string, vai dar um erro. Pra conseguir salvar essa barrinha na string, precisamos usar duas barrinhas dessa! Assim, ó:
Agora sim! Usamos duas \\ pra salvar uma \ na string.
String de várias linhas
Ok, mas caso você tenha uma string de várias linhas, tipo um poema ou sei lá, a gente teria que usar um montão de \n, porque a gente não pode pular linha na string. Por que será que ninguém inventou uma forma mais fácil???!
Na verdade, inventaram! Pra gente fazer uma string com várias linhas, a gente abre e fecha ela com três aspas simples (‘’’) ou três aspas duplas (“””). Olha esse exemplo aqui:
Olha, que maravilha. Agora vai funcionar sem a gente ter que escrever manualmente um monte de ‘\n’!
Olha lá, conseguimos fazer uma string com várias linhas!
Operações com strings
Mas e se a gente tiver duas strings e quiser unir elas?!
Tenho que te falar que essa é a coisa mais útil de strings, e é chamado de concatenação. Concatenar significa unir duas strings, e a gente faz isso usando o operador de soma (+). Olha:
Repara que a gente concatenou (vulgo “uniu”) a string da variavel_doida_1 com uma string literal “\n” (literal é quando não tá em nenhuma variável) e depois uniu com a string guardada na outra variável.
Além do operador de soma, também é possível usar o operador de multiplicação. Olha:
O resultado disso é:
Repara que o resultado foi triplicar o texto. Mas esses são os únicos operadores que funcionam com string, beleza? Se você tentar usar subtração (-) ou divisão (/) com string, vai dar erro, ok?
Além desses matemáticos, a gente também pode usar o operador in. Esse operar checa se existe uma letra ou substring dentro de uma string. Se existe, retorna True. Se não existir, retorna False.
Mas a gente precisa tomar cuidado com esse operador, pois ele não é comutativo. Isso significa que (x in y) é diferente de (y in x), beleza?! O macete pra usar esse operador você tem que pensar na tradução: “existe x dentro de y?”
Por último, também pode ser útil a gente saber o tamanho de uma determinada string. E essa é exatamente a utilidade da função len(). Olha ela em ação:
AGORA BORA FAZER EXERCÍCIOOOOOO!
Usando caracteres especiais nas strings
String de várias linhas
Operações com strings
Exercícios Resolvidos
Exercício Resolvido #1
PUC-Rio, Lista 4 - Adaptado
Escreva um programa que receba quatro inteiros representando dois horários (horas e minutos de cada um dos horários) e retorne uma string no formato '...h ... m' com a diferença em horas e minutos entre os dois horários. Considere que o segundo horário será sempre posterior ao primeiro.
Passo 1
Fala aí! Pra começar esse exercício, precisamos pedir pro usuário digitar os dois horários. Vamos fazer isso usando a função input(). Mas, horas e minutos são dados numéricos inteiros. Se a gente espera números inteiros do usuário, precisamos converter o resultado da função input(). Isso porque a função input() sempre retorna string.
Pronto! Agora calcular a diferença entre os dois horários, considerando que o segundo horário é posterior (isso tá escrito no enunciado, jae?).
Passo 2
Pra gente conseguir calcular a diferença, precisamos passar tudo pra minutos! Então, vamos criar variáveis chamadas “minutos_totais”.
Beleza! Agora que a gente já tem os minutos totais dos dois horários, a gente pode subtrair um do outro pra calcular a diferença.
Com a diferença total em minutos, a gente pode dividir em minutos e horas usando os operadores matemáticos de divisão inteira e resto.
Beleza, agora a gente já tem a diferença entre os horários em horas e minutos. Precisamos só exibir pro usuário!
Passo 3
Cara, pra gente exibir pro usuário, vamos recorrer a nossa queridíssima função print(). Porém, o enunciado especificou o formato de saída. Pra gente deixar a saída no formato que o enunciado pediu, vamos converter as variáveis numéricas pra string usando a função str(). Isso porque, no formato de string, a gente pode usar concatenação (unir string usando o operador +). Com concatenação, a gente pode fazer a formatação de boa! Olha:
A gente converteu a diferença das horas pra string e unimos com um ‘h’. Depois unimos tudo isso com a diferença dos minutos em string, e depois unimos de novo com o ‘m’. Pronto!! Nosso programinha tá funcionando!
Te vejo no próximo exercício, hein! Não me deixa esperando...
Resposta
Exercício Resolvido #2
Elaboração própria
Analise a saída do seguinte código, quando a entrada é 2:
Passo 1
Fala aí! Cara, o que vai acontecer é que o número que foi digitado (nesse caso, 2) vai ser guardado na variável n, em forma de texto. Isso porque a função input() sempre retorna texto.
Depois, é importante lembrar que quando tem várias funções aninhadas, uma dentro da outra, as mais internas são resolvidas antes. Nesse caso, a primeira coisa a acontecer na segunda linha é a expressão “n+’10’”. Como n é e texto e “10” também, o que vai acontecer é a concatenação desses dois valores. Nesse caso, o resultado vai ser “210”.
Depois, a próxima expressão a ser resolvida é a float(“210”). O resultado desta função vai ser a conversão do texto “210” pra número real. Isso é, 210.0. No fim, esse valor vai ser exibido pro usuário.
E é isto! Terminamos por aqui! Te vejo no próximo.
Resposta
210.0
Exercício Resolvido #3
PythonBrasil
Faça um programa que leia 2 strings e informe o conteúdo delas seguido do seu comprimento.
Passo 1
Fala aí! Já que a gente precisa ler duas strings, a gente pode começar perguntando pro usuário. E pra isso a gente usa a função input().
Beleza! Depois disso, a gente já tem salvo nas variáveis os dados necessários. Agora, a gente só precisa descobrir o tamanho de cada uma delas.
Passo 2
Pra descobrir o tamanho de uma string, a gente pode usar a função len().
Assim, a gente salvou o tamanho das strings que recebemos do usuário nas variáveis tamanho_str_1 e tamanho_str_2. Só precisamos exibir o resultado final agora.
Passo 3
Pra gente exibir o resultado final pro usuário, vamos usar a função print().
Pronto! Essa função len() é muito importante, e a gente vai usar ela muitas vezes. Pra você lembrar, “len” é uma abreviação de “length”, que significa “comprimento”. Sempre que você quiser saber o comprimento (ou tamanho) de uma string, vai precisar da função len(), ok?!
Valeu, cara! Até o próximo!
Resposta
Exercício Resolvido #4
Elaboração própria
Faça um programa que recebe do usuário uma citação e exibe, entre aspas duplas, a citação lida.
Passo 1
Fala aí! Pra gente resolver esse aqui, vamos precisar lembrar das paradas das aspas. Pra gente criar uma string em Python, precisamos delimitar por aspas no nosso código.
Então, como podemos usar aspas dentro das strings?! Essa é a ideia do exercício! Vamos começar perguntando a citação pro usuário, e pra isso a gente vai usar a função input().
Beleza! Nesse momento a gente tem, dentro da variável “citacao”, a entrada do usuário. Precisamos exibi-la de volta entre aspas no nosso próximo passo.
Passo 2
Pra gente exibir informações pro usuário, usamos a função print(). Uma particularidade da função print() é que é possível exibir dados, um do lado do outro, separando-os por aspas! Saca só:
Como esses três itens vão ser exibidos lado a lado, o resultado vai ser a citação recebida entre aspas. Se liga também que a string termina quando a gente digita a mesma aspa que a gente começou.
Por isso, a gente consegue colocar aspas simples (‘) dentro de uma string que foi criada com aspas duplas (“), e vice versa. Além desse método, a gente também podia ter feito isso usando a contra barra.
Dessa forma, apesar de ter começado a string com aspas duplas (“), também conseguimos colocar uma aspa igual dentro da string. Se liga que, nesse caso, a contra-barra (\) não aparece no resultado final, ok?!
Resposta
Exercício Resolvido #5
Elaboração própria.
Escreva um programa que seja capaz de ler o dia, mês e o ano referentes a data de nascimento de um usuário e retorne essa mesma data no seguinte formato: dd/mm/aaaa.
Passo 1
Cara, se a questão tá mandando a gente ler alguma informação do usuário, precisamos da função input(). Vamos começar perguntando o dia do nascimento do usuário.
Mas não esquece que a gente espera um número inteiro como resposta. Mas a gente quer concatenar (unir) as strings no final. Por isso, não vamos converter o resultado da função input() com a função int(), ok?!
Passo 2
Agora, vamos perguntar também o mês do nascimento. Da mesma forma que antes, não precisamos converter a resultado pra inteiro.
Agora só falta a gente saber o ano.
Passo 3
Vamos repetir o procedimento pra obter o ano de nascimento do usuário.
Beleza, agora a gente só precisa colocar esses dados no formato que o enunciado pede.
Passo 4
Pra isso, vamos simplesmente unir as três variáveis separando com barras “/”. Lembra que é possível concatenar (unir) dados do tipo texto usando o operador de soma (+)?! Então! Vamos usar ele aqui...
No fim da execução desse programa será exibida a data no formato do enunciado, e assim finalizamos o exercício! Valeuuu!
Resposta
Exercício Resolvido #6
PensePython, adaptado
Escreva um programa que desenhe uma grade como a seguinte:
Passo 1
Fala aí! Cara, se liga que as estruturas do desenho seguem um certo padrão. Existe dois tipos de “linha”. A composta por “+” e “-”, e a outra composta por “|”. Vamos chamar esses dois tipos de A e B, respectivamente.
Como primeiro passo, vamos preparar a linha do tipo A. A gente tá ligado que a variável da linha de tipo A começa com um “+”.
Pronto! Agora só falta o resto! hahaha cara, se liga que a próxima coisa que a gente vai colocar é um “- “. Só que isso se repete 4 vezes. Não tem porque a gente escrever quatro vezes, se a gente pode multiplicar a string por 4.
Repara que eu também deu um espaço depois do primeiro “+”. Vamos dar um print() pra ver como tá ficando?!
Beleza! Tá ficando bom. Repara que na imagem original a gente tem 2 vezes essa imagem e um “+” no final. Então vamos atualizar.
Vamos dar um print() agora pra ver como tá ficando…
Olha que maravilha! Beleza.. Vamos fazer a linha do tipo B agora.
Passo 2
A gente pode seguir a mesma lógica que fizemos com o A pra criar a variável B.
Repara que a gente quer que essas peças se encaixem, por isso seguimos o mesmo modelo. O resultado se a gente dar um print() na variável B agora é assim:
Beleza! Agora que a gente tem as duas “peças” do nosso quebra cabeça, vamos montar o desenho todo.
Passo 3
Dando uma segunda olhada, a gente pode analisar que o desenho é um A seguido de 4 B duas vezes, e mais 1 A no final. Vamos levar isso pro nosso código!
Beleza! Parece tudo ok, mas se a gente tentar dar um print() na variável desenho…
OLHA A M*RDA QUE FICOU!
Calma, respira. Não chuta o balde ainda. Acontece que quando a gente usa o print() em uma linha só, ele automaticamente coloca um “\n” no final. Isso não tá acontecendo quando a gente junta as peças em A e B dentro de desenho.
Pra consertar isso, vamos colocar um “\n” no fim de cada uma das nossas peças…
Beleza. Agora, vai funcionar. Vamos usar o print() pra testar o nosso desenho completo.
E o resultado:
Olha que deliciaaaa!
Assim, finalizamos nosso exercício! :) Te vejo no próximo, doido.
Resposta
Exercício Resolvido #7
PUC-Rio, Adaptado
Escreva um programa que leia do usuário o nome e a idade, e que retorne a frase: “Olá fulano, meu nome é Python e eu tenho x anos. ” onde fulano e x são, respectivamente, o nome e o dobro da idade da idade recebida.
Passo 1
Fala aí! Cara, nesse exercício, a gente precisa saber o nome e a idade do usuário. Pra isso, vamos usar a função input() pra perguntar cada um dos dados pro usuário.
Se liga que na idade a gente converteu o resultado da função input() pra inteiro. A função input() sempre retorna um string, mas a gente vai precisar fazer operações matemáticas com a idade (multiplicar por dois, já que o enunciado fala do “dobro da idade”). Viu? A gente precisa pensar nos próximos passos desde o início da nossa resolução. Vamos calcular o dobro da idade agora.
Passo 2
Agora que a gente já tem a idade no formato numérico, a gente pode criar uma nova variável e guardar nela a idade multiplicada por 2.
Beleza! Agora que já temos os dados necessários, a gente só precisa exibir pro usuário!
Passo 3
Agora que já temos os dados, vamos exibir o formato que o enunciado pede. Mas se liga, mano, que a gente tem que colocar o nome da pessoa no lugar de “fulano” e colocar o dobro da idade no lugar de “x” na string. Pra colocar o nome, basta a gente fazer uma concatenação.
Mas se liga que pra colocar a idade, a gente precisa de uma treta a mais. Isso porque a variável “dobro_idade” tá guardando um valor numérico, e não é possível concatenar números com strings, somente string com string. Por isso, a gente precisa converter os dados numéricos pra string. E pronto! Matamos a questão!
Te espero na próxima!
Resposta
Exercício Resolvido #8
PUC-Rio, adaptado
Escreva um programa que receba o nome de uma pessoa e exiba o número de letras do nome.
Passo 1
Fala aí! Nesse caso, a primeira coisa que a gente tem que fazer é perguntar o nome do usuário! Vamos fazer isso com a função input().
Agora, precisamos calcular o tamanho do nome da pessoa.
Passo 2
Pra calcular o tamanho de uma string, a gente pode usar a função len().
Pronto! Agora a gente tem, dentro da variável “tamanho”, o número de letras que a variável “nome” tem. E é exatamente isso que o enunciado tá pedindo. A gente só precisa exibir esse número agora.
Passo 3
Pra gente exibir pro usuário, vamos usar a função print().
Se liga que, pra exibir o texto bonitinho, eu concatenei uma string com o tamanho dela. Importante se ligar que pra unir dois valores num texto, os dois precisam ser string. Como o tamanho era um número inteiro, eu precisei converter pra string antes, ok?! Vamos testar!
Passo 4
Executando o programa e colocando meu nome, o resultado foi esse:
Bom parece que tá tudo certo! Então, finalizamos o exercício!
Te vejo no próximo, doido!