Você está na página 1de 66

Minicurso de Python

Prof. Tlio Toffolo


http://www.toffolo.com.br

Baseado no trabalho de Alberto A.S. Lopes
Apresentao no II SSPGCC
Sobre o Minicurso
Referncia Bibliogrfica
Lutz, M. e Ascher, D. Aprendendo Python, 2 ed. Bookman
Sugesto de leitura
Borges, L. E. Python para desenvolvedores
http://ark4n.wordpress.com/python/
Pilgrim, M. Dive into Python http://diveintopython.org/
Tutorial do Python em http://docs.python.org/tutorial/
Demais materiais referenciados em http://www.python.org/doc/,
em especial os documentos em portugus em
http://wiki.python.org/moin/PortugueseLanguage
2
A linguagem Python
Criada e conduzida por Guido von Rossum
Mantida atualmente pela Python Software Foundation,
em um processo comunitrio
Mudanas fundamentais so discutidas em comunidade
Aprovao final das mudanas revisada pelo criador
Curiosidade
O nome Python vem do grupo de humor ingls Monty Python

3
Objetivos da linguagem
Clareza e simplicidade do cdigo
Portabilidade
Multi-propsito
Multi-paradigma
Linguagem Dinmica
Interoperabilidade com outras linguagens

4
Clareza e Simplicidade
Eliminao de delimitadores de bloco
Recuo sinttico
Tipagem dinmica
Gerenciamento de memria automtico
Parmetros default
5
Como um programa em Python?
# -*- coding: utf-8 -*-

import sys

print u"Bem vindo ao Python, verso %s" % sys.version
print u"Digite um nmero inteiro:",
n = int(raw_input())
for i in range(n):
print u"Mensagem %s" % i

print u"Obrigado, e at logo!
6
Modelo de execuo baseado em mquina virtual
Para executar em certa plataforma, basta haver um
interpretador Python disponvel
Windows, MAC, Linux, Unix bsicos
Jython ! Python para Java
IronPython ! Python para .NET
PyObjC ! Python para Cocoa
Portabilidade
7
Python inicialmente foi criada para ser usada como
linguagem de script de shell, no sistema operacional
Amoeba
Atualmente, pode ser usada em diversos domnios de
aplicao
Aplicativos desktop (Tk/Tcl, wxPython, Jython, IronPython)
Aplicativos web (Django, Grok, etc.)
Web Services
Python usada hoje entre outros no Youtube, Google,
Globo.com, etc.
Multi-propsito
8
Python suporta construes principalmente nos
paradigmas de programao
Imperativa (estruturada)
" Funes, estruturas de controle, mdulos
Orientada a objetos
" Classes, objetos
Funcional
" Manipulao de listas
Multi-paradigma
9
No Python, tudo um objeto
As variveis atuam como ponteiros
No Python, tudo ocorre em tempo de execuo
Os objetos no Python possuem uma estrutura dinmica
Atributos podem ser acrescentados em tempo de execuo
Classes podem ser modificadas em tempo de execuo
Linguagem Dinmica
10
Mdulos do Python podem ser implementados em cdigo
nativo
E, portanto, escrito em linguagens como C++, C, etc.
Programas em Python podem realizar chamadas ao
sistema operacional, iniciar processos, etc.
Implementaes da Mquina Virtual Python em outras
tecnologias podem oferecer acesso a bibliotecas
Programas em Python que rodam em Jython tm acesso
biblioteca padro Java
O mesmo ocorre com o IronPython (bibliotecas do .NET
Framework) e PyObjC (bibliotecas Cocoa)
Interoperabilidade
11
Tipagem dinmica dificulta a documentao e o
entendimento de um sistema de maior tamanho e
complexidade
Linguagem dinmica dificulta a programao com
base em contratos
A ausncia do suporte a interfaces na linguagem, por exemplo,
torna menos formal a declarao de componentes
Ausncia de bons ambientes de desenvolvimento
integrado vinha dificultando sua adoo

