Introdução a Python - Parte 1
Referências
- Site oficial Python
- Site com documentação sobre Python
- Tutorial sobre Python para iniciantes
- Um blog sobre Python (Hélio Loureiro)
- Python para Zumbis: um curso online gratuito
- BeautifulSoup: uma API para extrair informações de documentos web
- Site oficial Pygame
- Invent with Python: um livro online gratuito sobre Python e Pygame
- The Python Game Book
Parte 1: Introdução à linguagem Python
Um primeiro exemplo
Qualquer tutorial de programação que se preze inicia com um exemplo do tipo Hello world !. Pois bem, em Python isso pode ser feito assim:
print('Hello world !')
Para executá-lo, há pelo menos duas maneiras:
- Usando o prompt do interpretador Python: isso é parecido com o uso do shell em um terminal.
- Em um terminal execute o interpretador Python:
$ python3 Python 3.4.3 (default, Sep 14 2016, 12:36:27) [GCC 4.8.4] on linux Type "help", "copyright", "credits" or "license" for more information. >>>
- No prompt do interpretador digite a instrução para mostrar o Hello world ! e em seguida tecle ENTER:
>>> print('Hello world !')
- Você deve ver na tela o resultado:
>>> print('Hello world !') Hello world ! >>>
- Em um terminal execute o interpretador Python:
- Criando um arquivo de script: um script é um programa executado por meio de um interpretador. Se a instrução para o Hello world ! for gravada em um arquivo da maneira mostrada a seguir, esse arquivo pode ser considerado um programa Python. Sendo assim:
- Crie o arquivo hello.py com seu editor favorito, e nele grave este conteúdo:
#!/usr/bin/python3 print('Hello world !')
- Ative a permissão de execução do seu arquivo hello.py:
chmod +x hello.py
- Por fim, execute o programa hello.py:
$ ./hello.py Hello world ! $
- Crie o arquivo hello.py com seu editor favorito, e nele grave este conteúdo:
Um pouco de história
- Belo é melhor que feio
- Explícito é melhor que implícito
- Simples é melhor que complexo
- Complexo é melhor que complicado
- Plano é melhor que aninhado
- Esparso é melhor que denso
- Legibilidade é importante
- Casos especiais não são especiais o suficiente para quebrar as regras
- Embora praticidade vença pureza
- Erros nunca deveriam passar silenciosos
- A não ser que explicitamente silenciados
- Em face a ambiguidade, recuse a tentação de adivinhar
- Deveria existir uma, e preferencialmente somente uma, maneira óbvia de fazer
- Embora essa forma possa não ser óbvia de primeira, a não ser que você seja um holandês
- Agora é melhor que nunca
- Embora nunca é frequentemente melhor do que agora mesmo
- Se a implementação é difícil de explicar, é uma má ideia
- Se a implementação é fácil de explicar, pode ser uma boa ideia
- Namespaces são uma grande e sonora ideia -- vamos fazer mais desses !
Uma simples (?) aplicação
Existem muitas possíveis aplicações que podem ser criadas com Python. Portanto o critério para escolher uma aplicação como tema para guiar esta introdução à linguagem é um tanto arbitrária. Nem por isso o programa a ser apresentado deixa de ser interessante. Afinal, o principal ponto é demonstrar como se pode criar com facilidade uma aplicação que faz uma tarefa não tão simples.
Imagine que seja necessário ter um programa que extraia automaticamente imagens existentes em páginas web. Esse programa basicamente acessa uma URL, e no documento web lá existente ele procura por imagens e as transfere para o computador. Esse programa precisaria do seguinte:
- Uma forma de obter o conteúdo de uma página web, dada sua URL.
- Identificar todas as referências a imagens contidas nessa página.
- Transferir cada uma das imagens para o disco local.
A primeira versão dessa aplicação pode ser vista a seguir. Ela somente mostra os nomes dos links das imagens existentes em uma determinada página. A URL dessa página deve ser informada como argumento de linha de comando:
#!/usr/bin/python3
# Importa alguns modulos necessarios
# Modulo de sistema (um modulo basico)
import sys
# Este modulo fornece um interpretador de conteúdo HTML
from bs4 import BeautifulSoup
# Este modulo fornece um acessador de conteudo web (cliente HTTP)
from urllib import request
# define a variavel "url", cujo conteudo eh o primeiro argumento de linha de comando
# que deve conter uma URL
url = sys.argv[1]
# cria um acessador para acessar a URL
con = request.urlopen(url)
# Le todos os bytes do conteudo web identificado pela URL
dados = con.read()
# encerra a conexao do acessador
con.close()
# cria um analisador de conteudo HTML
parser = BeautifulSoup(dados, 'lxml')
# extrai uma lista de elementos HTML do tipo "img"
imagens = parser.find_all('img')
# itera a lista de elementos img
for img in imagens:
# mostra o nome da imagem
print(img['src'])
sys.exit(0)
Para executá-la, deve-se aplicar a técnica 2 (ver Primeiro exemplo):
- Copie o conteúdo do script Python para um arquivo chamado app1.py.
- Ative a permissão de execução desse arquivo
- Execute-o informando uma URL como argumento. Os caminhos das imagens serão mostrados em seguida (um por linha). Ex:
$ ./app1.py http://mcc.sj.ifsc.edu.br http://mcc.sj.ifsc.edu.br/files/2016/10/MCC_2016_TOPO-SITE_v3.jpg http://mcc.sj.ifsc.edu.br/files/2016/07/imagem_capa_site_mcc2016-1.png http://mcc.sj.ifsc.edu.br/wp-content/themes/responsive/core/icons/twitter-icon.png http://mcc.sj.ifsc.edu.br/wp-content/themes/responsive/core/icons/facebook-icon.png
Essa aplicação será explorada ao longo deste curso, quando diversas melhorias serão realizadas.
Elementos da linguagem
Python é uma linguagem com algumas características muito particulares, as quais a simplificam e a tornam muito rica e expressiva. Nesta parte do curso alguns elementos básicos da linguagem serão apresentados.
Apresentação de dados na tela
Uma necessidade elementar de um programa é apresentar informações na tela na forma de texto simples. Python oferece a função predefinida print, que mostra texto na tela de forma simples e com grande flexibilidade. Ela já foi vista no exemplo Hello world !, e aqui alguns detalhes sobre como usá-la serão mostrados.
A função print pode ser usada para mostrar um texto. Note que uma constante string pode ser delimitada tanto por aspas simples quanto duplas:
print('Um texto')
print("Outro texto")
Múltiplos argumentos podem ser passados à função, bastando separá-los por vírgulas. Ao serem apresentados, um espaço em branco é inserido entre eles:
print('Um texto',"Outro texto")
Valores de diferentes tipos podem ser mostrados com print, tais como números inteiros e ponto flutuante:
print('Numero inteiro:', 5)
print('Numero ponto-flutuante:', 3.1416)
Naturalmente, os valores a serem apresentados podem estar contidos em variáveis:
x = 5
pi = 3.1416
print('Numero inteiro:', x)
print('Numero ponto-flutuante:', pi)
Quando múltiplos valores são apresentados, pode-se modificar o separador inserido entre eles. Como já informado, incialmente o separador é um espaço em branco, mas ele pode ser qualquer coisa:
x = 5
pi = 3.1416
print('Numero inteiro:', x, sep='-->')
print('Numero ponto-flutuante:', pi, sep='...')
Por fim, print por default adiciona uma quebra de linha ao final dos dados apresentados, mas isso pode ser alterado. Por exemplo, se for desejável mostrar uma vírgula ao invés da quebra de linha:
x = 5
pi = 3.1416
print('Numero inteiro:', x, end=', ')
print('Numero ponto-flutuante:', pi)
Estrutura do código-fonte
Tipos de dados básicos
Python possui alguns tipos de dados básicos. A rigor, todos tipos de dados em Python são na verdade classes, e variáveis desses tipos são objetos. Isso abre um grande leque de operações que podem ser feitos com essas variáveis.
Tipos numéricos
Python possui dois tipos numéricos:
- Inteiros (int)
- Ponto-flutuante (float)
Variáveis desses tipos são criadas principalmente ao se atribuirem constantes numéricas a elas:
# x é uma variável do tipo int
x = 1
# pi é uma variável do tipo float
pi = 3.1416
Tipos numéricos suportam operações aritméticas típicas:
x = 1
pi = 3.1416
# Soma de dois inteiros: resultado é inteiro
y = x + 2
# Soma de inteiro e float: resultado é float
z = x + pi
# Multiplicação de inteiros: resultado é inteiro
w = x * 2
# Multiplicação entre int e float: resultado é float
v = pi*x
# Divisão entre inteiros: resultado é float
y = y / 2
# Potenciação de int: resultado é int
x = x**2
# Potenciação de float: resultado é float
y = pi**3
Exercícios:
- Execute o programa acima. Que resultados ele apresenta ?
- Modifique o programa para que cada nova variável tenha seu valor mostrado na tela segundo este formato: nome_da_variável=valor_da_variável
Conversões entre os tipos de dados podem ser feitas usando diretamente as classes int e float:
- Conversão para int:
# pi é float pi = 3.1416 # numero é uma string ! numero = '12345' # converte os valores para int x = int(pi) y = int(numero) print('x:', x) print('y:', y)
- Conversão para float:
# x é int x = 23 # numero é uma string ! numero = '3.1416' # converte os valores para float y = int(x) pi = int(numero) print('y:', y) print('pi:', pi)
Tipo booleano
Python possui um tipo de dados booleano chamado bool. Basicamente ele pode armazenar apenas dois valores: True ou False.