Guia de estudo
Declarando strings: aspas, escape e mesma linha
Uma string em Python é um pedaço de texto. As formas básicas de declaração usam aspas simples ou aspas duplas. O motivo da regra da mesma aspa é o interpretador precisar saber onde o literal termina: se você abre com simples, fecha com simples; se abre com duplas, fecha com duplas. Misturar os dois tipos deixa um literal não finalizado e o programa nem chega a executar.
Quando o próprio texto contém aspas, entra o escape com contrabarra. A contrabarra imediatamente antes da aspa interna avisa que aquela aspa é conteúdo, não fechamento. Tem de ser a contrabarra (a tecla do lado do Z); a barra comum não funciona como escape. Se não houver aspas para escapar, essa contrabarra não é necessária nesse papel.
Outro escape essencial é a sequência \n, o caractere de quebra de linha. Ao imprimir, o cursor vai para a linha de baixo. Esse mesmo código de escape aparece em várias linguagens, não só no Python.
Strings declaradas com aspas simples ou duplas precisam começar e terminar na mesma linha. Quebrar a linha no meio do literal gera erro. Essa restrição é o motivo de existirem as técnicas da próxima seção para textos longos.
Aspas simples e duplas com o mesmo fechamento
nome = "Ada"
frase = 'Linguagem Python'
print(nome)
print(frase)
Cada literal abre e fecha com o mesmo tipo de aspa. Trocar o tipo no fechamento gera erro de literal não finalizado.
Escape de aspas e quebra de linha
fala = "Ele disse: \"olá\""
print(fala)
print("primeira linha\nsegunda linha")
A contrabarra imediatamente antes da aspa interna faz ela pertencer ao texto. A sequência \n vira linha nova na hora de imprimir.
Textos longos: contrabarra, parênteses, mais e docstring
Para continuar uma expressão na linha seguinte, coloque uma contrabarra no fim da linha. O Python entende que o código segue abaixo.
Outra forma é envolver a expressão em parênteses. Enquanto o fecha-parênteses não aparece, a expressão não acabou, então você pode quebrar linhas. Se o texto for dividido em vários pedaços entre aspas, cada pedaço é uma string e é preciso o operador + para conectá-los. Os parênteses só delimitam início e fim da expressão; quem une os pedaços é o +. Há ainda concatenação implícita: strings literais adjacentes, uma do lado da outra, são unidas automaticamente, sem sinal.
A docstring usa aspas triplas, simples ou duplas. Permite texto em várias linhas e aceita aspas internas sem escape. O detalhe crítico é que cada Enter vira quebra de linha dentro da string. Existe diferença entre como a informação é guardada e como é exibida: na tela você vê linha nova; na memória há o caractere \n. A função repr() devolve a representação guardada, deixando o \n visível. O método replace() substitui um trecho por outro e pode remover essas quebras, trocando-as por espaço, por exemplo.
A docstring tem dois usos: comentário e string multilinha. Textos grandes escritos direto no código são informação hard-coded. Em aplicações reais, especialmente para localização (exibir o idioma conforme o usuário), o caminho é manter textos em arquivos separados e não misturar conteúdo enorme com a lógica.
Parênteses e concatenação com +
frase = (
"Parte um "
+ "parte dois "
+ "parte três"
)
print(frase)
Os parênteses mantêm a expressão aberta em várias linhas. Como o texto foi fatiado em literais, o + cola os pedaços numa string só.
Concatenação implícita
frase = "Olá, " "mundo"
print(frase)
Literais vizinhos, um do lado do outro, são unidos pelo Python sem operador.
Docstring, repr e replace
texto = """linha um
linha dois"""
print(texto)
print(repr(texto))
print(texto.replace("\n", " "))
O Enter da docstring entra na string. repr() mostra o \n guardado; replace() troca esse caractere por espaço e achata o texto.
Concatenação versus vírgula no print e tipagem forte
Concatenar com + junta strings e produz uma string só, com os pedaços colados. A vírgula dentro do print não concatena. O print aceita vários argumentos e os exibe lado a lado, separados automaticamente por um espaço, sem criar uma string concatenada. Na tela os dois podem parecer parecidos; no programa são operações diferentes.
Essa distinção encontra a tipagem. Python tem tipagem forte: impede operações entre tipos diferentes, como concatenar string com inteiro, sem conversão explícita. JavaScript tem tipagem fraca e faz conversão implícita; nessas linguagens, o texto 10 somado ao número 1 pode virar o texto 101, um resultado estranho e fácil de passar batido. O Python evita essa classe de surpresa.
O mesmo símbolo + serve para somar números e para concatenar strings: a linguagem decide pelo tipo dos operandos. Em Haskell, citada na aula, concatenar e somar usam operadores diferentes, o que deixa a intenção explícita.
Na prática: se você precisa de uma string única, concatene. Se só quer exibir vários valores, passe vários argumentos ao print. A vírgula do print inclusive permite mostrar string e número lado a lado sem tentar colá-los numa string.
Mais cola; vírgula só exibe
print("Olá" + "mundo")
print("Olá", "mundo")
O + gera uma string só, sem espaço extra entre as partes. A vírgula do print mostra dois valores separados por espaço e não concatena.
Print com tipos diferentes, sem concatenar
print("Idade:", 18)
Vários argumentos no print são exibidos com espaço. Isso não é concatenação; misturar string e int com + seria recusado pela tipagem forte.
Multiplicação de strings, booleanos e o operador is
Uma das poucas operações entre tipos diferentes que o Python permite é multiplicar string por inteiro. A string se repete aquelas vezes. O exemplo da aula foi repetir o trecho ra dez vezes. A mesma ideia gerou um tabuleiro de jogo da velha na tela, só com repetição de texto.
Outras esquisitices vêm do começo da linguagem. Booleanos se comportam como inteiros: True equivale a 1 e False a 0, então True + True resulta em 2.
O operador is compara identidade: os dois objetos estão na mesma posição de memória? Ele não compara se os valores são iguais. O is não é um operador ruim; a má prática é usá-lo para testar igualdade. O Python pré-cria os inteiros de -5 a 256 na memória, então is entre esses números costuma dar verdadeiro. Fora dessa faixa, cada valor pode ocupar posições diferentes, e is pode falhar mesmo com o mesmo número. Para saber se dois valores são iguais, use o operador de igualdade, não o de identidade.
Repetir texto com multiplicação
print("ra" * 10)
print(True + True)
String vezes inteiro repete o texto. True conta como 1, então True + True resulta em 2.
is testa posição na memória
a = 256
b = 256
print(a is b)
c = 257
d = 257
print(c is d)
is pergunta se é o mesmo objeto, não se o valor é igual. Na faixa pré-instanciada o resultado costuma ser True; fora dela, pode não ser.
Métodos, imutabilidade e sanitização de dados
Métodos de string devolvem uma string nova. upper() coloca todos os caracteres em maiúsculas. lower() coloca todos em minúsculas. title() capitaliza a primeira letra de cada palavra e deixa o restante em minúsculas, o que ajuda a padronizar nomes. capitalize() também ajusta maiúsculas e minúsculas do texto.
Strings são imutáveis: chamar o método não altera o original. O retorno precisa ser guardado em uma variável se você quiser usar o texto transformado depois. Só mudar o que aparece na impressão não muda o dado armazenado; o tratamento tem de acontecer antes de guardar ou de exibir de forma definitiva.
Sanitização é esse processo de limpar e preparar dados vindos do usuário, por exemplo corrigindo maiúsculas bagunçadas. A regra é nunca confiar no que o cliente envia: sempre verifique e prepare. A sanitização resolve uma parte dos problemas de formato. Nem tudo cai em método automático; uma revisão gramatical, por exemplo, pode precisar de uma pessoa.
Métodos devolvem outra string
nome = "maria silva"
print(nome.upper())
print(nome.lower())
print(nome.title())
print(nome.capitalize())
print(nome)
upper, lower, title e capitalize não mexem em nome. O último print mostra o original intacto, porque a string é imutável.
Guardar o resultado da sanitização
nome = "maria silva"
limpo = nome.title()
print(limpo)
Para aproveitar o texto tratado, atribua o retorno do método a uma variável antes de exibir ou guardar.
Avisos administrativos — 1 recados sobre prazos, regras e funcionamento do curso
01:36:50Próxima aula na terça-feira.
Perguntas de aluno — 11 perguntas respondidas na gravação
Professora, essa questão das 3 aspas não tem uma premissa que ela pode ser usada tmbém para comentar com quebra de linha sem ter que colocar o \n? 00:22:33 · chat 00:17:59
Sim, a docstring tem dois usos: comentário e string multilinha; falaremos sobre isso na aula.
tanto faz o lado da barra? 00:22:55 · chat 00:22:42
Não importa o lado, mas tem que ser contrabarra (a que fica do lado do Z); barra normal não funciona.
Natália: a contra barra sempre vai antes das aspas, certo? 00:35:05
Sim, se precisar escapar as aspas, ela vem exatamente antes; se não precisar escapar, não.
na tp1 a primeira pergunta é só fazer um comentário usando a #, mas ai eu só digito um monte reto ou faço algo para ficar bonitinho ? 00:35:35 · chat 00:31:52
Dica: colocar vários # no início de cada linha para não criar um comentário horizontal gigante.
Como ficaria tua frase gigante do Guns nesse formato de parênteses? 00:36:26 · chat 00:32:20
Seria a segunda versão: dividir a string em múltiplas partes e usar o + para concatenar.
Deixa eu ver se eu compreendi, uma é somente com a contrabarra e a outra tem que estar entre aspas e colocando os ”+”? 00:36:41 · chat 00:35:42
Sim; o parênteses delimita o início e fim da expressão, e quando você divide a string, precisa do + para unir.
José: não entendi o final sobre a string quebrada em múltiplas linhas / o contrabarra n invisível. 00:45:18
Existe diferença entre como a informação é guardada (com \n) e como é exibida (quebra de linha); na docstring os enters viram \n.
Tem algum método de print que mostre esse \n que fica oculto? 00:48:39 · chat 00:48:34
Pesquisamos e existe a função repr(), que devolve a representação da string mostrando o \n.
Isso seria pq o + de concatenar e o + de somar são o mesmo símbolo? 01:11:26 · chat 01:05:26
Sim, o Python decide pelo tipo; Haskell, por exemplo, usa ++ para concatenar e + para somar.
Oswaldo: por que manter o is se ele é recomendado para não usar? Não dá para remover? 01:25:46
O is não é ruim; ele compara posição de memória e é útil. A má prática é usar is para comparar igualdade.
Prof, então em caso de precisar editar os dados antes de colocar na aplicação a gente só muda a impressão da variavel e não o dado dela? 01:35:17 · chat 01:35:14
Depende; a sanitização resolve alguns problemas e deve ser feita antes de guardar/exibir; revisão gramatical pode precisar de humano.
Trechos que valem reouvir — 6 momentos que mais rendem uma segunda escuta
00:39:10— Comparação das três formas de declarar strings longas (contrabarra, parênteses, docstring) — os exemplos estão na tela.00:46:21— Explicação visual de como \n é guardado versus exibido; vale ver a tela para entender a diferença.01:02:50— Código JavaScript mostrando conversão implícita e os resultados estranhos que o Python evita.01:18:00— Demonstração do is e da pré-instanciação de inteiros -5 a 256 no terminal.01:22:16— Multiplicação de strings e o exemplo do tabuleiro; o efeito visual está na tela.01:29:14— Métodos de string em ação e a ideia de sanitização de dados do usuário.