Crticas ao Python
12
Execuo de um programa Python
13
.py
.pyc
Realizados automaticamente pelo
interpretador do python
Criao do
programa
em Python
Compilao
Execuo do
cdigo
Interpretador interativo do Python
Use CTRL+D para sair (ou CTRL+Z no Windows)
No prompt >>> voc tem duas opes
" Digitar um comando
" Digitar uma expresso
As expresses so avaliadas e o resultado apresentado na linha
abaixo, como a representao do resultado
Os comandos so realmente executados, afetando todo o
ambiente de execuo
Iniciando o Python
14
Expresses aritmticas
+, -, *, /
//
**
Expresses de comparao
>, <, >=, <=, ==, !=
Expresses lgicas
and, or, not
Expresses bsicas
15
Inteiros (long da linguagem C)
0, 123, 4444, 231
Longos (inteiros de preciso arbitrria - bignum)
0L, 231L, 4444L
(o L pode ser mnusculo, mas bom evitar)
Ponto flutuante
1.23, 444.4, 123.4e+56
Inteiros podem ser em hexa ou octal
0xFF, 0xbabaca, 0123, 02222, 010
Literais
16
Literais
Nmeros complexos
100 + 2j
Strings (delimitados com aspas ou apstrofos)
tulio, toffolo
Booleans
True ou False (mas o Python considera como verdadeiro, alm
de True, qualquer valor diferente de 0, None, ou estruturas de
dados vazias)
Referncia a nenhum objeto (equivalente a NULL)
None
17
print (comando da linguagem)
A expresso depois do print avaliada
Resultado impresso na sada padro
Se o print terminar com uma vrgula, no h quebra de linha ao
final (s um espao)
Se aps o print houver expresses separadas por vrgula, todas
sero impressas, separadas por espao
NO a mesma coisa que a representao do resultado
Primeiro comando bsico
18
Primeira funo bsica
raw_input (funo da linguagem)
uma funo cujo parmetro uma string (prompt)
O retorno string
Voc pode converter com as funes da linguagem int, float,
bool, longpyth
19
# -*- coding: utf-8 -*-
Coloque na primeira linha para indicar a codificao do arquivo
Comentrios
Comentrios comeam com o caracter # (fora de um literal
string) e vo at o final da linha
Espaos em branco e tabulaes so ignorados, exceto
no comeo da linha (quando marcam o recuo sinttico)
Lembre-se de manter o recuo sinttico consistente
Decida logo entre utilizar tabulaes ou espaos !!!
Orientaes bsicas para escrever programas
20
Orientaes bsicas para escrever programas
Caso precise de mais de uma linha para escrever apenas
uma linha lgica, coloque uma barra no final. Exemplo:
x = 12 + 20 + 30 + \
40 + 60 + 99
Observaes:
A linha lgica tambm continua se a linha fsica termina em uma
lista (parmetros de uma funo, por exemplo)
Ou ainda, se termina em um literal string de delimitadores triplos
no fechado
21
Orientaes bsicas para escrever programas
possvel fazer atribuies utilizando tuplas
Exemplo:
>>> a, b = 10, 20

Qual ser o valor de a?
Qual ser o valor de b?

22
As strings no Python so delimitadas por apstrofos ou
aspas
Permite mais facilmente usar os delimitadores dentro das strings
Exemplo: Eat at Joes
No pode haver quebras de linhas, a no ser que as
strings sejam delimitadas por aspas ou apstrofos triplos
""" Sobre este documento
O Python uma linguagem muito boa
"""
Strings
23
As strings pode ser prefixadas por u ou r
u"Este um literal unicode"
r"Este um literal de string cru (no interpreta \)"
ru"Este um literal unicode cru
Strings podem ser convertidas de e para unicode com as
funes internas str e unicode
Strings
24
Concatenao
alfa + beta, Hello + world
Note que dois literais string justapostos subentende-se como
concatenados, como Mar portuguez
Repetio
Liga*30
Busca simples
dado in soldado
Operaes bsicas com strings
25
Os strings podem ser manipulados com o operador de
indexao
alberto[2] retorna b
Mas isso no pode ser usado para alterar o string
Strings so consideradas imutveis!
(ser explanado mais adiante)
Os valores de ndice sempre comeam com 0
O operador de indexao no Python muito poderoso,
possuindo diversas opes:
Slices
26
Para todos os exemplos a seguir, considere que:
alfa = abcdefghijklmnopqrstuvwxyz
Obteno de um determinado elemento
alfa[10] retorna k
ndices negativos: -1 considerado o ltimo elemento
alfa[-1] retorna z, alfa[-26] retorna a
Indicar um nico ndice fora do tamanho d erro
alfa[300] ou alfa[-27] do erro
Slices
27
Slices
Dois ndices separados por dois pontos retornam uma
substring incluindo o caractere do primeiro ndice e
excluindo o caractere do segundo
alfa[0:3] retorna abc
alfa[2:10] retorna cdefghij
alfa[-24:-16] tambm retorna cdefghij
Se o primeiro ndice corresponder a um caracter
posterior ao do primeiro ndice, nada retornado
alfa[3:0] retorna
28
Se o segundo ndice um valor alm dos limites, o
resultado o mesmo de indicar a ltima posio
alfa[25:3000] retorna yz
Se o primeiro ndice no for indicado, o default a
primeira posio
alfa[:2] retorna ab
Se o segundo ndice no for indicado, o default o ndice
posterior ao da ltima posio
alfa[20:] retorna uvwxyz
Slices
29
Um terceiro valor pode ser indicado como o passo
alfa[0:5:2] retorna ace
Um passo negativo pode ser indicado para retornar a
sequncia invertida
alfa[6:2:-1] retorna gfed
Repare que agora o primeiro ndice deve posterior ao segundo
E que o ltimo caracter retornado corresponde posio
posterior do segundo ndice
Invertem tambm os defaults dos dois primeiros ndices
Slices
30
O que retorna:
alfa[::]
alfa[:]
alfa[]
alfa[10:]
alfa[10::]
alfa[:10:]
alfa[2::2]
alfa[:2:2]
alfa[:2:-2]
Pergunta
31
O Python usa o operador % para a operao formatao
de string
O operando do lado esquerdo uma string de formato
O operando do lado direito um objeto ou uma tupla de objetos
(uma lista de objetos entre parnteses, separada por vrgulas)
O resultado uma string no qual o valor do objeto inserido no
string de formato, em posies marcadas por sequncias do tipo
%!, onde ! um cdigo de formatao
Funciona igual ao printf
Formatao de strings
32
Smbolo Descrio
%s str(objeto)
%d Nmero inteiro
%x Inteiro no formato hexa
%f Float (muito usado com o nmero de casas: %.2f formata
para duas casas decimais)
Exemplos comuns de cdigos de formatao
33
# -*- coding: utf-8 -*-

