Um Primeiro Programa

Intermediate

This tutorial is from open-source community. Access the source code

Introdução

Esta seção discute a criação do seu primeiro programa, a execução do interpretador e algumas noções básicas de depuração (debugging).

Este é um Lab Guiado, que fornece instruções passo a passo para ajudá-lo a aprender e praticar. Siga as instruções cuidadosamente para completar cada etapa e ganhar experiência prática. Dados históricos mostram que este é um laboratório de nível intermediário com uma taxa de conclusão de 58%. Recebeu uma taxa de avaliações positivas de 93% dos estudantes.

Executando Python

Programas Python sempre são executados dentro de um interpretador.

O interpretador é uma aplicação "baseada em console" que normalmente é executada a partir de um shell de comando.

python3
Python 3.6.1 (v3.6.1:69c0db5050, Mar 21 2017, 01:21:04)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>

Programadores experientes geralmente não têm problemas em usar o interpretador dessa maneira, mas não é tão amigável para iniciantes. Você pode estar usando um ambiente que fornece uma interface diferente para Python. Tudo bem, mas aprender a executar o terminal Python ainda é uma habilidade útil de se conhecer.

Modo Interativo

Quando você inicia o Python, você obtém um modo interativo onde pode experimentar.

Se você começar a digitar instruções, elas serão executadas imediatamente. Não há ciclo de edição/compilação/execução/depuração (edit/compile/run/debug).

>>> print('hello world')
hello world
>>> 37*42
1554
>>> for i in range(5):
...     print(i)
...
0
1
2
3
4
>>>

Este chamado read-eval-print-loop (ou REPL) é muito útil para depuração e exploração.

PARE: Se você não conseguir descobrir como interagir com o Python, pare o que está fazendo e descubra como fazê-lo. Se você estiver usando uma IDE, ela pode estar escondida atrás de uma opção de menu ou outra janela. Muitas partes deste curso assumem que você pode interagir com o interpretador.

Vamos dar uma olhada mais de perto nos elementos do REPL:

  • >>> é o prompt do interpretador para iniciar uma nova instrução.
  • ... é o prompt do interpretador para continuar uma instrução. Insira uma linha em branco para terminar a digitação e executar o que você digitou.

O prompt ... pode ou não ser exibido, dependendo do seu ambiente. Para este curso, ele é mostrado como espaços em branco para facilitar o corte/colagem de exemplos de código.

O sublinhado _ armazena o último resultado.

>>> 37 * 42
1554
>>> _ * 2
3108
>>> _ + 50
3158
>>>

Isso só é verdade no modo interativo. Você nunca usa _ em um programa.

Criando programas

Programas são colocados em arquivos .py.

## hello.py
print('hello world')

Você pode criar um arquivo hello.py no diretório /home/labex/project usando seu editor de texto favorito.

Executando Programas

Para executar um programa, execute-o no terminal com o comando python. Por exemplo, na linha de comando Unix:

$ python hello.py
hello world
bash %

Ou no shell do Windows:

C:\SomeFolder>hello.py
hello world

C:\SomeFolder>c:\python36\python hello.py
hello world

Observação: No Windows, pode ser necessário especificar um caminho completo para o interpretador Python, como c:\python36\python. No entanto, se o Python estiver instalado da maneira usual, você poderá simplesmente digitar o nome do programa, como hello.py.

Um Programa de Exemplo

Vamos resolver o seguinte problema:

Em uma manhã, você sai e coloca uma nota de dólar na calçada perto da Sears Tower em Chicago. A cada dia subsequente, você sai e dobra o número de notas. Quanto tempo leva para a pilha de notas exceder a altura da torre?

Aqui está uma solução para criar um arquivo sears.py no diretório /home/labex/project:

## sears.py
bill_thickness = 0.11 * 0.001 ## Meters (0.11 mm)
sears_height = 442 ## Height (meters)
num_bills = 1
day = 1

while num_bills * bill_thickness < sears_height:
    print(day, num_bills, num_bills * bill_thickness)
    day = day + 1
    num_bills = num_bills * 2

