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.

Calculando com Python

O Python tem a particularidade de poder ser usado de várias maneiras diferentes. Primeiro você vai usá-lo no modo interativo, ou seja, para interagir com ele diretamente do teclado. Isso permitirá que você descubra rapidamente um grande número de recursos da linguagem. Em uma segunda etapa, você verá como criar seus primeiros programas (scripts) e salvá-los no disco.

O interpretador pode ser iniciado diretamente a partir da linha de comando (em um “shell” do Linux ou em uma janela do DOS do Windows): basta digitar o comando python3, ou python (se a versão do Python instalada no computador for anterior à versão 3.0).

Por exemplo, você pode usar imediatamente o interpretador como uma simples calculadora de mesa. Então, teste os comandos abaixo

>>> 5+3

>>> 2  9          # os espaços são opcionais

>>> 7 + 3 * 4      # a hierarqua das operações matemáticas
                   # é respeitada?

>>> (7+3)*4

>>> 20 / 3         # aviso: divisão opera de forma diferente no Python 2

>>> 20 // 3

Dados, variáveis e memória

A maior parte da tarefa realizada por um programa de computador envolve a manipulação de dados. Esses dados podem ser muito diversos, mas na memória do computador eles sempre retornam a uma série finita de números binários.

Para acessar os dados, o programa de computador faz uso extensivo de um grande número de variáveis ​​de diferentes tipos, independentemente da linguagem em que está escrito.

Uma variável aparece em uma linguagem de programação identificada por um nome, mas para o computador é uma referência que aponta para um endereço de memória, isto é, uma localização precisa na memória RAM, local no qual é armazenado um valor bem definido. Esses são os dados reais, que são armazenados na forma de uma seqüência de números binários, mas que não é necessariamente um número aos olhos da linguagem de programação usada. Isso pode ser na verdade quase qualquer “objeto” que pode ser colocado na memória de um computador, por exemplo: um inteiro, um número real, um número complexo, um vetor, uma seqüência de caracteres tipográfico, uma tabela, uma função, etc.

Para distinguir entre estes vários conteúdos possíveis, a linguagem de programação faz uso de diferentes tipos de variáveis ​​(o tipo inteiro, o tipo real, o tipo de cadeia, o tipo de lista, etc.).

Nomes de variáveis e palavras reservadas

Em Python, os nomes de variáveis também devem obedecer a algumas regras simples:

Um nome de variável é uma sequência de letras (a → z, A → Z) e números (0 → 9), que devem sempre começar com uma letra. Apenas letras comuns são permitidas. Letras acentuadas, cedilhas, espaços, caracteres especiais como $, #, @, etc. são proibidos, exceto para o caractere _ (sublinhado/underline).

Crie o hábito de escrever a maioria dos nomes de variáveis em caracteres minúsculos (incluindo a primeira letra). Esta é uma convenção simples, mas é amplamente respeitada. Use letras maiúsculas dentro nome da variável, para possivelmente aumentar a legibilidade, como na tabelaDeMateriasPrimas.

Atribuição

Já sabemos como escolher um nome de variável com sabedoria. Agora vamos ver como podemos definir uma variável e atribuir um valor a ela. Atribuir um valor se refere à operação pela qual o nome da variável será vinculado ao seu valor (seu conteúdo). No Python, como em muitos outros idiomas, a operação de atribuição é representada pelo sinal igual:

>>> n = 7                     # define a variável n e atribui o valor 7
>>> msg = "O que há de novo?" # atribui o valor "O que há de novo?" à msg
>>> pi = 3.14159              # atribui seu valor à variável pi

Os exemplos acima ilustram instruções de atribuição padrão do Python. Depois de executados, os residem na memória do computador, em lugares diferentes:

  • três nomes de variáveis, a saber, ‘n’, ‘msg’ e ‘pi’;
  • três seqüências de bytes, onde estão codificados o inteiro 7, a cadeia de caracteres O que há de novo? e o número real 3,14159.

As três instruções de atribuição acima resultaram em várias operações na memória do computador:

  • criar e armazenar um nome de variável
  • atribuir um tipo específico (esse ponto será explicado na próxima página);
  • criar e memorizar um valor particular;
  • estabelecer uma ligação (por um sistema interno de ponteiros) entre o nome da variável e a localização da memória do valor correspondente.

Podemos representar melhor tudo isso por um diagrama de estado como este:

Variaveis na memória.

Os três nomes de variáveis são referências, armazenadas em uma área específica da chamada memória de namespace (espaço de nomes), enquanto os valores correspondentes estão localizados em outro lugar, em locais às vezes distantes um do outro.

Ler o valor de uma variável

Como resultado do exercício acima, temos, portanto, as três variáveis ‘n’, ‘msg’ e ‘pi’. Para exibir seu valor na tela, existem duas possibilidades. A primeira é inserir o nome da variável e, em seguida, . O Python responde exibindo o valor correspondente:

>>> n
7
>>> msg
'O que há de novo?'
>>> pi
3.14159

No entanto, este é um recurso secundário do intérprete, que se destina a tornar sua vida mais fácil quando você faz exercícios simples na linha de comando. Dentro de um programa, você sempre usará a função print () para imprimir dados no terminal:

>>> print(msg)
O que  de novo?
>>> print(n)
7

Observe a diferença sutil nas exibições obtidas com cada um dos dois métodos. A função print () exibe estritamente apenas o valor da variável, como foi codificado, enquanto o outro método (que de inserir o nome da variável na linha de comando) também exibe apóstrofes para lembrar que a variável é do tipo “string de caracteres”.

Tipos de variáveis