peso = 85.542
idade = 25
nome = u"Tlio"
print "%s tem %d anos e pesa %.1fkg" % (nome, idade, peso)
Nome Descrio
str Converte um valor em string
unicode Converte um valor em unicode
repr Retorna a representao em string do objeto
len Tamanho do string (ou da lista, da tupla, etc.)
Funes teis com strings
34
Estruturas de controle
Principais estruturas de controle de cdigo:
if, elif, else, while, for
As estruturas utilizam a identao e operadores de
comparao:
35
# -*- coding: utf-8 -*-

a = 1
if (a == 1):
print "a = 1"
elif (a == 2 or a == 3):
print "a = 2 or a = 3"
else:
print u"condio else"
# -*- coding: utf-8 -*-

i = 0
while (i < 10):
printf "i = %d" % i

for j in range(10):
printf "j = %d" % j,

Estruturas de controle
A funo range gera uma lista contendo os valores
passados por parmetro. Testem:
range(10), range(0, 10) e range(2, 10)
range(0, 100, 5)
Obtendo o n-simo item da sequncia de Fibonacci:
36
# -*- coding: utf-8 -*-

n = 10 # n-simo item da sequncia
a, b = 0, 1
for i in range(n):
a, b = b, a+b
print "fib[%d] = %d" % (n, b)
No Python tudo um objeto
Todos os valores, mesmo nmeros, so objetos
Um objeto uma mquina de computao
Possui estado
Realiza determinadas computaes
Cada objeto de um tipo
O tipo do objeto determina quais as informaes que compem o
objeto
O tipo tambm determina as computaes que o objeto pode
executar
Valores como objetos
37
Valores como objetos
Os objetos possuem atributos
Um atributo a de um objeto b nada mais do que um objeto b
associado a a
Pode-se usar o operador ponto para identificar atributos
de um objeto
Por exemplo, os objetos do tipo int possuem os atributos real e
imag, indicando os valores das partes real e imaginria:
>>> a = 10
>>> a.imag
0
>>> a.real
10
38
Referncias
As variveis guardam apenas referncias a objetos
Se uma varivel aponta para um objeto, e receber uma
atribuio de outro objeto, perde a referncia do
primeiro objeto
Quando nenhuma varivel apontar para um certo objeto,
este objeto ser excludo pelo garbage collector
Garbage collector = coletor de lixo
Python faz todo o gerenciamento de memria automaticamente
39
Repetindo: a varivel guarda sempre a referncia (i.e.,
o endereo na memria) de um objeto
a=1 aloca o objeto 1 na memria, e guarda a referncia dele na
varivel a
b = a coloca em b a mesma referncia que h em a
b = 11 aloca o objeto 11 na memria, e guarda a referncia dele
na varivel b
O prompt interativo sempre mostra a representao do
valor do objeto apontado pela referncia indicada
(sempre imprime o valor e no o ponteiro)
Referncias
40
Alguns objetos so de tipos imutveis
As strings e os nmeros so do tipo imutvel
No possvel alterar, acrescentar ou tirar atributos deles
Exemplo:
alfa = Tulio
alfa[0] = J
O que se pode fazer obter novos objetos imutveis por
meio de operaes, e atribu-los s variveis.
Objetos imutveis
41
retorna um erro: impossvel fazer a atribuio
Exemplo de operaes com objetos imutveis
Alterando o item na posio 0 de uma string
Alterando o item na posio 1 de uma string
42
# -*- coding: utf-8 -*-