print('Number of days', day)
print('Number of bills', num_bills)
print('Final height', num_bills * bill_thickness)

Quando você o executa, você obtém a seguinte saída:

$ python3 sears.py
1 1 0.00011
2 2 0.00022
3 4 0.00044
4 8 0.00088
5 16 0.00176
6 32 0.00352
...
21 1048576 115.34336
22 2097152 230.68672
Number of days 23
Number of bills 4194304
Final height 461.37344

Usando este programa como guia, você pode aprender vários conceitos centrais importantes sobre Python.

Declarações (Statements)

Um programa Python é uma sequência de declarações (statements):

a = 3 + 4
b = a * 2
print(b)

Cada declaração é terminada por uma nova linha. As declarações são executadas uma após a outra até que o controle atinja o final do arquivo.

Comentários (Comments)

Comentários são textos que não serão executados.

a = 3 + 4
## This is a comment
b = a * 2
print(b)

Comentários são denotados por # e se estendem até o final da linha.

Variáveis (Variables)

Uma variável é um nome para um valor. Você pode usar letras (minúsculas e maiúsculas) de a a z, bem como o caractere underscore _. Números também podem fazer parte do nome de uma variável, exceto como o primeiro caractere.

height = 442 ## valid
_height = 442 ## valid
height2 = 442 ## valid
2height = 442 ## invalid

Tipos (Types)

Variáveis não precisam ser declaradas com o tipo do valor. O tipo está associado ao valor no lado direito, não ao nome da variável.

height = 442           ## An integer
height = 442.0         ## Floating point
height = 'Really tall' ## A string

Python é tipado dinamicamente. O "tipo" percebido de uma variável pode mudar à medida que um programa é executado, dependendo do valor atual atribuído a ela.

Sensibilidade a Case (Case Sensitivity)

Python é sensível a case. Letras maiúsculas e minúsculas são consideradas letras diferentes. Estas são todas variáveis diferentes:

name = 'Jake'
Name = 'Elwood'
NAME = 'Guido'

As instruções da linguagem são sempre em letras minúsculas.

while x < 0:   ## OK
WHILE x < 0:   ## ERROR

Laços (Looping)

A instrução while executa um laço (loop).

while num_bills * bill_thickness < sears_height:
    print(day, num_bills, num_bills * bill_thickness)
    day = day + 1
    num_bills = num_bills * 2

print('Number of days', day)

As instruções indentadas abaixo do while serão executadas enquanto a expressão após o while for true.

Indentação (Indentation)

A indentação é usada para denotar grupos de instruções que pertencem juntas. Considere o exemplo anterior:

while num_bills * bill_thickness < sears_height:
    print(day, num_bills, num_bills * bill_thickness)
    day = day + 1
    num_bills = num_bills * 2

print('Number of days', day)

A indentação agrupa as seguintes instruções como as operações que se repetem:

    print(day, num_bills, num_bills * bill_thickness)
    day = day + 1
    num_bills = num_bills * 2

Como a instrução print() no final não está indentada, ela não pertence ao laço (loop). A linha em branco é apenas para legibilidade. Ela não afeta a execução.

Melhores práticas de indentação (Indentation best practices)

  • Use espaços em vez de tabs.
  • Use 4 espaços por nível.
  • Use um editor que reconheça Python.

O único requisito do Python é que a indentação dentro do mesmo bloco seja consistente. Por exemplo, isto é um erro:

while num_bills * bill_thickness < sears_height:
    print(day, num_bills, num_bills * bill_thickness)
        day = day + 1 ## ERROR
    num_bills = num_bills * 2

Condicionais (Conditionals)

A instrução if é usada para executar uma condição:

if a > b:
    print('Computer says no')
else:
    print('Computer says yes')

Você pode verificar múltiplas condições adicionando verificações extras usando elif.

if a > b:
    print('Computer says no')
elif a == b:
    print('Computer says yes')
else:
    print('Computer says maybe')

Imprimindo (Printing)

A função print produz uma única linha de texto com os valores passados.

print('Hello world!') ## Prints the text 'Hello world!'

Você pode usar variáveis. O texto impresso será o valor da variável, não o nome.

