Aula 02: Variáveis, expressões e comandos

Tópicos

Python Shell

Neste tutorial, iremos ensinar a programação em Python 3. Estaremos usando o IDLE 3, mas o Anaconda com Python 3 no Windows é similar.

O vídeo abaixo mostra como fazer a instalação do python e IDLE no Windows.

O vídeo abaixo mostra como fazer a instalação do python e IDLE no Linux (ubuntu) via linha de comando no terminal, usando apt-get.

O IDLE 3 pode também ser instalado no Ubuntu procurando por IDLE3 no Synaptic Package Manager do Ubuntu, tal como mostrado abaixo.

IDLE3_install

Após instalar o IDLE3, você pode então abrir o Python Shell, clicando no ícone indicado abaixo.

IDLE3_icone

Ao abrir o Python Shell, será exibida uma janela com o cursor piscando em frente ao prompt >>>, indicando que o sistema está pronto para receber comandos. Um comando é uma unidade de código que o interpretador do Python pode executar. Neste curso, estamos usando a versão 3 do Python.

Por exemplo, podemos usar o Python Shell para fazer contas, tal como em uma calculadora. Veja o exemplo abaixo digitado no prompt (>>>) do Python shell:

>>> 2 + 3 * 6
20
>>> (2+3)*6
30

Observe que a multiplicação (representada pelo símbolo *) tem precedência sobre a adição. Logo, o uso de parênteses se faz necessário quando queremos primeiramente calcular a soma.

A tabela abaixo apresenta a lista de operadores aritméticos do Python.

Operadores aritméticos:
OperadorDescriçãoExemploAvalia para
+Adição7 + 310
-Subtração7 - 34
*Multiplicação7 * 321
/Divisão (Real)7 / 32.3333333333333335
//Divisão (Inteiro)7 // 32
%Módulo (resto da divisão)7 % 31

Veja o vídeo abaixo, intitulado "Primeiras linhas em Python", do prof. Fabio Kon (IME-USP).
Porém, tome cuidado, pois nesse vídeo está sendo usada a versão 2 do Python e não o Python 3, o que gera uma diferença na saída do operador de divisão.

Variáveis e comando de Atribuição

Podemos guardar resultados para uso posterior em variáveis. Veja o vídeo abaixo, intitulado "Variáveis e scripts (programas) em Python", do prof. Fabio Kon (IME-USP).

Uma variável é um nome que se refere a um valor armazenado na memória do computador. Um comando de atribuição (=) cria uma nova variável e lhe dá um valor.

Um comando de atribuição tem a seguinte forma:

variável = expressão
Significado:
  1. o valor da expressão é calculado;
  2. a variável é criada;
  3. a variável passa a fazer referência/guardar o valor

Variáveis são usadas para guardarmos valores que serão usados mais tarde no programa. Por exemplo, variáveis podem ser usadas como parte de futuras expressões matemáticas, indicando que seus valores serão usados como operandos dos operadores. Note, porém, que uma variável não pode ser usada em uma expressão antes de sua criação.
A qualquer momento podemos imprimir/exibir o valor de uma variável usando o comando print, tal como indicado no exemplo abaixo:

>>> a = 2 + 3 * 6
>>> print(a)
20
>>> b = a - 5
>>> print(b)
15

Nomes de variáveis devem obedecer à seguinte regra de formação. Os nomes das variáveis devem começar por uma letra ou o símbolo '_' (underscore) e depois conter somente letras, números ou underscore. Atenção, maiúscula é diferente de minúscula. Assim maior e Maior são duas variáveis diferentes. Abaixo são apresentados alguns exemplos de nomes de variáveis válidos digitados no prompt (>>>) do Python shell.

>>> valor_bruto = 1000
>>> _valor = 75
>>> bola8 = 50
>>> DocumentoDeIdentidade = 123456789

Abaixo é apresentado um exemplo de nome de variável inválido (por iniciar com um número) digitado no prompt (>>>) do Python shell. Observe a mensagem de erro indicando que o comando não pôde ser processado pelo interpretador.

>>> 8bola = 50
SyntaxError: invalid syntax

Atenção:

