Trechos extraídos de “Apprendre à programmer avec Python” de Gérard Swinnen, disponível sob os termos da Licença CC BY-NC-SA 2.0.

Principais tipos de dados

Dados numéricos

O tipo inteiro (integer)

Números inteiros são tipicamente armazenados na memória em agrupamentos de 32-bits ou 64-bits, permitindo representar os seguintes intervalos de números:

  • para 32-bits: de −2.147.483.648 até 2.147.483.647 ou de -(231) até 231 − 1
  • para 64 bits: de −9.223.372.036.854.775.808 até 9.223.372.036.854.775.807 ou de -(263) até 263 − 1

Estes são os limites típicos da maioria das linguagens de programação. Podemos testar a existência de limites para python observado a série de Fobonacci:

>>> a, b, c = 1, 1, 1
... while (c < 250):
...     print(c, ":", b, type(b))
...     a, b, c = b, a+b, c+1
...
... (exibição dos primeiros 245 termos omitida)
...
246 : 1864069667454273644225850958407065116260306867075373 <class 'int'>
247 : 3016128079338728432528443992613633888712980904400501 <class 'int'>
248 : 4880197746793002076754294951020699004973287771475874 <class 'int'>
249 : 7896325826131730509282738943634332893686268675876375 <class 'int'>

Não vamos nos preocupar com os detalhes técnicos, porém podemos identificar que quando é necessário processar valores inteiros de tamanho muito grandes, além dos limites indicados acima, sua codificação na memória do computador se torna mais complexa e seu processamento pelo processador requer várias operações sucessivas. Tudo isso é feito automaticamente, sem que você precise se preocupar com isso. Com isso, é possível executar cálculos com Python envolvendo valores inteiros com qualquer número de dígitos significativos. Esse número é limitado apenas pelo tamanho da memória disponível no computador usado. Cabe destacar que os cálculos envolvendo números muito grandes terão que ser decompostos para realização de cálculos múltiplos, baseados números menores, o que pode exigir um tempo de processamento considerável em alguns casos. Experimente aumentar o limite da lista gerada pelo programa abaixo.

>>> a, b, c = 3, 2, 1
>>> while (c < 15):
...     print(c, ": ", b)
...     a, b, c = b, a*b, c+1

1 :  2
2 :  6
3 :  12
4 :  72
5 :  864
6 :  62208
7 :  53747712
8 :  3343537668096
9 :  179707499645975396352
10 :  600858794305667322270155425185792
11 :  107978831564966913814384922944738457859243070439030784
12 :  64880030544660752790736837369104977695001034284228042891827649456186234582611607420928
13 :  7005669890111832002923764139957621692162454505797269791738369231327175488362123506443467340026896520469610300883250624900843742470237847552
14 :  454528076456265799856362940482493512051682398707229461514016556556583986422276163358151238257824601969802061415367471160941735505142279479530059170096950422693079038247634055829175296831946224503933501754776033004012758368256
>>>

O tipo float

Você já encontrou esse outro tipo de dados numéricos anteriormente: o tipo “número real” ou “número de ponto flutuante”, designado em inglês pelo número de ponto flutuante da expressão, e que por esse motivo chamaremos tipo float em Python.

Este tipo permite cálculos em números muito grandes ou muito pequenos (dados científicos, por exemplo), com um grau constante de precisão. Para que um dado numérico seja considerado como sendo do tipo float pelo Python, basta que ele contenha em sua formulação um elemento como um ponto decimal ou um expoente de 10. Os valores

3.14      10.      .001      1e100      3.14e-10

são interpretados automaticamente pelo Python como sendo do tipo float.

Então, vamos tentar este tipo de variável em um novo programa inspirado no anterior:

>>> a, b, c = 1., 2., 1	            # => a et b seront du type 'float'
>>> while c <18:
...     a, b, c = b, b*a, c+1
...     print(b)

2.0
4.0
8.0
32.0
256.0
8192.0
2097152.0
17179869184.0
3.6028797019e+16
6.18970019643e+26
2.23007451985e+43
1.38034926936e+70
3.07828173409e+113
4.24910394253e+183
1.30799390526e+297
Inf
Inf

Estamos mais uma vez exibindo uma série cujos termos aumentam extremamente rápido, cada um sendo igual ao produto dos dois anteriores. No nono termo, o Python muda automaticamente para notação científica (“e + n” na verdade significa “dez no expoente n”). Após o décimo quinto elemento, novamente observamos um estouro (sem mensagem de erro): os números grandes demais são indicados como “inf” (para “infinito”). O tipo float usado no nosso exemplo permite manipular números (positivos ou negativos) entre 10-308 e 10308 com uma precisão de 12 dígitos significativos. Esses números são codificados de maneira particular em 8 bytes (64 bits) na memória da máquina: uma parte do código corresponde aos 12 dígitos significativos e outra à ordem de grandeza (expoente de 10).

Dados alfanuméricos

Até agora só manipulamos números. Mas um programa de computador também pode manipular caracteres alfabéticos, palavras, frases ou seqüências de quaisquer símbolos. Na maioria das linguagens de programação, existem estruturas de dados específicas para esse propósito chamadas “strings de caracteres”.

O tipo string

Uma variável do tipo string pode ser definida em primeira aproximação como uma seqüência de caracteres. Em um script python, podemos delimitar tal sequência de caracteres, entre aspas simples ou duplas. Exemplos:

>>> frase1 = 'de alface'
>>> frase2 = '"Sim", ele respondeu,'
>>> frase3 = "eu gosto"
>>> print (frase2, frase3, frase1)
"Sim", ele respondeu, eu gosto de alface.

