1
0
Fork 0
cdpython01/PY02-Strings.ipynb

16 KiB

Strings

Acabamos de usar Strings para exibir uma mensagem. Agora vamos ver o que são Strings e aprender a usá-las.

O quê é String?

String, em inglês, significa cordão, fio, filamento... Para o computador, isso que estamos chamando de Strings são um "filamento" ou um "enfileramento" de caracteres: um caracter ou mais, um após o outro, formando um conjunto de caracteres com uma sequência bem definida.

Strings são usadas principalmente para armazenar o que chamamos de texto. Nesse caso, texto é qualquer dado que seja composto por caracteres. Pode ser um endereço de email, um nome ou, até, um texto mesmo, com título e parágrafos, desde que seja um texto simples, como o de um arquivo .TXT.

Criando uma String em Python

Para criar uma String em Python usamos aspas simples ou aspas duplas. Colocamos o texto entre as aspas e o Python vai interpretar isso como sendo uma String. Podemos usar uma String assim desse jeito mesmo ou então atribuí-la a uma variável para usarmos ela depois. Assim:

In [ ]:
# exemplo de uma String em Python

'Quer continuar (s/n)?'
In [ ]:
# armazenando uma String em uma variável

mensagem = 'Quer continuar (s/n)?'

A variável chamada mensagem agora contém a string 'Quer continuar (s/n)?. Da mesma forma como fizemos antes com os valores dos pontos da jogada, podemos agora usar essa variável para realizar operações com a string 'Quer continuar (s/n)?.

Por exemplo, podemos imprimir na tela essa string. Fazemos isso usando a função print() para exibir uma string contida na variável. Assim:

In [ ]:
print(mensagem)

Para criar uma string com mais de uma linha, existe uma sintaxe especial do Python. Escrevemos o texto entre 3 aspas simples (ou duplas, tanto faz).

In [ ]:
'''
Olá!
Esta rodada já terminou. Você quer continuar?

Responda S/n:
'''

Um comentário sobre sintaxe e semântica

Para atribuir essa string a uma variável, as aspas que iniciam a String devem ficar na mesma linha que a atribuição à variável.

Observe a diferença executando os dois trechos de código abaixo.

In [ ]:
mensagem =
'''
Olá!
Esta rodada já terminou. Você quer continuar?

Responda S/n:
'''

O primeiro trecho de código não roda. O Python nos mostra uma mensagem de erro que diz SyntaxError: que significa Erro de sintaxe.

Sintaxe é a forma correta de escrever uma sentança em uma linguagem. Algumas formas não são válidas e por isso uma sentença escrita dessa forma não vai fazer sentido.

Quando existe um erro de sintaxe o Python interrompe a execução do programa porque ele não consegue interpretar o que está escrito na linha.

No caso do primeiro trecho de código, não fez sentido para o Python encontrar uma linha com uma sentença como aquela. O que ela está fazendo é:

  • pedir para o Python criar uma variável
  • e atribuir um valor a ela
  • mas não está dizendo qual é o valor a ser atribuído!

Assim o Python não sabe o que fazer e pára.

In [ ]:
mensagem = '''
Olá!
Esta rodada já terminou. Você quer continuar?

Responda S/n:
'''

O segundo trecho de código funciona porque a sintaxe é a correta.

O que determina se a sintaxe é correta ou não é a gramática da linguagem de programação que estamos usando.

Essa gramática pode ser diferente em outras linguagens. Por isso, aprender uma linguagem de programção é, inicialmente, aprender sua gramática e como escrever sentenças válidas usando a linguagem, ou seja, como escrever linhas de código que podem ser executadas.

O resultado da execução de uma linha de código normalmente é chamado de resultado mesmo, mas ele é também seu significado ou, usando termo mais técnico, é a sua semântica.

Por isso, é correto falar assim:

  • Qual é o resultado de 2 + 4? O resultado é 6.
  • O que quer dizer 2 + 4? Quer dizer 6.

Intercalando valores em Strings

Podemos criar strings que contém caracteres e também variáveis. Essas strings são úteis para usarmos como modelos para a geração de outras strings.

No exemplo abaixo, observe o uso de um caracter especial %s. Esse caracter serve para marcar o local onde um valor será inserido na String depois.

In [ ]:
jogador = 'Mestre dos Magos'

mensagem = '''
Fim da rodada, %s. 

Quer continuar?
(S)im / (N)ão
'''

print(mensagem % jogador)

Para inserir um valor no lugar de %s usamos um outro operador do Python, o operador %. Quando aplicado a uma string, esse operador executa uma operação de busca e substituição na String que está no lado esquerdo dele. O operador % vai procurar o marcador %s na string que está a sua esquerda e substituí-lo pelo valor que está a sua direita.

Usando uma tupla

Abaixo vemos um exemplo de como usar mais de uma marcação em uma string, para intercalar mais de um valor. A diferença é que precisamos passar para o operador % uma tupla como parâmetro.

Uma tupla é uma sequência de valores que tem uma posição fixa na sequência e que não podem ser alterados - ou seja, a sequência sempre mantém a ordem que ela tinha quando foi criada.

Uma tupla é criada colocando os valores que pertencerão a ela entre parênteses e separando eles por vírgula.