alfa = u'Tlio'
alfa = 'J' + alfa[1:]
# -*- coding: utf-8 -*-

alfa = u'Tlio'
alfa = alfa[0:1] + u'' + alfa[2:]
Funes so sempre iniciadas pela palavra def seguida
do nome da funo e seus argumentos:
Uma funo pode retornar um ou vrios valores (tuplas)
Exemplo:
Funes
43
def metade(x):
return x/2

def metade_e_dobro(x):
return x/2, x*2
Funes: criando uma funo Fibonacci
Crie uma funo que imprime os n primeiros elementos
da sequncia de fibonacci
Teste a funo para n = 10
44
# -*- coding: utf-8 -*-

def fib(n):
a, b = 0, 1
for i in range(n):
print "fib[%d] = %d" % (i, b)
a, b = b, a+b

fib(10) # executando a funo fib com n = 10
Conceitualmente, um mtodo de um objeto um
procedimento que o objeto executa, ao receber uma
mensagem correspondente
Mtodos so acessados com o operador .
O mtodo dir() retorna uma lista com todos os mtodos
disponveis para um objeto
a = 1
dir(a)
dir(1)
dir(Tulio)
Mtodos de um objeto
45
Exemplo: mtodos teis em strings
S.capitalize()
S.ljust(width [, fill])
S.center(width [, fill])
S.lower()
S.count(sub [, start [, end]])
S.lstrip([chars])
S.decode([encoding[,errors]])
S.encode([encoding [,errors]])
S.maketrans(x[, y[, z]])
S.endswith(suffix [, start [, end]])
S.partition(sep)
S.expandtabs([tabsize])
S.replace(old, new [, count])
S.find(sub [, start [, end]])
S.rfind(sub [,start [,end]])
S.format(fmtstr, *args, **kwargs)
S.rindex(sub [, start [, end]])
S.index(sub [, start [, end]])
S.rjust(width [, fill])
S.isalnum()
S.rpartition(sep)
S.isalpha()
S.rsplit([sep[, maxsplit]])
S.isdecimal()
46
Exemplo: mtodos teis em strings
S.rstrip([chars])
S.isdigit()
S.split([sep [,maxsplit]])
S.isidentifier()
S.splitlines([keepends])
S.islower()
S.startswith(prefix [, start [, end]])
S.isnumeric()
S.strip([chars])
S.isprintable()
S.swapcase()
S.isspace()
S.title()
S.istitle()
S.translate(map)
S.isupper()
S.upper()
S.join(iterable)
S.zfill(width)
47
As listas so objetos que guardam valores indexados por
nmeros (iniciados em 0) inteiros
O tamanho da lista varivel e listas podem ser
aninhadas (uma dentro da outra)
Em cada posio da lista est a referncia a um objeto
de qualquer tipo
possvel ter em uma nica lista valores inteiros,
booleanos e strings, por exemplo
Listas
48
Listas
Os literais de lista so delimitados entre colchetes
[1,a,True]
Os operadores len, concatenao (+), repetio (*), e
slices podem ser utilizados em listas
Diferentemente das strings, as listas so mutveis
As listas podem inclusive ser alteradas por atribuio a slices

49
Exemplo
a = [1,b,True,[2,3]]
" Veja que listas podem ser aninhadas (uma dentro da outra)
a[0] retorna o qu?
a[0][1] retorna o qu?
a[3] retorna o qu?
a[3][1] retorna o qu?
Faa a[0] = [5,6,7] e observe o que acontece
Faa a[0:0] = [5,6,7] e veja o que acontece
Listas
50
Mtodos:
sort ordena os itens
append anexa itens
extend anexa itens de uma lista ao final da lista
pop retira o ltimo elemento e o retorna
" Dica: pop e append implementam uma pilha !!!
Comando del exclui um elemento
Qual seria a diferena entre append e extend quando o
parmetro uma lista?
Operaes de interesse para listas
51
Alterar o valor de uma posio da lista (a[0] por
exemplo) altera apenas a lista
a = alfa
b = [0,1,a,c]
b[2] = d
Qual fica sendo o valor de b?
E o valor de a?
Cuidado! Alerta!
52
Funes: criando uma funo Fibonacci
Crie uma funo que retorna os n primeiros elementos
da sequncia de fibonacci
Teste a funo para n = 10
53
# -*- coding: utf-8 -*-