O comando de atribuição do Python não deve ser confundido com o conceito de igualdade de equações matemáticas. Por exemplo, o comando a = a + b do Python não implica que b = 0. Isto é, o comando em questão não é uma equação matemática, logo você não deve subtrair 'a' dos dois lados para tirar conclusões.

O valor contido no espaço de memória de uma variável pode variar com o tempo, não sendo um valor fixo durante todo tempo de execução de um programa.
Desse modo, comandos como a=a-4 são perfeitamente aceitáveis. No exemplo abaixo, a variável a recebe inicialmente o valor 14. Na sequência, o comando a=a-4 é executado, sendo sua expressão do lado direito a-4 então avaliada como 14-4 e, consequentemente, resultando em 10. Esse novo valor 10 passa então a ser armazenado na variável a, sobrescrevendo seu valor anterior 14 que é perdido.

>>> a = 14
>>> print(a)
14
>>> a = a - 4
>>> print(a)
10

Podemos imprimir os valores de múltiplas variáveis em um único comando print, passando as variáveis separadas por vírgulas.

>>> a = 3
>>> b = 2
>>> print(a, b)
3 2

Um problema recorrente em computação é o de trocar/inverter o valor entre duas variáveis. Isso será especialmente útil para a ordenação de dados em aulas futuras.
Por exemplo, se a = 3 e b = 2 para trocar seu valores poderíamos pensar em usar o seguinte código:

>>> a = b
>>> b = a
>>> print(a, b)
2 2

No entanto, o código acima não funciona, pois o primeiro comando de atribuição sobrescreverá o valor 3 armazenado na variável a que será perdido. De modo que, no final teremos o valor 2 nas duas variáveis a e b. Uma solução correta pode ser encontrada no código abaixo. A ideia é utilizar uma terceira variável auxiliar para guardar uma cópia de backup do valor original 3 da variável a, antes de copiar em a o valor 2 contido em b.

>>> t = a
>>> a = b
>>> b = t
>>> print(a, b)
2 3

O Python possui vários atalhos, logo para trocar o valor entre variáveis podemos usar também o seguinte código abaixo. Porém, note que, a solução abaixo é específica para códigos em Python.

>>> a,b = b,a
>>> print(a, b)
2 3

Em Python, podemos usar variáveis também para armazenar e processar textos. Na programação de computadores, uma cadeia de caracteres, mais conhecida como string, é uma sequência de letras e símbolos (na qual os símbolos podem ser espaços em branco, dígitos e vários outros como pontos de exclamação e interrogação, símbolos matemáticos, etc), geralmente utilizada para representar palavras, frases ou textos de um programa. Em um programa Python, strings podem ser especificadas como textos delimitados por aspas duplas ou simples. Somando duas strings obtemos uma nova string resultante da concatenação das duas primeiras. Veja o exemplo abaixo digitado no prompt (>>>) do Python shell:

>>> a = "Paulo"
>>> b = "Miranda"
>>> c = a + b
>>> print(c)
PauloMiranda

Dado que é possível somar duas strings, poderíamos pensar que é possível também somar uma string com um número inteiro, mas esta não é uma operação definida no Python. Como resultado temos a mensagem de erro indicada no exemplo abaixo.

>>> "Paulo" + 5
Traceback (most recent call last):
File "", line 1, in
"Paulo" + 5
TypeError: Can't convert 'int' object to str implicitly

Por outro lado, curiosamente, podemos multiplicar uma string por um inteiro em Python. O resultado é a criação de uma nova string contendo o texto repetido o número de vezes indicado.

>>> "Bla"*10
'BlaBlaBlaBlaBlaBlaBlaBlaBlaBla'

Dado que em Python podemos ter diferentes tipos de dados armazenados em uma variável, como descobrir o tipo de dado armazenado em uma variável preexistente se torna uma pergunta pertinente. Para saber o tipo de dado armazenado em uma variável podemos usar o comando type:

>>> a = 37
>>> type(a)
<class 'int'>
>>> a = "Paulo"
>>> type(a)
<class 'str'>

Textos são representados por objetos da classe str (string), enquanto inteiros são representados por objetos da classe int .

Para mais informações e exemplos sobre os tipos de dados em Python, veja o vídeo abaixo, intitulado "Valores e tipos em Python", do prof. Fabio Kon (IME-USP).