No exemplo abaixo, a tupla de valores é:

In [ ]:
(jogador, pontos)
In [ ]:
jogador = 'Mestre dos Magos'
pontos = 1953.5
mensagem = '''
Fim da rodada, %s. 
Você fez %s pontos.

Quer continuar?

(S)im / (N)ão
'''

print(mensagem % (jogador, pontos))

Observe que a tupla contém valores de dois tipos diferentes: numérico (a pontuação) e String (o nome do jogador). Isso não é um problema para o Python. Podemos misturar sem erro tipos de dados diferentes nessas estruturas.

Um exemplo com HTML

Vamos trocar a função print() por uma que sabe como imprimir HTML. Ela não faz parte das funções padrão do Python e por isso precisamos importar o código dela para nosso programa para poder usá-la.

importar é trazer para nosso programa algum código já escrito e que está armazenado em uma bilioteca de código.

Existem milhares de bibliotecas de código para o Python. Cada uma contém vários pacotes, que são coleções de funções prontas para serem reutilizadas.

Neste próximo exemplo importamos uma função que que imprime HTML e que está no pacote IPython.display.

IPython é o nome do interpretador Python que está executando todos os trechos de código que escrevemos até agora e significa Interactive Python, que quer dizer Python Interativo.

O comando do Python para importar bibliotecas é import. Quando queremos apenas alguns pacotes de uma biblioteca usamos o par de comandos from ... import, como na primeira linha do exemplo abaixo.

In [ ]:
# do pacote IPython.display importamos apenas HTML
from IPython.display import HTML

jogador = 'Mestre dos Magos'
pontos = 1953.5

# Substituímos a string da mensagem por um código HTML
mensagem = '''
<center>
<h2>Fim da rodada, %s</h2>
<h3>
Você fez %s pontos.
</h3>
<img src='img/mago-64px.png' />
<br />
Quer continuar ? <br />
(S)im / (N)ão
</center>
'''
# Imprimimos usando HTML() ao invés de print()
HTML(mensagem % (jogador, pontos))

Note que esse código HTML está sendo gerado dinamicamente. Ele não está fixado no código. A cada execução do código ele pode ter um resultado diferente.

Vamos ver isso copiando o código que calcula a pontuação para dentro desse último exemplo que imprime HTML alterando variável que contém a pontuação. Vamos trocá-la pela variável resultado, que é calculada pela primeira parte do código.

In [ ]:
# Parte 1 
# Código que calcula a pontuação
#

experiencia = 20
pts_experiencia = 0.05
pts_magia = 0.5
robos = 2

resultado = (robos * pts_experiencia) + (robos * pts_magia) + (robos * experiencia)

# Não precisamos da linha com print() porque
# vamos usar HTML()
# print(f'Você ganhou {resultado} pontos!')

# Parte 2
# Código que imprime o HTML
#

# do pacote IPython.display importamos apenas HTML
from IPython.display import HTML

jogador = 'Mestre dos Magos'
# retiramos esta linha porque vamos usar
# a variável 'resultado' que foi calculada acima
# pontos = 1953.5

# Substituímos a string da mensagem por um código HTML
mensagem = '''
<center>
<h2>Fim da rodada, %s</h2>
<h3>
Você fez %s pontos.
</h3>
<img src='img/mago-64px.png' />
<br />
Quer continuar ? <br />
(S)im / (N)ão
</center>
'''
# Imprimimos usando HTML() ao invés de print()
# Aqui usamos a variável 'resultado' no lugar de 'pontos'
# HTML(mensagem % (jogador, pontos))
HTML(mensagem % (jogador, resultado))

Para ver o HTML ser gerado dinamicamente, experimente mudar o valor das variáveis experiencia, robos, pts_experiencia, pts_magia e jogador no código acima e rodar ele novamente a cada alteração.

Organizando o código

Antes de continuar, vamos organizar um pouco o código e limpar os comentários do exemplo anterior. Assim:

In [1]:
from IPython.display import HTML

jogador = 'Mestre dos Magos'

experiencia = 20
pts_experiencia = 0.05
pts_magia = 0.5
robos = 2

mensagem = '''
<center>
<h2>Fim da rodada, %s</h2>
<h3>
Você fez %s pontos.
</h3>
<img src='img/mago-64px.png' />
<br />
Quer continuar ? <br />
(S)im / (N)ão
</center>
'''

resultado = (robos * pts_experiencia) + (robos * pts_magia) + (robos * experiencia)

HTML(mensagem % (jogador, resultado))
Out[1]:

Fim da rodada, Mestre dos Magos

Você fez 41.1 pontos.


Quer continuar ?
(S)im / (N)ão

Esse é um exemplo de uma organização típica de código de um programa.

  • Primeiro escrevemos os imports
  • Depois declaramos as variáveis do programa
  • Depois escrevemos o código que manipula as variáveis, faz cálculos, executa funções...

Fazemos isso para facilitar a leitura e a manutenção do código. É mais difícil, por exemplo, fazer uma substituição de uma variável por outra (como fizemos entre as variáveis pontos e resultado) se elas estiverem todas no mesmo trecho do código. Isso nem sempre é possível, dependendo do tamanho do programa.