Escolar Documentos
Profissional Documentos
Cultura Documentos
Curso Python PDF
Curso Python PDF
de programao Python
Setembro/2008
Contedo
1 Introduo 1
1.1 Instalao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
2 Introduo programao 5
2.1 Tipos de dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.1.3 Listas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.1.4 Tuplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.1.5 Dicionrios . . . . . . . . . . . . . . . . . . . . . . . . . . 9
3.3 Decises: if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
4.2 Mdulos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
4.3 Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
6 Controlo de erros 22
i
Contedo
7 A biblioteca padro 23
7.1 Os mdulos math e cmath . . . . . . . . . . . . . . . . . . . . . . 23
7.2 O mdulo sys . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
7.3 O mdulo os . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
7.4 O mdulo csv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
9 Concluso 42
ii
Captulo 1
Introduo
O Python uma linguagem de programao de alto nvel criada por Guido Van
Rossum, cuja primeira verso foi publicada em 1991. O Python suporta vrios
paradigmas de programao, como a programao estruturada, a programao
orientada a objectos e tambm alguns elementos da programao funcional,
mas nenhuma destas escolhas imposta ao utilizador, sendo possvel utilizar o
paradigma que se achar mais adequado. As principais vantagens de usar Python
so:
1
1 Introduo
1.1 Instalao
1
Abreviatura de Integrated development environment
2
1 Introduo
$ ipython
Python 2.5.1 (r251:54863, Jul 10 2008, 17:24:48) Type "copyright", "credits" or
"license" for more information.
IPython 0.8.2 An enhanced Interactive Python.
? -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help -> Python's own help system.
object? -> Details about 'object'. ?object also works, ?? prints more.
In [1]:
3
1 Introduo
In [1]: help(open)
Help on built-in function open in module __builtin__:
open(...)
open(name[, mode[, buering]]) -> le object
Listagem 1.1:
# * c o d i n g : l a t i n 1 *
#F i c h e i r o p r i n t . py
#O c a r d i n a l i n d i c a que o r e s t o da l i n h a um comentrio
#e s e r i g n o r a d o p e l o Python
print 2 ** 3 #Imprime 8
$ python print.py
8
A primeira linha do programa (# -*- coding: latin-1 -*- ) necessria porque
este contm caracteres acentuados, e necessrio especicar como esto codi-
cados. As codicaes usuais so o latin-1 e utf-8. Se esta linha no estivesse
presente obteramos o erro:
$ python print.py
File "print.py", line 2
SyntaxError: Non-ASCII character '\xc3' in le t.py on line 2, but no encoding
declared; see http://www.python.org/peps/pep-0263.html for details
4
Captulo 2
Introduo programao
Neste curso vamos estudar a linguagem Python, que chamada de muito alto
nvel, pois utiliza abstraces ainda mais afastadas das utilizadas pelo proces-
sador, e que nos so mais prximas.
5
2 Introduo programao
Listagem 2.1:
Listagem 2.2:
Este comportamento vai mudar na verso 3.0 do Python, sendo ento o ope-
rador / sempre a diviso real, e utilizando // para a diviso inteira. Podemos
forar esse novo comportamento j na verso actual do Python se a primeira
linha do nosso programa for
Listagem 2.3:
Listagem 2.4:
6
2 Introduo programao
Operador Descrio
+ Soma
- Subtraco
* Multiplicao
/ Diviso (real ou inteira)
// Diviso inteira
** Elevar a uma potncia
% Mdulo (resto da diviso inteira)
Listagem 2.5:
Listagem 2.6:
print s [2:4] #S e q u n c i a de n d i c e s , o p r i m e i r o 2 e
#menor que 4 (2 e 3 ) , n e s t e c a s o imprime ' cd '
Listagem 2.7:
7
2 Introduo programao
Mtodo Descrio
In [1]: s = abc
In [2]: s[0] = z
TypeError: 'str' object does not support item assignment
Podemos no entanto atribuir mesma varivel um novo valor construdo com
base no anterior:
In [1]: s = abc
In [2]: s = z + s[1:]
In [3]: print s
zbc
2.1.3 Listas
Uma lista um conjunto ordenado de objectos. Uma lista pode ser alterada,
inserindo, apagando ou substituindo um ou mais elementos. Em Python as
listas so delimitadas por parntesis rectos.
Listagem 2.8:
Listagem 2.9:
8
2 Introduo programao
l = [ 1 , "a" , 3 . 1 4 , 2 . 7 1 8 ]
print l [:2] #Imprime [ 1 , ' a ' ]
2.1.4 Tuplos
Os tuplos so sequncias ordenadas de objectos, semelhantes s listas, mas imu-
tveis. Os tuplos so delimitados por parntesis.
Listagem 2.10:
Para criar um tuplo com apenas um elemento necessrio por uma vrgula a
seguir esse elemento, de outra forma seria apenas um valor entre parntesis. Os
prprios parntesis so opcionais onde tal no ambguo:
Listagem 2.11:
a = 10
b = 20
a,b = b,a #Operao e n t r e t u p l o s , a p e s a r de no t e r
#p a r e n t e s i s . Agora a=20 e b=10
2.1.5 Dicionrios
Um dicionrio associa valores a chaves. As chaves tm de ser valores imutveis
(nmeros, cadeias de caracteres ou tuplos destes), sendo associadas um valor
que pode ser qualquer objecto Python.
Listagem 2.12:
d = {} #Um d i c i o n r i o v a z i o
d[1] = " abc " #A s s o c i a o v a l o r " abc " chave 1
Listagem 2.13:
9
Captulo 3
Instrues de controlo do uxo do
programa
3.1 Condies
Em Python qualquer objecto pode ser testado para determinar se uma condi-
o verdadeira ou falsa. So condies falsas None, False, um valor numrico
nulo, uma lista, cadeia de caracteres, tuplo, ou dicionrio vazios. Os restantes
so verdadeiros. Estas condies podem ser combinadas com os operadores l-
gicos or (ou lgico), and (e lgico) e not (no lgico). O exemplo seguinte vai
imprimir a mensagem, pois uma lista vazia uma condio falsa, e negao de
uma proposio falsa uma proposio verdadeira.
Listagem 3.1:
lista = []
i f not l i s t a :
print "A lista est vazia "
10
3 Instrues de controlo do uxo do programa
Operador Descrio
< Menor
> Maior
<= Menor ou igual
>= Maior ou igual
== Igual
!= Diferente
Listagem 3.2:
x = 5
if x <10:
x += 1
print "x foi incrementado "
3.3 Decises: if
Listagem 3.3:
11
3 Instrues de controlo do uxo do programa
Listagem 3.4:
if x >=10:
print "x maior ou igual a 10 "
else :
print "x menor que 10 "
Quando queremos que um dado bloco de cdigo seja executado um nmero xo
de vezes (podendo esse nmero de vezes ser dado por uma varivel) utilizamos
a instruo for.
Listagem 3.5:
Listagem 3.6:
range (5) #D e v o l v e [ 0 , 1 , 2 , 3 , 4 ] . O v a l o r i n i c i a l
#zero , o incremento 1 .
range ( 2 , 4 ) #D e v o l v e [ 2 , 3 ] .
range ( 2 , 1 5 , 3 ) #D e v o l v e [ 2 , 5 , 8 , 11 , 1 4 ] .
#O v a l o r do incremento 3 .
range (5 ,0 , 1) #D e v o l v e [ 5 , 4 , 3 , 2 , 1 ] . O v a l o r do
#incremento pode s e r n e g a t i v o .
range (0 ,5 , 1) #D e v o l v e [ ] (uma l i s t a v a z i a ) .
12
3 Instrues de controlo do uxo do programa
Listagem 3.7:
x = 10
while x >0:
i f x % 2 != 0: #Se x impar
print x ,
x = 1 #E q u i v a l e n t e a x = x 1
As instrues break e continue podem ser usadas dentro de ciclos for e while.
A instruo break causa uma sada imediata do ciclo, o continue interrompe
o processamento do resto do bloco de cdigo do ciclo, passando de imediato
prxima iterao.
13
Captulo 4
Estruturao e organizao do cdigo
4.1 Funes
Listagem 4.1:
def tabuada ( n ) :
print "A t a b u a d a do " , n , " : "
f o r i in r a n g e ( 1 , 1 1 ) :
print n , " * " , i , "=" , n * i
Uma funo denida pela instruo def, que seguida pelo nome da funo
e por parntesis, que contm a lista de parmetros. Opcionalmente uma funo
pode usar a instruo return, que termina a funo e retorna ao chamador. A
instruo return pode ser seguida de um valor, sendo esse o valor da chamada
da funo.
Listagem 4.2:
def soma ( a , b ) :
return a+b
c = soma ( 2 , 3 )
print soma ( " a b c " , " d e f " ) # Imprime a b c d e f
14
4 Estruturao e organizao do cdigo
Neste exemplo denimos uma funo que retorna a soma de dois nmeros,
sendo o resultado atribudo varivel c. Mesmo que uma funo retorne um
valor, no obrigatrio atribuir esse valor a uma varivel, podendo este ser
ignorado se assim o desejarmos. A funo soma no tem de ser usada apenas
com nmeros, mas pode receber qualquer tipo de dados que possam ser somados
com o operador + , como cadeias de caracteres.
primeira linha de denio de uma funo pode opcionalmente seguir-se
uma cadeia de caracteres. Nesse caso essa cadeia de caracteres a cadeia de do-
cumentao da funo (docstring). Essa cadeia de caracteres ento associada
prpria funo, e pode ser consultada usando os mecanismos de introspeco
do Python ou por programas (como IDEs) que as reconheam.
Listagem 4.3:
def soma ( a , b ) :
" " "A f u n o soma devolve a soma dos seus prametros """
return a+b
15
4 Estruturao e organizao do cdigo
range() - Cria uma lista contendo uma sequncia. Para mais detalhes ver
a Sec. 3.4.1.
16
4 Estruturao e organizao do cdigo
4.2 Mdulos
17
4 Estruturao e organizao do cdigo
Listagem 4.4:
4.3 Classes
18
4 Estruturao e organizao do cdigo
Na sua forma mais simples uma classe apenas uma forma diferente de agru-
par dados com o cdigo que manipula esses dados:
Listagem 4.5:
# * c o d i n g : l a t i n 1 *
class Temperatura :
""" Converses de temperatura """
def __init__ ( s e l f , t e m p _ C e l s i u s = 0 . 0 ) :
s e l f . g r a u s _ C e l s i u s = temp_Celsius
def C2F ( s e l f , c ) :
""" Converte de graus Celsius para Fahrenheit """
return c * (9.0/5.0) + 32.0
def F2C ( s e l f , f ) :
""" Converte de graus Fahrenheit para C e l s i u s """
return (f 32)*(5.0/9.0)
def Fahrenheit ( s e l f ) :
return s e l f . C2F ( s e l f . g r a u s _ C e l s i u s )
def Celsius ( s e l f ):
return s e l f . graus_Celsius
def Kelvin ( s e l f ) :
return s e l f . graus_Celsius + 273.15
19
Captulo 5
Operaes de entrada / sada
Para abrir um cheiro, seja para leitura ou escrita usa-se a funo open(nome_cheiro,modo)
onde o primeiro parmetro o nome do cheiro, e o segundo o modo, r para
leitura, w para escrita (se o cheiro j existir apagado), a para acrescentar
informao a um cheiro existente.
Listagem 5.1:
Listagem 5.2:
f . close ()
Listagem 5.3:
import numpy as np
x = np . a r a n g e ( 0 . 0 , 1 0 . 0 , 0 . 0 5 )
y = np . s i n ( x )
20
5 Operaes de entrada / sada
f . close ()
21
Captulo 6
Controlo de erros
Durante a execuo de um programa podem surgir erros, como por exemplo uma
diviso por zero. Estes erros so chamados de excepes. Se estas excepes
no forem interceptadas so reportados pelo Python e terminam a execuo do
nosso programa:
Listagem 6.1:
print 1/0
$ python erro.py
File "erro1.py", line 1, in <module>
print 1/0
ZeroDivisionError: integer division or modulo by zero
Neste caso despoletada a excepo ZeroDivisionError.
Listagem 6.2:
# * c o d i n g : l a t i n 1 *
def dividir (a , b ):
try :
return a / b
except Z e r o D i v i s i o n E r r o r :
return " D i v i s o p o r z e r o !"
Neste exemplo uma instruo que pode falhar est dentro uma instruo try
/ except, e ao vericar-se a excepo ZeroDivisionError em vez de o programa
falhar, a funo dividir retorna uma mensagem.
22
Captulo 7
A biblioteca padro
Listagem 7.1:
import math
import cmath
23
7 A biblioteca padro
7.3 O mdulo os
Listagem 7.2:
import csv
f = open ( " f i l e . d at " , " r " )
x = []
y = []
r e a d e r = c s v . r e a d e r ( f , d e l i m i t e r=" \ t " )
for r in reader :
x . append ( f l o a t ( r [ 0 ] ) )
y . append ( f l o a t ( r [ 1 ] ) )
f . close ()
24
Captulo 8
Python e clculo numrico
8.1 Numpy
O numpy uma extenso do Python que adiciona suporte para vectores e ma-
trizes multi-dimensionais, bem como uma srie de funes que operam nesses
objectos. O numpy est documentado exaustivamente num livro gratuito, dis-
ponvel em http://www.tramy.us/guidetoscipy.html.
O objecto base do numpy o array. Um array um conjunto de elementos,
todos do mesmo tipo, com um dado nmero de dimenses.
Listagem 8.1:
import numpy as np
a = np . a r r a y ( [ 1 , 2 , 3 ] ) #Converte uma l i s t a para a r r a y
#Array 1D com os v a l o r e s de 0 a 10 , p a s s o 0 . 1
#armazenados como r e a i s de p r e c i s o d u p l a
b = np . a r a n g e ( 0 . 0 , 1 0 . 0 , 0 . 1 , d t y p e=np . f l o a t 6 4 )
25
8 Python e clculo numrico
a.dtype: Tipo de dados. Ver a tabela 8.1 para uma lista de tipos de dados.
Listagem 8.2:
import numpy as np
#Array de r e a i s de p r e c i s o d u p l a
#com 3 l i n h a s e 4 c o l u n a s , i n i c i a l i z a d o a z e r o
x = np . z e r o s ( ( 3 , 4 ) , d t y p e=np . f l o a t 6 4 )
Listagem 8.3:
import numpy as np
x = np . a r r a y ( [ 1 0 , 2 , 3 , 5 ] )
y = np . a r r a y ( [ 2 , 4 , 1 5 , 2 ] )
print np . g r e a t e r ( x , y ) #Imprime [ True F a l s e F a l s e True ]
26
8 Python e clculo numrico
Funo Descrio
j j j
Uij+1 Uij U 2Ui1 + Ui+1
= k i1 ,
t x2
ou seja,
kt j
Uij+1 = Uij + Ui1 2U j
i1 + U j
i+1 .
x2
Listagem 8.4:
# * c o d i n g : l a t i n 1 *
#Equao do c a l o r , dU/ d t = k d^2U/ dx ^2
import numpy as np
import pylab
dt = 0 . 0 5
dx = 0 . 5
27
8 Python e clculo numrico
Funo Descrio
28
8 Python e clculo numrico
k = 1.0
#Para k =1, e s t e mtodo e s t v e l s e
#d t / dx **2 <= 1/2
x = np . a r a n g e ( 1 0 . 0 , 1 0 . 0 , dx )
t = np . a r a n g e ( 0 . 0 , 1 0 . 0 , d t )
nx = l e n ( x )
nt = l e n ( t )
#D i s t r i b u i o i n i c i a l
u = np . e x p ( ( x + 2 . 0 ) ** 2 ) + np . e x p ( ( x 2 . 0 ) * * 2 )
sol = np . z e r o s ( ( nt , nx ) , d t y p e=u . d t y p e )
sol [0 ,:] = u
for i in xrange ( 1 , nt ) :
u[1: 1] += ( k * d t / dx * * 2 ) * ( u[: 2 ] 2.0 * u [ 1 : 1 ] + u[2:])
sol [ i , : ] = u
0.90
0.75
6 0.60
t
0.45
4
0.30
0.15
0 0.00
-10 -5 0 5
x
29
8 Python e clculo numrico
8.2 Scipy
8.2.1 optimize
Rotinas gerais de optimizao e minimizao.
Mtodo Descrio
8.2.2 stats
Um conjunto de distribuies de probabilidade incluindo por exemplo as dis-
tribuies normal, Chi-quadrado, Cauchy, Gamma, Logstica, T de Student, as
distribuies discretas binomial, Bernoulli, geomtrica e Poisson entre outras.
Inclui tambm as funes estatsticas usuais como a media, mediana, moda, etc.
8.2.3 linalg
Rotinas de lgebra linear.
30
8 Python e clculo numrico
Mtodo Descrio
8.2.4 signal
Rotinas de processamento de sinal
Mtodo Descrio
convolve Convoluo
correlate Correlao
tconvolve Convoluo usando transformadas de Fourier rpidas
bspline B-splines
medlt Filtro median
sawtooth Onda dentes de serra
square Onda quadrada
boxcar Janela boxcar
triang Janela triangular
gaussian Janela gaussiana
hann Janela de Hann
hamming Janela de Hamming
8.2.5 tpack
Transformadas de Fourier rpidas
Mtodo Descrio
31
8 Python e clculo numrico
8.2.6 integrate
Integrao e resoluo de equaes diferenciais ordinrias
Mtodo Descrio
8.2.7 outras
Para alm dos componentes do scipy apresentados acima, destacam-se:
8.3 VPython
Listagem 8.5:
32
8 Python e clculo numrico
33
8 Python e clculo numrico
Comando Descrio
8.3.1 Vectores
O VPython suporta o tipo vector.
Listagem 8.6:
8.3.2 Objectos
Na tabela 8.9, <ponto> deve ser substitudo por um dado ponto no espao 3D
como por exemplo (1,2,3) e <vec> por um vector, como por exemplo (1,0,0), e
sendo <n> um nmero real.
8.4 matplotlib
8.4.1 plot
import pylab
import numpy as np
34
8 Python e clculo numrico
1.2
sinc(x)
1.0
0.8
0.6
0.4
y
0.2
0.0
-0.2
-0.4
-30 -20 -10 0 10 20 30
x
8.4.2 subplot
import pylab
import numpy as np
def g r a f i c o (m) :
x = np . a r a n g e ( 10.0 ,10.0 ,0.01)
y = np . s i n (m* x )
pylab . p l o t ( x , y )
p y l a b . t i t l e ( "m="+ s t r (m) )
35
8 Python e clculo numrico
m=1 m=2
1.0 1.0
0.5 0.5
0.0 0.0
-0.5 -0.5
-1.0 -1.0
-10 -5 0 5 10 -10 -5 0 5 10
m=3 m=4
1.0 1.0
0.5 0.5
0.0 0.0
-0.5 -0.5
-1.0 -1.0
-10 -5 0 5 10 -10 -5 0 5 10
for i in range ( 4 ) :
p y l a b . s u b p l o t ( 2 , 2 , i +1)
g r a f i c o ( i +1)
p y l a b . show ( )
8.4.3 hist
import pylab
import numpy as np
import numpy . random as random
8.4.4 scatter
import pylab
36
8 Python e clculo numrico
700
600
500
400
300
200
100
0
-4 -3 -2 -1 0 1 2 3 4
37
8 Python e clculo numrico
-1
-2
-3
-1.5 -1.0 -0.5 0.0 0.5 1.0 1.5
import numpy as np
import numpy . random as random
n = 100
x = random . n o r m a l ( 0 . 0 , 0 . 5 , s i z e =n )
y = random . n o r m a l ( 0 . 0 , 1 . 0 , s i z e =n )
a r e a = 1 0 0 . 0 / np . s q r t ( x ** 2+y * * 2 )
c o r = np . a r a n g e ( 0 , n , 1 )
p y l a b . s c a t t e r ( x , y , c=c o r , s=a r e a , a l p h a = 0 . 7 5 )
p y l a b . show ( )
8.4.5 imshow
import pylab
import numpy as np
x = np . a r a n g e ( 5.0 ,5.0 ,0.01)
y = x
X, Y = np . m e s h g r i d ( x , y )
p y l a b . imshow ( np . s i n (X) * np . c o s (Y) , \
extent =[ 5.0 ,5.0 , 5.0 ,5.0] , \
38
8 Python e clculo numrico
4 0.8
0.6
2 0.4
0.2
0 0.0
-0.2
-2 -0.4
-0.6
-4 -0.8
-1.0
-4 -2 0 2 4
39
8 Python e clculo numrico
tes cheiros, uma vez que so independentes do sistema operativo que se esteja
a usar.
Listagem 8.7:
x = np . a r a n g e ( 0 , 2 . 0 * np . p i , 0 . 1 )
y = np . s i n ( x )
s t o r e ( x , y , " t e s t . nc " )
le = NetCDFFile(teste.nc,w)
temos os mtodos
40
8 Python e clculo numrico
x = le.variables[x][:]
41
Captulo 9
Concluso
42