Escolar Documentos
Profissional Documentos
Cultura Documentos
Contedo
1 Introduo
1.1 1.2 1.3 Instalao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ambientes de desenvolvimento integrados Modo interactivo . . . . . . . . . . . . .
1
2 2 2
. . . . . . . . . . . . . . . . . . . . . . . . . . .
2 Introduo programao
2.1 Tipos de dados 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Valores numricos
5
6 6 6 8 9 9
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Tuplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Dicionrios . . . . . . . . . . . . . . . . . . . . . . . . . .
10
10 10 11 12 12
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Executar um bloco de cdigo um dado nmero de vezes: for . . . 3.4.1 A funo range . . . . . . . . . . . . . . . . . . . . . . . .
3.5
3.6
. . . . . . . . . . . . . . . . . . .
14
14 15 17 18
Mdulos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
20 22
Contedo
7 A biblioteca padro
7.1 7.2 7.3 7.4 Os mdulos math e cmath . . . . . . . . . . . . . . . . . . . . . . O mdulo sys . . . . . . . . . . . . . . . . . . . . . . . . . . . . . O mdulo os . . . . . . . . . . . . . . . . . . . . . . . . . . . . . O mdulo csv . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
23
23 23 24 24
25
25 26 30 30 30 30 31 31 32 32 32 34 34 34 34 35 36 36 38 39 40
matplotlib . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . subplot
scatter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . imshow
9 Concluso
42
ii
Captulo
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:
A qualidade do cdigo: A sintaxe do Python facilita e encoraja a legibilidade do cdigo, o que o torna mais fcil de manter e reutilizar. A produtividade do programador: mais rpido desenvolver um mesmo cdigo em Python do que noutras linguagens como o C, C++ ou Java. O cdigo mais compacto, requerendo menos linhas, e no necessita da declarao prvia do tipo das variveis. Para alm disso, no requer um ciclo de compilao, podendo o programa ser executado imediatamente.
A portabilidade: Muitos programas Python correm sem qualquer alterao em vrias plataformas como o Linux e o Windows. Uma vasta biblioteca padro
A linguagem Python referida usualmente como uma linguagem de scripting pois usualmente aplicada nessas tarefas, mas no existe uma diferena de fundo entre um script e um programa, sendo o primeiro entendido como um programa simples. Um uso comum do Python o de servir de linguagem de controlo de componentes escritos noutra linguagem (como o C++), no entanto o Python no est limitado a tarefas simples, podendo ser usado em programas de qualquer dimenso. Uma possvel desvantagem do Python em relao a outras linguagens de programao compiladas a velocidade de execuo, o que dadas as capacidades dos computadores actuais no um problema para a maior parte dos programas. Para os programas em que essa diferena importante, sempre possvel desenvolver a maior parte do programa em Python suplementado por um mdulo chamado a partir do Python e desenvolvido noutra linguagem.
1 Introduo
No caso particular das simulaes numricas utilizam-se usualmente mdulos externos distribuio Python base, como o numpy e scipy. O stio
www.python.org
acerca do Python, para todos os nveis de utilizadores. O nome da linguagem, Python, deve-se ao seu criador ser um f da srie televisiva da BBC Monty Python Flying Circus.
1.1 Instalao
As distribuies do sistema operativo Linux j incluem o interpretador de linguagem Python, embora algumas bibliotecas que iremos utilizar no sejam instaladas por defeito. No sistema operativo Windows pode instalar a distribuio ocial, de em falta.
http://www.python.org/,
IDLE - Integrated development for Python, que includo com a distribuio Python
Eric, disponvel em
http://www.die-offenbachs.de/eric/index.html.
SPE, de
be/.
//ipython.scipy.org/)
1
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]: Na linha de comandos do ipython podemos introduzir qualquer comando Python. Uma das caractersticas mais teis o auto-complete, isto , se a seguir a um objecto escrevemos . e de seguida premir-mos o tab obtemos uma lista das possibilidades In [1]: In [2]:
Display all 526 possibilities? (y or n) Outra caracterstica importante a habilidade de ver a ajuda relativamente a qualquer objecto: In [1]: In [2]:
e seria mostrada a documentao deste mdulo. ajuda acerca de funes da prpria linguagem
1 Introduo
In [1]:
help(open)
Help on built-in function open in module __builtin__: open(...) open(name[, mode[, buering]]) -> le object Open a le using the le() type, returns a le object. Ou ento podemos simplesmente usar o Python como uma calculadora avanada In [1]: In [2]: In [3]:
Out[2]: 1.6180339887498949 Out[3]: 8 Quando usado interactivamente, o interpretador mostra o resultado do comando, por exemplo 2**3 imprime 8, mas isso no acontece quando est a executar um cheiro Python, e nessa situao temos de usar a instruo Listagem 1.1:
print.
python print.py
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
Captulo
Introduo programao
Os computadores que utilizamos normalmente seguem a arquitectura de Von Neumann (ver Fig. 2.1) em que o processador executa um programa armazenado na memria, podendo ler ou escrever dados nessa mesma memria e tambm comunicar com os dispositivos de entrada e sada. As instrues executadas pelo processador designam-se por cdigo mquina, sendo operaes muito simples, como por exemplo ler ou escrever um valor de uma dada posio da memria, somar dois nmeros ou mudar o ponto de execuo do programa para uma outra posio se o resultado da operao anterior for zero. Cada uma destas operaes elementares identicada por um nmero, e quando aplicvel, seguem-se os nmeros referentes aos parmetros passados a essa instruo. chama Como difcil programar usando apenas nmeros criou-se uma representao intermdia
assembly,
uma mnemnica, e passa a ser necessrio converter desta representao mais til para ns para os nmeros que o processador consegue executar usando um programa chamado
assembler.
Apesar de o
assembly
ainda necessrio estar envolvido nos detalhes da mquina, sendo complexo escrever programas extensos, pelo que hoje em dia apenas utilizado em pequenas rotinas que necessitem de um contacto mais prximo com o
hardware.
Posteriormente foram desenvolvidas outras linguagens de programao que, por comparao com o
assembly,
Pascal ou C, que utilizam abstraces mais prximas das usadas pelo homem, mas que tal como a primeira tm de poder ser traduzidas de forma no ambgua para cdigo mquina. A maior parte dos programas disponveis hoje em dia so criados em linguagens deste tipo.
Neste curso vamos estudar a linguagem Python, que chamada de muito alto nvel, pois utiliza abstraces ainda mais afastadas das utilizadas pelo processador, e que nos so mais prximas.
2 Introduo programao
j,
seguir a um nmero para se distinguir da varivel j. As operaes que envolvam nmeros inteiros e reais retornam um resultado real e as que envolvam dois inteiros devolvem um inteiro. Uma consequncia importante desta ltima propriedade que o mesmo operador diviso efectua a diviso inteira para dois valores inteiros, mas a diviso real quando um dos valores real. Listagem 2.2:
Este comportamento vai mudar na verso 3.0 do Python, sendo ento o operador / 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:
from
__future__
import
division
2 Introduo programao
Operador + * / // ** % Descrio Soma Subtraco Multiplicao Diviso (real ou inteira) Diviso inteira Elevar a uma potncia Mdulo (resto da diviso inteira) Tabela 2.1: Operadores aritmticos
Estas cadeias de caracteres no podem ter mudanas de linha. Se for necessrio incluir mudanas de linha pode-se ou colocar explicitamente o cdigo de mudana de linha \n ou usar aspas triplas """. Listagem 2.5: s2 = " Linha com isso aspas 1\ n L i n h a 2 " iniciarmos usar de uma cadeia de de caracteres sem que podemos erro mudanas linha
s i n t a x e """
Podemos aceder a caracteres individuais ou seces de uma cadeia de caracteres usando a notao de parntesis rectos e sequncias: Listagem 2.6: s = " abcdef "
len ( s ) s [0] s [ 1]
#A f u n o l e n ( s ) d e v o l v e o tamanho de s , # neste caso 6 #Imprime o p r i m e i r o c a r a c t e r de s , ' a ' # n d i c e s n e g a t i v o s contam a p a r t i r do fim , #n e s t e c a s o ' f ' #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 '
s [2:4]
A sintaxe geral de uma sequncia inicio:m:incremento, em que cada um destes valores opcional. Listagem 2.7: s = " abcdef "
s [::2]
s [::
s [3:]
2 Introduo programao
Mtodo insert(i,v) append(v) remove(v) pop() index(v) count(v) sort() reverse() Descrio Insere o valor v na posio i Acrescenta o valor v ao m da lista Remove da lista o primeiro item com valor v Retorna o ltimo valor da lista, removendo-o. Retorna o ndice da primeira ocorrncia de v. Se no existir retorna um erro. Nmero de vezes que v est na lista Ordena a lista Inverte a ordem dos elementos da lista Tabela 2.2: Mtodos das listas
s [4:2]
Em Python as cadeias de caracteres so imutveis e embora possamos aceder a caracteres individuais no os podemos alterar: In [1]: In [2]:
TypeError: 'str' object does not support item assignment Podemos no entanto atribuir mesma varivel um novo valor construdo com base no anterior: In [1]: In [2]: In [3]: 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. listas so delimitadas por parntesis rectos. Listagem 2.8: l = [ 3.1 4 , " pi " ,7] l [0] += 3 Em Python as
print
l [2]
l . append ( 1 j )
As listas, tal como as cadeias de caracteres e tuplos suportam indexao usando sequncias. Listagem 2.9:
2 Introduo programao
l = [ 1 , "a" , 3 . 1 4 , 2 . 7 1 8 ] l [:2]
2.1.4 Tuplos
Os tuplos so sequncias ordenadas de objectos, semelhantes s listas, mas imutveis. Os tuplos so delimitados por parntesis. Listagem 2.10: t = ( 1 , " abc " , 5 . 0 , 7 . 4 )
t [1:3]
t2 = ( 1 0 , )
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
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 = {} d[1] = " abc "
Podemos ver quais so as chaves de um dicionrio com o mtodo keys() Listagem 2.13: d = { 1 : "um" , 2 : " d o i s " }
2,
com o
valor " ,d [ 2 ]
Captulo
if, for
while.
Antes de estudar
3.1 Condies
Em Python qualquer objecto pode ser testado para determinar se uma condio 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 lgicos
or
(ou lgico),
and
(e lgico) e
not
imprimir a mensagem, pois uma lista vazia uma condio falsa, e negao de uma proposio falsa uma proposio verdadeira. Listagem 3.1: lista = [] lista est vazia "
def
Python, um bloco de cdigo um conjunto de uma ou mais linhas de cdigo que esto espaadas da mesma forma a partir da margem esquerda. em Python o alinhamento do cdigo signicativo. programa vai falhar com um erro: Por exemplo o seguinte
10
Listagem 3.2: x = 5
if
x <10: x += 1
"x
foi
incrementado "
File "bloco.py", line 4 print "x foi incrementado" ^ IndentationError: unexpected indent A instruo
Python no espera um novo bloco falha com o erro IndentationError. importante espaar da mesma forma os blocos de cdigo, e a conveno recomendada usar 4 espaos. Isto tornado mais fcil usando um editor que suporte as convenes Python, o que assegura a uniformidade do cdigo. Se no estiver a usar um editor que suporte estas convenes importante usar sempre 4 espaos e no misturar espaos com tabulaes. Como um bloco de cdigo tem de ter sempre pelo menos uma linha existe uma instruo que no faz nada, de l ter pelo menos uma linha.
pass.
3.3 Decises: if
A instruo condio. Listagem 3.3:
if
and a>=c : print " a v a l o r e l i f b>=a and b>=c : print " b v a l o r else : print " c v a l o r
a>=b
if
Este exemplo ilustra a sintaxe: Se a primeira condio da primeira linha for verdadeira executado o primeiro bloco de cdigo. Uma instruo
if
pode ser
11
elif,
abreviatura de else
if
else,
if
x >=10:
print else
:
"x "x
maior menor
ou que
igual 10 "
10 "
for.
Listagem 3.5:
in
range
O valor
inicial por defeito zero, o valor de paragem tem sempre de ser especicado, e por defeito o valor do incremento 1. Listagem 3.6: range (5)
range ( 2 , 4 ) range ( 2 , 1 5 , 3 )
range (5 ,0 , 1)
range (0 ,5 , 1)
12
while
permite-nos repetir um bloco de cdigo enquanto uma conPode opcionalmente ser seguida de uma clausula
else
while
break.
Listagem 3.7:
x = 10
0:
#Se x impar #E q u i v a l e n t e a x = x 1
break e continue podem ser usadas dentro de ciclos for e while. break causa uma sada imediata do ciclo, o continue interrompe
13
Captulo
4
Ora, no de todo isso que se deve fazer.
4.1 Funes
Uma funo um bloco de cdigo ao qual so opcionalmente passados parmetros e pode retornar um nico valor. exemplo anterior da tabuada como sendo Listagem 4.1: Por exemplo podemos re-escrever o
def
tabuada ( n ) :
return,
return
def
soma ( a , b ) :
return
a+b
c = soma ( 2 , 3 )
# Imprime a b c d e f
14
def
soma ( a , b ) : " " "A f u n o soma devolve a soma dos seus prametros """
return
a+b
abs(x) - Retorna o valor absoluto de x all(iteravel) - Retorna verdade se todos os elementos da expresso itervel so verdadeiros. any(iteravel) - Retorna verdade se algum dos elementos da expresso itervel for verdadeiro. bool(x) - Converte x para booleano, isto , retorna acordo com as regras expostas na Sec. 3.1. chr(x) - Retorna o caracter com cdigo ASCII x. cmp(x,y) - Retorna um valor inteiro que negativo se x<y, zero se x=y e positivo se x>y. complex(s) - Converte a cadeia de caracteres s para um nmero complexo. complex(re,im) - Retorna o nmero complexo re + 1j*im onde re e im so nmeros reais. dir(objecto) - O parmetro objecto opcional. Se for passado retorna
True
ou
False
de
uma lista dos atributos vlidos do objecto (como funes e variveis), caso contrrio retorna o contedo da tabela de smbolos local.
divmod(a,b) - Sendo a e b nmeros retorna um par de nmeros que so o resultado da diviso inteira e o resto da diviso inteira de a por b.
15
enumerate(iteravel) - Retorna um objecto itervel que vai devolver tuplos com dois elementos, sendo o primeiro um valor que comea em zero e vai sendo incrementado, o segundo o valor do iteravel que lhe foi passado como argumento.
eval(expressao) - Avalia a expresso contida na cadeira de caracteres expressao. Por exemplo eval(2+3) retorna 5. lter(f,iteravel) - Retorna uma lista constituda por todos os elementos de iteravel para os quais a funo f retornou
True.
oat(x) - Converte para nmero real o nmero ou cadeia de caracteres x. globals() - Retorna um dicionrio contendo a tabela de smbolos global. help() - Activa o sistema interactivo de ajuda. Se for passado um parmetro, mostra ajuda acerca desse objecto. hex(n) - Retorna uma cadeia de caracteres com a representao hexadecimal do nmero inteiro n. int(x) - Converte para inteiro o nmero ou cadeia de caracteres x. len(s) - Retorna o tamanho da cadeia de caracteres, tuplo, lista ou dicionrio s. list(iteravel) - Retorna uma lista com todos os elementos de iteravel. locals() - Retorna um dicionrio contendo a tabela de smbolos local. map(f,iteravel1,...) - Recebe uma funo f e um ou mais iterveis. A funo f tem de receber tantos parmetros quantos iterveis forem passados. Retorna uma lista constituda pelo resultado de f aplicada aos elementos dos iterveis.
max(iteravel) - Retorna o valor mximo de entre os elementos de iteravel. max(valor1,valor2,...) - Quando a funo max() chamada com mais do que um parmetro, devolve o mximo desses parmetros. min() - Semelhante funo max(), mas retorna o valor mnimo. open(cheiro,[modo]) - Abre um cheiro. Para mais detalhes ver o Cap. 5. ord(c) - Retorna o cdigo ASCII ou cdigo Unicode do caracter c. pow(x,y) - Retorna x elevado a y. Equivalente a x**y. range() - Cria uma lista contendo uma sequncia. Para mais detalhes ver a Sec. 3.4.1.
16
raw_input(prompt) - Imprime prompt e devolve uma cadeia de caracteres que leu da entrada padro, que normalmente o teclado. Esta funo til para pedir valores ao utilizador.
reduce(f,iteravel) - Aplica a funo de dois parmetros f cumulativamente aos valores de itervel, de forma a reduzir iteravel a um nico valor. Por exemplo, usando a funo soma da Listagem 4.3, reduce(soma,[1,2,3,4]) retorna 10, pois primeiro chama a funo soma com 1 e 2, depois com 3 e 3, e nalmente com 6 e 4.
reload(modulo) - Volta a carregar o mdulo especicado. Ver a Sec. 4.2 para mais detalhes. repr(x) - Retorna uma cadeia de caracteres com uma representao do objecto x, que o mesmo que seria impresso com print x. reversed(seq) - Retorna um itervel constitudo pelos elementos de seq pela ordem inversa. round(x) - Arrendonda o valor real x. Opcionalmente pode receber um
segundo parmetro inteiro que indica o nmero de casas decimais a manter. sorted(iteravel) - Retorna uma lista ordenada constituda pelos valores de iteravel. str(x) - Converte o objecto x para cadeia de caracteres. sum(iteravel) - Retorna a soma dos valores de itervel. tuple(iteravel) - Retorna um tuplo constitudo pelos elementos de iteravel, mantendo a ordem destes. unichr(n) - Retorna o caracter Unicode correspondente ao cdigo n. xrange() - Semelhante a range, mas retorna um itervel e no uma lista, e est optimizado para a velocidade e menor consumo de memria do que o range(). A diferena entre o xrange() e o range() s importante para sequncias com muitos elementos.
zip(iteravel1, iteravel2, ...) - Retorna uma lista de tuplos, em que o n-simo elemento da lista consiste num tuplo dos n-simos valores dos iterveis.
4.2 Mdulos
Um mdulo simplesmente um cheiro com extenso .py que contem cdigo Python. importante manter conjuntos lgicos de funes em mdulos diferentes, no s por uma questo de organizao, mas por carem em espaos de nomes (namespaces) diferentes. Isto , uma varivel global pertence ao mdulo de onde foi denida, no interferindo com outros mdulos diferentes. Em programas extensos essencial compartimentar as vrias partes, de forma a limitar a sua complexidade.
17
import:
Listagem 4.4:
import s y s #Importa o mdulo da b i b l i o t e c a padro s y s from math import s i n , s q r t #Importa as f u n e s s i n e import print print
numpy as np
x = np . a r a n g e ( 0 . 0 , 1 0 . 0 , 0 . 1 )
Ao usar a forma import modulo1, para usar as variveis e mtodos denidos no mdulo escrevemos modulo1.metodo ou modulo1.variavel. Na forma from modulo1
import func1,func2
ou from modulo1
import *
os mtodos
e variveis do modulo1 cam disponveis no mesmo espao de nomes que j estamos. Se importar-mos desta forma uma funo ou varivel com o mesmo nome de uma outra j existente s podemos aceder ltima que foi importada, perdendo o acesso que j existia. A instruo importantes:
import
Primeiro o mdulo tem de ser encontrado. Este procurado primeiro na directoria actual do programa. Se no for encontrado de seguida procurado nas directorias especicadas na varivel de sistema PYTHONPATH, e no tendo sido encontrado procurado nas directorias que contm a biblioteca padro do Python.
Se o mdulo for encontrado, vericado se existe uma verso compilada (bytecode) do cdigo actual (cheiros .pyc). com extenso .pyc. Se tal no se vericar, o mdulo ento compilado, e o bytecode gerado guardado num cheiro
O mdulo ento executado, do incio at ao m, o que dene as funes e variveis desse mdulo. Se houver o mdulo possuir instrues fora de funes ou classes essas so tambm executadas.
Esta sequncia s ocorre na primeira que importarmos um mdulo num programa. Se o mesmo mdulo for importado outra vez apenas utilizada a cpia que j est em memria. Para forar a execuo de todos estes passos podemos usar a funo especicado.
reload (),
4.3 Classes
A programao orientada a objectos (OOP) suportada em Python, sendo uma classe criada com a instruo
class.
18
# * c o d i n g : l a t i n 1 *
class
Temperatura : de temperatura """ __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 C2F ( s e l f , c ) : """ Converte de graus Celsius + 32.0 Fahrenheit para C e l s i u s """ para Fahrenheit """ """ Converses
def def
return def
(9.0/5.0) de graus
(f
32)*(5.0/9.0)
#Cria uma i n s t n c i a da c l a s s e Temperatura temp1 = T e m p e r a t u r a ( 2 0 . 0 ) # 20 C print temp1 . C e l s i u s ( ) , " C c o r r e s p o n d e m a " , \ temp1 . F a h r e n h e i t ( ) , " F e a " , temp1 . K e l v i n ( ) , "K"
Neste exemplo a classe Temperatura contem vrias funes, que na OOP so chamadas de mtodos. Os mtodos de uma classe em Python tm obrigatoriamente pelo menos um parmetro, a que por conveno se chama self que recebe a instncia da classe que o chamou. Isto necessrio pois uma mesma classe pode ter muitas instncias, cada uma com os seus valores, no existindo assim ambiguidade entre as variveis da classe ou de uma instncia particular. Uma classe pode ter um mtodo __init__ que chamado automaticamente a quando da instanciao da classe. Se este mtodo tiver mais parmetros para alm do self estes so recebidos dos argumentos que foram passados na criao da instncia, neste exemplo 20.0. Uma descrio pormenorizada de classes e OOP est fora do mbito deste texto. Para mais detalhes consulte a documentao indicada no Cap. 9.
19
Captulo
5
open(nome_cheiro,modo)
Listagem 5.1:
for.
O prximo exemplo escreve para o ecr o contedo do cheiro t.dat: Listagem 5.2:
for
linha
in f : print l i n h a
f . close () O exemplo seguinte tabela a funo seno, escrevendo os resultados no cheiro seno.dat, em duas colunas separadas por um tab: Listagem 5.3:
import
numpy
as
np
for
in
range (n ) :
20
21
Captulo
6
Listagem 6.1:
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:
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 ):
!"
Neste exemplo uma instruo que pode falhar est dentro uma instruo /
try
except,
22
Captulo
7
Vamos apenas apresentar aqui uma pequena
A biblioteca padro
O Python uma linguagem com as pilhas includas no sentido em que inclui uma extensa lista de mdulos. Library Reference em parte dos mdulos disponveis, para ver a lista completa consultar a Python
http://docs.python.org/lib/lib.html.
math
cos, tan, asin, acos, atan, atan2), funes trigonomtricas hiperblicas (sinh, cosh, tanh), raiz quadrada (sqrt), exponenciao (exp, pow ), logaritmos (log , log10), bem como as constantes e e pi.
O mdulo
cmath
semelhante ao
math,
math
apenas
cmath
Listagem 7.1:
cmath . s q r t ( 1 . 0 )
sys.argv
sys.stdin, sys.stdout
vamente. A funo
sys.stderr
esto ligados entrada padro, sada padro e sada de erros padro respecti-
sys.exit()
23
7 A biblioteca padro
7.3 O mdulo os
O mdulo
os
forma portvel.
import
x = y = [] [] r
csv
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
in
reader :
24
Captulo
http://www.scipy.org/.
8.1 Numpy
O numpy uma extenso do Python que adiciona suporte para vectores e matrizes multi-dimensionais, bem como uma srie de funes que operam nesses objectos. O numpy est documentado exaustivamente num livro gratuito, disponvel 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 ] )
a.ndim: Nmero de dimenses a.shape: Tuplo com o nmero de elementos de cada dimenso
25
a.size: Nmero total de elementos do array a.dtype: Tipo de dados. Ver a tabela 8.1 para uma lista de tipos de dados.
Podemos criar um array inicializado a zero com a funo zeros: Listagem 8.2:
#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 )
import
numpy
as
np
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 ] )
np . g r e a t e r ( x , y )
#Imprime [ True F a l s e F a l s e
True ]
26
ex
Logaritmo natural Logaritmo base 10 Raiz quadrada
x2 1/x
Funes trignomtricas Funes trignomtricas inversas arctan(x1/x2) considerando os sinais de x1 e x2
x2 + x2 1 2
Funes trignomtricas hiperblicas Funes trignomtricas hiperblicas inversas Elemento mximo Elemento mnimo Parte real ou imaginria
d2 U dU =k 2 dt dx
usando o algoritmo de diferenas nitas FTCS (Forward Time Centered Space). Este mtodo no o ideal para resolver a equao do calor devido s suas limitaes em termos de critrios de convergncia, mas uma forma simples de ilustrar o uso de diferenas nitas. Variando o ndice o ndice i sobre a coordenada
j
j
sobre a coordenada
t,
x,
temos
Uij+1 = Uij +
dt = 0 . 0 5 dx = 0 . 5
27
1 0 . 0 , 1 0 . 0 , dx )
t = np . a r a n g e ( 0 . 0 , 1 0 . 0 , d 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 ) = u xrange ( 1 , nt ) : += ( k * d t / dx * * 2 ) * ( = u \ u[: sol [0 ,:]
for
in
u[1:
1]
2 ] 2.0 * u [ 1 : 1 ]
+ u[2:])
sol [ i , : ]
p y l a b . imshow ( s o l , o r i g i n =" l o w e r " , a s p e c t=" a u t o " , e x t e n t =(x [ 0 ] , x [ pylab . c o l o r b a r ( ) pylab . x l a b e l ( "x" ) pylab . y l a b e l ( " t " ) p y l a b . show ( )
1] , t [ 0 ]
, t[
1]))
0.90
8 0.75
0.60
0.45 4
0.30
2 0.15
0 -10
-5
0 x
0.00
29
for
8.2 Scipy
O scipy complementa o suporte de vectores multidimensionais do numpy com mdulos com rotinas gerais para clculo nmerico como minimizao, integrao, transformadas de Fourier rpidas e outras tarefas comuns.
8.2.1 optimize
Rotinas gerais de optimizao e minimizao.
Mtodo fmin fmin_powell fmin_cg fmin_bfgs fmin_ncg leastsq fsolve brentq bisect newton
Descrio Algoritmo simplex Nelder-Mead Powell's (modied) level set method Algoritmo de gradiente conjugado no linear Mtodo quasi-Newton (Broydon-Fletcher-Goldfarb-Shanno) Gradiente conjugado usando o mtodo de Newton Mtodo dos mnimos quadrados Clculo de zeros de uma funo Interpolao quadrtica pelo mtodo de Brent Mtodo da bisseco Mtodo de Newton Tabela 8.4: Alguns mtodos de scipy.optimize
8.2.2 stats
Um conjunto de distribuies de probabilidade incluindo por exemplo as distribuies 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.2.4 signal
Rotinas de processamento de sinal Mtodo convolve correlate tconvolve bspline medlt sawtooth square boxcar triang gaussian hann hamming Descrio Convoluo Correlao Convoluo usando transformadas de Fourier rpidas B-splines Filtro median Onda dentes de serra Onda quadrada Janela boxcar Janela triangular Janela gaussiana Janela de Hann Janela de Hamming Tabela 8.6: Alguns mtodos de scipy.signal
8.2.5 tpack
Transformadas de Fourier rpidas Mtodo t / it tn / itn tshift hilbert / ihilbert di Descrio Transformada de Fourier 1D Transformada de Fourier multidimensional Muda a frequncia zero para o centro do espectro Transformada de Hilbert Derivao de sequncias peridicas Tabela 8.7: Alguns mtodos de scipy.tpack
31
8.2.6 integrate
Integrao e resoluo de equaes diferenciais ordinrias Mtodo quad dblquad tplquad xed_quad quadrature romberg trapz / simps / romb odeint / ode Descrio Rotina geral de integrao Rotina geral para clculo de integrais duplos Rotina geral para clculo de integrais triplos Quadratura Gaussiana Quadratura Gaussiana com tolerncia xa Quadratura de uma funo pelo mtodo de Romberg Quadratura de valores igualmente espaados Resoluo de um sistema de equaes diferencias ordinrias
8.2.7 outras
Para alm dos componentes do scipy apresentados acima, destacam-se:
interpolate - Interpolao usando splines linsolve - Resoluo de sistemas de equaes lineares sparse - Matrizes esparsas special - Funes especiais (Airy, elpticas, erf, Bessel, gamma, Hankel, Legendre, etc.)
Este resumo no uma descrio exaustiva das funcionalidades do scipy. Para uma descrio completa consulte a documentao desta biblioteca.
8.3 VPython
O VPython, ou Visual Python (http://vpython.org/), uma biblioteca Python que permite criar grcos 3D interactivos particularmente apropriados para demonstraes de princpios fsicos. Listagem 8.5:
from
visual
import *
\ \ c o l o r=c o l o r . r e d )
possvel rodar a gura mantendo o boto direito do rato premido sobre a janela e movendo-o. tivos objectos. Procedendo da mesma maneira com o boto do meio As chamadas permite-nos ampliar ou reduzir.
box
sphere
criam os respec-
32
33
ellipsoid(pos=<ponto>, length=<n>, height=<n>, width=<n>) ring(pos=<ponto>, axis=<vec>, radius=<n>, thickness=<n>) helix(pos=<ponto>, axis=<vec>, radius=<n>) label(pos=<ponto>, text= Texto ) curve([<ponto1>,<ponto2>,...],radius=<n>)
8.3.1 Vectores
O VPython suporta o tipo vector. Listagem 8.6:
from
visual
import *
8.3.2 Objectos
Na tabela 8.9, sendo
<ponto>
<n>
<vec>
um nmero real.
8.4 matplotlib
O matplotlib uma biblioteca que produz grcos 2D de elevada qualidade, disponvel em
http://matplotlib.sourceforge.net/,
8.4.1 plot
import import
pylab numpy as np
34
1.2
sinc(x)
1.0
0.8
0.6
0.4
0.2
0.0
-0.2
-0.4 -30
-20
-10
0 x
10
20
30
x = np . a r a n g e (
y = np . s i n ( x ) / x p y l a b . p l o t ( x , y , l a b e l =" s i n c ( x ) " ) pylab . x l a b e l ( "x" ) pylab . y l a b e l ( "y" ) pylab . legend ( ) pylab . g r i d ( ) p y l a b . show ( )
8.4.2 subplot
import import def
pylab numpy as np
g r a f i c o (m) : x = np . a r a n g e (
35
1.0 0.5 0.0 -0.5 -1.0 -10 1.0 0.5 0.0 -0.5 -1.0 -10
m=1
1.0 0.5 0.0 -0.5 -1.0 -10 1.0 0.5 0.0 -0.5 -1.0 -10
m=2
-5
10
-5
10
m=3
m=4
-5
10
-5
10
for
in
range ( 4 ) :
8.4.3 hist
import import import
pylab numpy as np as random numpy . random
8.4.4 scatter
import
pylab
36
700
600
500
400
300
200
100
0 -4
-3
-2
-1
37
-1
-2
-3 -1.5
-1.0
-0.5
0.0
0.5
1.0
1.5
import import
n = 100
numpy
as
np as random
numpy . random
8.4.5 imshow
import import
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 =[ \ \ pylab numpy as np
x = np . a r a n g e (
38
0.8 0.6
0.4 0.2
0.0 -0.2
-2
-0.4 -0.6
-4
-0.8 -1.0
-4
-2
39
y (x)
NetCDFFile(cheiro,modo) - Abre um cheiro para leitura (modo r), escrita (modo w) ou para acrescentar dados (modo a). netCDF tm usualmente a extenso .nc. com esta funo, como por exemplo le = NetCDFFile(teste.nc,w) Os cheiros Para um dado cheiro aberto
temos os mtodos
le.createDimension(dimensao,tamanho) - O NetCDF dene todos os valores em termos de dimenses, pelo que antes de se poderem criar quaisquer variveis necessrio criar primeiro as dimenses que elas usam.
le.dimensions - Dicionrio com todas as dimenses e respectivos tamanhos le.createVariable(nome,tipo,dimensoes) - Cria uma varivel onde vo poder ser armazenados dados. Os parmetros so o nome da varivel, o tipo (f - real preciso simples, d - real preciso dupla, i - inteiro, l inteiro longo, c - caracter, b - byte) e dimensoes um tuplo com os nomes das dimenses desta varivel.
40
le.variables - Dicionrio contento todas a variveis, e respectivos valores. Para obter um array x com os valores da varivel x usariamos: x = le.variables[x][:]
Podemos aceder e criar atributos globais do cheiro netCDF acedendo propriedade respectiva de le. Por exemplo, para criar o atributo nome com o valor teste: le.nome = teste Podemos ler os cheiros resultantes com qualquer programa que suporte o formato netCDF, como o ncview (http://meteora.ucsd.edu/~pierce/ncview_
home_page.html). O conjunto de programas NCO (netCDF Operators), disponvel em http://nco.sourceforge.net/, til para manipular estes cheiros.
41
Captulo
Concluso
A linguagem Python torna a programao mais fcil, no limitando o utilizador. Para aprender mais acerca do Python pode consultar:
A documentao ocial (http://python.org/doc/) muito completa e legvel, incluindo um tutorial de introduo linguagem, bem como referncias exaustivas da linguagem e biblioteca padro.
net/thinkCSpy/
http://openbookproject.
expe
http://diveintopython.org/
O livro Learning Python de Mark Lutz da editora O'Reilly, actualmente na 3 edio, um livro introdutrio muito completo e repleto de exemplos.
Em relao s outras bibliotecas utilizadas, todas elas esto documentadas nos prprios mdulos (docstrings) e nos respectivos stios web:
guidetoscipy.html.
http://www.tramy.us/
O matplotlib (http://matplotlib.sourceforge.net/) tem um manual de utilizador extenso, um guia de referncia de todas as funcionalidades disponibilizadas e exemplos de utilizao.
A documentao do scipy mais limitada, estando em curso esforos para a melhorar. docstrings. Entretando, a melhor documentao deste mdulo a das
42