As 3 variáveis frase1, frase2 e frase3 são, portanto, variáveis ​​do tipo string. Observe o uso de aspas para delimitar uma cadeia na qual existem aspas simples ou o uso de aspas simples para delimitar uma cadeia que contenha aspas. Observe também que a função print () insere um espaço entre os elementos exibidos. O caractere especial “" (barra invertida) permite algumas sutilezas complementares:

  • Primeiro, permite escrever em várias linhas um comando que seria muito longo para caber em um (isso se aplica a qualquer tipo de comando).
  • Dentro de uma string, a barra invertida permite que você insira um número de códigos especiais (quebras de linha, aspas simples, aspas e assim por diante). Exemplos:
>>> txt3 = '"Quer um copo d\'agua?" Ela perguntou.'
>>> print (txt3)
"Quer um copo d'agua?" Ela perguntou.
>>> Hi = "Esta é uma string longa \n contendo várias linhas \
... de texto (Funciona da mesma maneira que em C / C ++. \n\
...    Note que os espaços em branco no início \n da linha são significativos.\n "
>>> print (Hi)
Esta é uma string longa
 contendo várias linhas de texto (Funciona da mesma maneira que em C / C ++.
    Note que os espaços em branco no início
 da linha são significativos.
Observações
  • A sequência \n em uma string causa uma quebra de linha.
  • A sequência \’ permite inserir uma apóstrofe em uma string delimitada por aspas simples. Da mesma forma, a sequência \" permite inserir aspas em uma string delimitada por aspas.

Áspas triplas

Para inserir facilmente caracteres especiais ou “exóticos” em uma string, sem usar barra invertida, ou para aceitar a própria barra invertida na string, você ainda pode delimitar a string usando aspas triplas:

>>> a1 = """
... Exemplo de texto pré-formatado, isto é,
... cuja identação e
... caracteres especiais \ ' " são
... mantidos sem
... julgamento. """
>>> print (a1)
Exemplo de texto pré-formatado, isto é,
cuja identação e
caracteres especiais \ ' " são
mantidos sem
julgamento.

Operações básicas com strings

É possível agrupar strings pequenas para construir strings maiores. Essa operação é chamada de concatenação e é executada no Python usando o operador + (esse operador, portanto, executa a operação de adição quando aplicado a números e a operação de concatenação quando é aplicado às strings). Exemplo:

a = 'O peixinho'
b = 'vai crescer'
c = a + b
print(c)
O peixinho vai crescer

Também é possível determinar o comprimento (isto é, o número de caracteres) de uma string, usando a função integrada len():

>>> ch = 'Georges'
>>> print(len(ch))
7

É possível converter um número real uma string que represente um número. Exemplo:

>>> ch = '8647'
>>> print(ch + 45)
TypeError: Can't convert 'int' object to str implicitly
>>> n = int(ch)
>>> print(n + 65)
8712

Neste exemplo, a função interna int() converte a string em um inteiro. Também seria possível converter uma string em um número real, usando a função float().

Listas

Em Python, você pode definir uma lista como uma coleção de itens separados por vírgulas, com o conjunto entre colchetes. exemplo:

>>> dia = ['Segunda', 'Terça', 'Quarta', 1800, 20.357, 'Quinta', 'Sexta']
>>> print(dia)
['Segunda', 'Terça', 'Quarta', 1800, 20.357, 'Quinta', 'Sexta']

Neste exemplo, o valor da variável dia é uma lista.

Como pode ser visto no mesmo exemplo, os elementos individuais que compõem uma lista podem ser de vários tipos. Neste exemplo, os três primeiros elementos são strings de caracteres, o quarto elemento é um inteiro, o quinto é real e assim por diante (Um elemento de uma lista pode ser uma lista!). A esse respeito, o conceito de lista é, portanto, bem diferente do conceito de “matriz” ou “vetor” que encontramos em outras linguagens de programação. Note também que, como as strings, as listas são seqüências, isto é, coleções ordenadas de objetos. Os vários elementos que constituem uma lista são, de fato, sempre organizados na mesma ordem e, portanto, podemos acessar cada um deles individualmente, se soubermos seu índice na lista. Deve-se lembrar que a numeração desses índices começa do zero. Exemplos:

>>> dia = ['Segunda', 'Terça', 'Quarta', 1800, 20.357, 'Quinta', 'Sexta']
>>> print(dia[2])
Quarta
>>> print(dia[3])
1800

Ao contrário do que acontece para strings, é possível alterar os elementos individuais de uma lista:

>>> dia = ['Segunda', 'Terça', 'Quarta', 1800, 20.357, 'Quinta', 'Sexta']
>>> dia[3]=dia[3]+33
>>> print(dia)
['Segunda', 'Terça', 'Quarta', 1833, 20.357, 'Quinta', 'Sexta']

Podemos, portanto, substituir alguns elementos de uma lista por outros, como abaixo:

>>> dia[3] = 'Julho'
>>> print(dia)
['Segunda', 'Terça', 'Quarta', 'Julho', 20.357, 'Quinta', 'Sexta']

A função integrada len() retorna o número de elementos presentes na lista:

>>> print(len(dia))
7

Outra função embutida torna possível excluir de qualquer lista qualquer elemento (de seu índice). Esta é a função del():

>>> del(dia[4])
>>> print(dia)
['Segunda', 'Terça', 'Quarta', 'Julho', 'Quinta', 'Sexta']

Também é possível adicionar um elemento à uma lista. Para fazer isso devemos considerar que a lista é um objeto - usaremos um dos seus métodos:

>>> dia.append('Sábado')
>>> print(dia)
['Segunda', 'Terça', 'Quarta', 'Julho', 'Quinta', 'Sexta', 'Sábado']