def fib(n):
r = []
a, b = 0, 1
for i in range(n):
r.append(a)
a, b = b, a+b
return r

fib(10) # executando a funo para n = 10
Dicionrios so estruturas de dados que associam pares
de objetos chave e valor
Exemplo:
d1 = {nome: Alberto, sobrenome:Lopes}
d2 = {a: 1, 2: b}
Repare que qualquer objeto pode ser chave e qualquer
objeto pode ser valor
Dicionrios
54
Dicionrios
A indexao pode ser feita colocando o valor da chave
entre parnteses
d1[nome] retorna Alberto
d2[2] retorna b
No possvel fazer slicing em um dicionrio!
Note que o dicionrio no ordenado
55
possvel alterar um valor usando a atribuio a uma
chave especfica:
d3[2] = alfa
Com isso, possvel tambm inserir chaves inexistentes no
dicionrio:
d3[nova_chave] = novo_valor
Com o mtodo keys retorna-se a lista de chaves
Com o mtodo values retorna-se a lista de valores
Dicionrios
56
O mtodo get pode ser usado para recuperar o valor de
uma chave, com a vantagem de no dar erro se a chave
no existir
d2.get(3, nada) retorna nada se a chave 3
d2[3] causa um erro se a chave 3 no existir
O mtodo update concatena o dicionrio passado
como parmetro ao dicionrio chamado
Tambm possvel criar um dicionrio com a funo dict
d = dict(nome=Alberto, sobrenome=Lopes)
Aqui a desvantagem que as chaves precisam ser strings
Dicionrios
57
So sequncias imutveis de objetos indexveis pelo
deslocamento (como nos strings e nas listas)
Funcionam basicamente como as listas, exceto por serem
imutveis (no podem ser modificadas)
Exemplo:
a = 10
b = 20
c = 30
x = a,b,c
x ser uma tupla com trs itens: (10, 20, 30)
Tuplas
58
Ler arquivos
Utilizamos a funo open, que funciona de forma
anloga a fopen em C. Mtodos:
readline l uma linha
read l todo o arquivo
write escreve no arquivo
close fecha o arquivo
Exemplo:
59
i = 100
x = open('arquivo.txt', 'w')
x.write('imprime texto e o inteiro "%d" no arquivo' % i)
x.close()
Palavras reservadas
Palavras reservadas:
and, del, from, not, while, as, elif, global, or, with, assert, else,
if, pass, yield, break, except, import, print, class, exec, in, raise,
continue, finally, is, return, def, for, lambda, try
Alguns formatos de identificadores so usados de forma
especial pelo interpretador:
_ o resultado da ltima avaliao no interpretador interativo
__*__ nomes de sistema
__* membros privados das classes
60
Mais sobre referncias
Dois objetos podem ser comparados de duas formas
a == b: verdadeiro se a e b tiverem o mesmo valor
a is b: verdadeiro se a e b so o mesmo objeto
Isso especialmente importante para objetos mutveis
Listas, strings, etc. podem ser comparados usando <, >,
etc.
Lembre-se de que None um valor que significa
referncia para objeto nenhum
61
Mais tcnicas de iterao
Vimos o uso do for com sequncias
for i in [1,3,5,8,3]: print i
for i in range(5): print i
possvel ainda ter mais de uma varivel de iterao
for a,b,c in [[1,2,3],'456',(7,8,9)]: print b
For a,b in range(5), range(5,10): print a, b
62
Mais tcnicas de gerao de listas
Seja:
lis = [10, 20, 5, 11, 100, 200, 1000]
Se quisermos gerar uma lista com todos os valores
menores do que 30 multiplicados por 3, fazemos:
Ou podemos fazer simplesmente
63
r = []
for x in lis:
if x < 30:
r.append(x*3)
r = [x*3 for x in lis if x < 30]



Perguntas?
Prximos minicursos
Desenvolvendo sites usando Python e Django
Amanh s 16h
Desenvolvimento de jogos MMORPG usando Python
Sbado, s 16h
65
66

Você também pode gostar