x = 100
print(x) ## Prints the text '100'

Se você passar mais de um valor para print, eles são separados por espaços.

name = 'Jake'
print('My name is', name) ## Print the text 'My name is Jake'

print() sempre coloca uma nova linha no final.

print('Hello')
print('My name is', 'Jake')

Isso imprime:

Hello
My name is Jake

A nova linha extra pode ser suprimida:

print('Hello', end=' ')
print('My name is', 'Jake')

Este código agora imprimirá:

Hello My name is Jake

Entrada do Usuário (User input)

Para ler uma linha de entrada digitada pelo usuário, use a função input():

name = input('Enter your name:')
print('Your name is', name)

input imprime um prompt para o usuário e retorna sua resposta. Isso é útil para pequenos programas, exercícios de aprendizado ou depuração simples. Não é amplamente usado para programas reais.

Declaração pass (pass statement)

Às vezes, você precisa especificar um bloco de código vazio. A palavra-chave pass é usada para isso.

if a > b:
    pass
else:
    print('Computer says false')

Isso também é chamado de declaração "no-op" (operação nula). Ela não faz nada. Serve como um espaço reservado para declarações, possivelmente a serem adicionadas posteriormente.

Este é o primeiro conjunto de exercícios onde você precisa criar arquivos Python e executá-los. A partir deste ponto, presume-se que você está editando arquivos no diretório ~/project/. Para ajudá-lo a localizar o local apropriado, um número de arquivos iniciais vazios foram criados com os nomes de arquivo apropriados. Procure o arquivo bounce.py que é usado no primeiro exercício.

Exercício 1.5: A Bola que Quica (The Bouncing Ball)

Uma bola de borracha é solta de uma altura de 100 metros e, cada vez que atinge o chão, ela quica de volta para 3/5 da altura da qual caiu. Escreva um programa bounce.py que imprima uma tabela mostrando a altura dos primeiros 10 quiques.

Aqui está uma solução:

## bounce.py

height = 100
bounce = 1
while bounce <= 10:
    height = height * (3 / 5)
    print(bounce, round(height, 4))
    bounce += 1

Seu programa deve criar uma tabela que se pareça com isto:

1 60.0
2 36.0
3 21.599999999999998
4 12.959999999999999
5 7.775999999999999
6 4.6655999999999995
7 2.7993599999999996
8 1.6796159999999998
9 1.0077695999999998
10 0.6046617599999998

Nota: Você pode limpar um pouco a saída se usar a função round(). Tente usá-la para arredondar a saída para 4 dígitos.

1 60.0
2 36.0
3 21.6
4 12.96
5 7.776
6 4.6656
7 2.7994
8 1.6796
9 1.0078
10 0.6047

Exercício 1.6: Depuração (Debugging)

O seguinte fragmento de código contém código do problema da Torre Sears. Ele também contém um erro.

## sears.py

bill_thickness = 0.11 * 0.001    ## Meters (0.11 mm)
sears_height   = 442             ## Height (meters)
num_bills      = 1
day            = 1

while num_bills * bill_thickness < sears_height:
    print(day, num_bills, num_bills * bill_thickness)
    day = days + 1
    num_bills = num_bills * 2

print('Number of days', day)
print('Number of bills', num_bills)
print('Final height', num_bills * bill_thickness)

Copie e cole o código que aparece acima em um novo programa chamado sears.py. Quando você executar o código, receberá uma mensagem de erro que fará com que o programa trave, assim:

Traceback (most recent call last):
  File "sears.py", line 10, in <module>
    day = days + 1
NameError: name 'days' is not defined

Ler mensagens de erro é uma parte importante do código Python. Se seu programa travar, a última linha da mensagem de traceback é a razão real pela qual o programa travou. Acima disso, você deve ver um fragmento do código-fonte e, em seguida, um nome de arquivo e número de linha identificadores.

  • Qual linha contém o erro?
  • Qual é o erro?
  • Corrija o erro
  • Execute o programa com sucesso

Resumo

Parabéns! Você concluiu o laboratório "A First Program". Você pode praticar mais laboratórios no LabEx para aprimorar suas habilidades.