Dado que nos exemplos acima estamos usando as aspas duplas como delimitadores de string, uma pergunta oportuna é, portanto, a seguinte: como podemos inserir o caractere de aspas dupla (") como parte do texto de uma string? Uma resposta é considerar aspas simples como delimitadores sempre que queremos inserir aspas duplas dentro do texto e vice-versa.
Veja os exemplos abaixo digitados no prompt (>>>) do Python shell:

>>> a = 'Camões escreveu "Os Lusíadas" no século XVI.'
>>> print(a)
Camões escreveu "Os Lusíadas" no século XVI.
>>> b = "Esperamos o 'feedback' da professora."
>>> print(b)
Esperamos o 'feedback' da professora.

Outra solução é considerar sequências de escape.

Os caracteres ou sequências de escape são usadas para conseguir imprimir na tela caracteres especiais ou símbolos, que são impossíveis de obter normalmente. Exemplos comuns são as aspas simples ou duplas, que por já estarem sendo usadas como delimitadores da string geram as dificuldades vistas anteriormente para serem inseridas como partes integrantes do conteúdo da string. Outros exemplos são os de caracteres que não possuem um símbolo gráfico correspondente, tais como o caracter de pula linha e o de tabulação.

Esses caracteres especiais são especificados por meio de combinações de outros caracteres, denominadas sequências de escape, que sempre iniciam com uma barra invertida (\). O próprio caractere de barra invertida se torna um caractere especial por ser reservado para indicar o início de uma nova sequência de escape.
A tabela abaixo apresenta os caracteres de escape do Python:

Caracteres de escape no Python:
Sequência de escapeDescrição
\\Barra invertida (Backslash). Insere uma barra invertida.
\'Aspas simples (Single quote). Insere uma aspas simples.
\"Aspas duplas (Double quote). Insere uma aspas duplas.
\nNova linha (NewLine). Move o cursor para o início da próxima linha.
\tTabulação horizontal (Horizontal tab). Move o cursor uma tabulação para frente.

Experimente digitar no prompt (>>>) do Python shell os comandos abaixo:

>>> a = "Camões escreveu \"Os Lusíadas\" no século XVI."
>>> print(a)
Camões escreveu "Os Lusíadas" no século XVI.
>>> b = "Primeira linha.\nSegunda linha."
>>> print(b)
Primeira linha.
Segunda linha.
>>> c = "\tCom tabulação.\nSem tabulação."
>>> print(c)
       Com tabulação.
Sem tabulação.
>>> d = "Barra invertida: \\"
>>> print(d)
Barra invertida: \
>>> e = "\\\\\\"   #Imprime três barras invertidas.
>>> print(e)
\\\

O texto em vermelho (#Imprime três barras invertidas.) usado no exemplo acima é um comentário, tal como explicado abaixo.

Comentários

Em todas as linguagens de programação, comumente, temos a necessidade de documentar uma linha ou um bloco de código para melhor descrevê-lo e indicar para que ele serve. Comentários permitem que o programador adicione texto ao programa para facilitar seu entendimento por parte de outros programadores, ou até dele mesmo em um momento futuro. Em Python comentários são iniciados com #, tudo que estiver depois do # e na mesma linha será ignorado pelo interpretador.

Primeiro programa no modo script

Até agora executamos o Python no modo interativo, no qual você interage diretamente com o interpretador. O modo interativo é útil para fazer algumas contas ou testar o efeito de alguns comandos isolados, mas no caso de programas reais, compostos por mais do que algumas linhas de código, precisamos do modo script.

A alternativa consiste em salvar o código em um arquivo (script) e então invocar o interpretador para executá-lo. Por convenção, os scripts no Python são arquivos texto com nomes que terminam com a extensão .py. Vamos fazer nosso primeiro programa em Python no modo script. Na janela do Python Shell, você deve clicar em "File" e depois em "New File". Vai ser aberto um editor de texto, conforme ilustrado abaixo.

primeiro_programa

Digite então o exemplo do código abaixo e salve o arquivo, por exemplo, como "programa.py".

idade = input("Digite sua idade: ")
print("Nossa, parece que você tem", idade*2, "anos.")
O programa acima solicita que o usuário digite sua idade. Na sequência, a intenção do programa é imprimir uma mensagem "trollando" o usuário, dizendo que ele aparenta ter o dobro da idade. Para a leitura dos dados, vamos introduzir um novo comando, o comando input(). O comando input(), primeiramente imprime a string passada como parâmetro "Digite sua idade: " e, em seguida, ativa o modo de digitação, isto é, o cursor vai ficar piscando no Python Shell/terminal esperando a digitação (entrada de dados), seguida de ENTER. Para invocar o interpretador Python para executar o programa acima criado no modo script, você deve clicar em "Run" e depois em "Run Module".

primeiro_programa

Abaixo é mostrado um exemplo de execução do programa, assumindo que o usuário possui 39 anos de idade. Ou seja, o texto em preto foi digitado pelo usuário.

Digite sua idade: 39
Nossa, parece que você tem 3939 anos.

Aparentemente algo deu errado, visto que o programa imprimiu que o usuário aparenta ter três mil e novecentos e trinta e nove anos. Ou seja, mais que a idade ao morrer de Matusalém.

O problema ocorreu porque a devolução do valor digitado pelo comando input() sempre se dá na forma de uma string e, como vimos anteriormente, a multiplicação de uma string por um inteiro causa a sua repetição (isto é, "39"*2 gera a string "3939").

Portanto, precisamos converter a string lida para um inteiro antes de calcular o produto. Para isso, podemos usar o comando int() que converte a string passada como parâmetro para o inteiro correspondente, tal como indicado no exemplo abaixo digitado no prompt (>>>) do Python shell:

>>> a = "39"
>>> type(a)
<class 'str'>
>>> a = int(a)
>>> type(a)
<class 'int'>
>>> print(a)
39

Uma versão corrigida do programa é apresentada abaixo.

idade = input("Digite sua idade: ")
idade = int(idade)
print("Nossa, parece que você tem", idade*2, "anos.")

A execução da nova versão do programa com valor de entrada 39, agora apresenta o resultado esperado:

Digite sua idade: 39
Nossa, parece que você tem 78 anos.

Esse programa pode ser escrito de modo mais compacto usando os comandos int() e input() de modo aninhado, isto é, como int(input()).

idade = int(input("Digite sua idade: "))
print("Nossa, parece que você tem", idade*2, "anos.")

Para outros exemplos de programas com o comando input(), veja também o vídeo abaixo, intitulado "Entrada de dados", do prof. Fabio Kon (IME-USP).

Operadores relacionais (operações de comparação)

No Python, é possível também comparar valores utilizando operadores relacionais.
Operadores relacionais serão especialmente úteis na construção de comandos condicionais e comandos de repetição.

Operadores relacionais executam ações com dois operandos, produzindo como resultado verdadeiro ou falso (True ou False).
A tabela abaixo apresenta a relação dos operadores relacionais do Python.

Operadores relacionais:
OperadorDescriçãoExemploAvalia para
==igual a5 == 5True
!=diferente de8 != 5True
>Maior que3 > 10False
<Menor que5 < 8True
>=Maior ou igual a5 >= 10False
<=Menor ou igual a5 <= 5True

Por exemplo, experimente digitar no prompt (>>>) do Python shell os comandos abaixo:

>>> 8 > 5
True
>>> 3 < 2
False
>>> x = 7
>>> x < 9
True
>>> x == 7
True
>>> x != 7
False

O resultado de operadores relacionais podem ser atribuídos a variáveis e podemos usar o comando type para descobrir o tipo de dado resultante.

>>> a = 2 < 8
>>> type(a)
<class 'bool'>
>>> print(a)
True

Os valores True e False devolvidos por operadores relacionais são da classe bool (boolean em homenagem ao matemático George Boole).

Dado que o operador de adição pode também ser empregado com strings, conforme visto anteriormente, será que operadores relacionais também se aplicam a strings?
Abaixo são apresentados alguns testes realizados no prompt (>>>) do Python shell:

>>> "Corinthians" == "Campeão"
False
>>> "São Paulo" > "Corinthians"
True

Deixando de lado a brincadeira com os corintianos, observamos que, de fato, os operadores relacionais podem ser usados com strings.
O operador de igualdade (==) somente devolverá o valor True se as duas strings forem idênticas.
Lembre-se que Python diferencia minúsculas de maiúsculas. Portanto, a comparação "paulo" == "PAULO" devolverá False.
Comparações do tipo "maior que" e "menor que" comparam as strings levando em conta a ordem lexicográfica (ordem alfabética no caso da comparação entre letras minúsculas com minúsculas e maiúsculas com maiúsculas). Portanto, "São Paulo" > "Corinthians" é True não porque o primeiro time possui mais títulos, mas porque "S" sucede "C" na ordem do alfabeto.

A seguir, veremos nosso primeiro comando de repetição. Dentro da lógica de programação, comandos de repetição (Laços ou Loops) são estruturas que nos permitem executar mais de uma vez o mesmo comando ou conjunto de comandos, de acordo com uma condição de controle.

python_loop

Laço "while"

O comando de repetição while ("enquanto") é a mais difundida estrutura de repetição.
Nesta estrutura, a condição é primeiramente verificada, e se for verdadeira o bloco é executado. No final da execução do bloco a condição é novamente testada.

Entende-se por condição qualquer comando Python que produza como saída verdadeiro (True) ou falso (False). Até o presente momento, os únicos comandos vistos com tal propriedade foram os operadores relacionais.

O fluxograma de execução do comando while é exibido abaixo:

while

Exemplo 1:

Dado um número inteiro n, com n > 0, calcular a soma dos n primeiros números inteiros positivos (isto é, 1 + 2 + 3 + ... + n).

Uma primeira solução usando o comando while é apresentada abaixo.

soma = 0
i = 1
while i <= n:
    soma = soma + i
    i = i + 1
print("A soma de 1 a",n,"é",soma)
  

A solução anterior é uma solução ingênua. Observe que a soma 1 + 2 + 3 + ... + n corresponde a soma dos termos de uma PA de razão 1. Logo, uma solução mais eficiente consiste em aplicar diretamente a fórmula da soma dos termos da PA.

n = int(input("Digite n: "))
soma = ((1+n)*n)//2
print("A soma de 1 a",n,"é",soma)
  

Problema 1:

Dada uma sequência de números inteiros diferentes de zero, terminada por um zero, calcular a sua soma. Por exemplo, para a sequência
    12    17   4    -6    8   0
o seu programa deve escrever o número 35.

Uma primeira solução é apresentada abaixo.

  num = 1
  soma = 0
  while num != 0:
      num = int(input("Digite um inteiro: "))
      soma = soma + num

  print("A soma é",soma)
  
Outra versão:
  num = int(input("Digite um inteiro: "))
  soma = 0
  while num != 0:
      soma = soma + num
      num = int(input("Digite um inteiro: "))

  print("A soma é",soma)
  

Problema 2:

Dados números inteiros n e k, com k>=0, determinar nk. Por exemplo, dados os números 3 e 4 o seu programa deve escrever o número 81.

Uma primeira solução usando o comando while é apresentada abaixo.

  n = int(input("Digite o valor de n: "))
  k = int(input("Digite o valor de k: "))
  pot = 1
  i = 0
  while i < k:
      pot = pot*n
      i = i + 1
  print("A potência é",pot)
  

No Python, podemos também usar o operador de exponenciação **:

  n = int(input("Digite o valor de n: "))
  k = int(input("Digite o valor de k: "))
  pot = n**k
  print("A potência é",pot)
  

Problema 3:

Dado um número inteiro n >= 0, calcular n!
n! = n*(n-1)*(n-2)*...*1
Uma primeira solução usando o comando while é apresentada abaixo.
  n = int(input("Digite o valor de n: "))
  fat = 1

  i = 2
  while i <= n:
      fat = fat*i
      i = i + 1
  print("Fatorial de",n,"é",fat)
  

No Python, podemos também usar funções matemáticas prontas do módulo math do Python. Para isso, devemos primeiramente importar o módulo math, usando o comando import math, e depois chamar a função math.factorial().

  import math  
  n = int(input("Digite o valor de n: "))
  fat = math.factorial(n)
  print("Fatorial de",n,"é",fat)