Em Python, você não precisa definir o tipo de variável antes de poder usá-la. Tudo o que você precisa fazer é atribuir um valor a um nome de variável para que ele seja criado automaticamente com o tipo que melhor corresponda ao valor fornecido. No exercício anterior, por exemplo, as variáveis ‘n’, ‘msg’ e ‘pi’ foram criadas automaticamente, cada uma com um tipo diferente (“integer” para ‘n’, “string de caracteres” para msg, “número de ponto flutuante” (ou “ float, em inglês) para pi).

Podemos dizer que a tipagem das variáveis em Python é uma do tipo dinâmica, ao contrário da tipagem estática, mais comum, como por exemplo, em C ++ ou Java. Nessas linguagens, é sempre necessário - por instruções separadas - primeiro declarar o nome e o tipo das variáveis e, então, apenas atribuir-lhes um conteúdo, que obviamente deve ser compatível com o tipo declarado.

Múltiplas atribuições

Em Python, você pode atribuir um valor a várias variáveis simultaneamente. exemplo:

>>> x = y = 7
>>> x
7
>>> y
7

Você também pode executar atribuições paralelas usando um único operador:

>>> a, b = 4, 8.33
>>> a
4
>>> b
8.33

Neste exemplo, as variáveis ‘a’ e ‘b’ assumem simultaneamente os novos valores 4 e 8.33.

Operadores e expressões

Valores e variáveis ​​que os referenciam são manipulados combinando-os com operadores para formar expressões. exemplo:

a, b = 7.3, 12
y = 3 * a + b / 5

Neste exemplo, começamos atribuindo às variáveis ​​’a’ e ‘b’ os valores 7.3 e 12. Como já explicamos acima, o Python atribui automaticamente o tipo “real” à variável ‘a’ e o tipo “integer” à variável ‘b’. A segunda linha do exemplo consiste em atribuir a uma nova variável ‘y’ o resultado de uma expressão que combina os operadores * , + e / com os operandos ‘a’, ‘b’, 3 e 5. Os operadores são os símbolos especiais usados ​​para representar operações matemáticas simples, como adição ou multiplicação. Operandos são os valores combinados usando os operadores.

O Python avalia cada expressão submetida a ele, por mais complicada que seja, e o resultado dessa avaliação é sempre um valor em si. Nesse valor, ele atribui automaticamente um tipo, que depende do que está na expressão. No exemplo acima, ‘y’ ​​será do tipo real, porque a expressão avaliada para determinar seu próprio valor contém pelo menos um real.

Operadores Python não são apenas os quatro operadores matemáticos básicos. Já apontamos a existência do operador de divisão inteira //. Devemos adicionar o operador ** para exponenciação, bem como um número de operadores lógicos, operadores agindo em cadeias, operadores realizando testes de identidade ou associação e assim por diante. Vamos falar sobre tudo isso nas próximas páginas. Observe a existência do operador de módulo, representado pelo caracter tipográfico %. Este operador fornece o resto da divisão inteira de um número por outro. Tente por exemplo:

>>> 10% 3
>>> 10% 5

Este operador é muito útil, especialmente para testar se um número é divisível por outro número ‘b’. É suficiente verificar se % ‘b’ resulta em zero.

Prioridade das operações

Quando há mais de um operador em uma expressão, a ordem em que as operações devem ser executadas depende das regras de precedência. Em Python, as regras de prioridade são as mesmas usuáis da matemática:

  • Parênteses têm maior prioridade. Eles permitem que você “force” a avaliação de uma expressão na ordem desejada.
    • Assim, ‘2 * (3-1) = 4’ e ‘(1 + 1) ** (5-2) = 8’.
  • exponenciação é avaliado antes de outras operações.
    • Assim, 2 ** 1 + 1 = 3 (e não 4) e 3 * 1 ** 10 = 3 (e não 59049!).
  • Multiplicação e divisão têm a mesma prioridade. Eles são avaliados antes da adição e da subtração, que são assim executadas por último.
    • Então ‘2 * 3-1 = 5’ (em vez de 4) e ‘2 / 3-1 = -0,3333’ … (em vez de 1,0).
  • Se dois operadores tiverem a mesma prioridade, o cálculo é feito da esquerda para a direita.

Assim, na expressão 59 * 100 // 60, a multiplicação é feita primeiro, e a máquina deve então executar 5900 // 60, o que dá 98. Se a divisão foi feita primeiro, o resultado seria 59 (lembre-se aqui que o // operador executa uma divisão inteira).

Composição

Um dos grandes pontos fortes de uma linguagem de programação de alto nível é que ela possibilita a construção de instruções complexas através da montagem de vários fragmentos. Por exemplo, se você souber como adicionar dois números e como exibir um valor, poderá combinar essas duas instruções em uma só:

>>> print (17 + 3)
>>> 20

Isso parece nada, mas esse recurso aparentemente óbvio permitirá que você programe algoritmos complexos de maneira clara e concisa. exemplo:

>>> h, m, s = 15, 27, 34
>>> print ("número de segundos decorridos desde a meia-noite =", h * 3600 + m * 60 + s)

Tenha cuidado, porém: há um limite para o que você pode combinar da seguinte maneira:

Em uma expressão, o que você coloca à esquerda do sinal de igual sempre deve ser uma variável, não uma expressão. Isto vem do fato de que o sinal de igual não tem o mesmo significado aqui como na matemática: como já apontamos, é um símbolo de atribuição (colocamos um certo conteúdo em uma variável) e não um símbolo de igualdade. O símbolo de igualdade (em um teste condicional, por exemplo) será discutido em outra ocasião.

Por exemplo, a instrução ‘m + 1 = b’ é completamente ilegal.

Por outro lado, escrever ‘a = a + 1’ é inaceitável em matemática, enquanto é muito freqüente na programação. A instrução ‘a = a + 1’ significa, neste caso, “aumenta o valor da variável a por um” (ou “incrementa a”).