Você está na página 1de 29

Curso relˆampago de Python

Fernando Rozenblit

Departamento de F´ısica - UFPE

4 de julho de 2011

What is Python? • Linguagem de alto n´ıvel (“scripting”) • Busca elegˆancia e simplicidade (leg´ıvel

What is Python?

Linguagem de alto n´ıvel (“scripting”)

Busca elegˆancia e simplicidade (leg´ıvel ao inv´es de “esperta”)

“There should be one – and preferably only one – obvious way to do it” (The Zen of Python)

de “esperta”) • “There should be one – and preferably only one – obvious way to
Why Python? “I wrote 20 short programs in Python yesterday. It was wonderful. Perl, I’m

Why Python?

“I wrote 20 short programs in Python yesterday. It was wonderful. Perl, I’m leaving you.”

Como executar

Scripts em Python podem ser executados de maneira interativa (no terminal Python):

Como executar Scripts em Python podem ser executados de maneira interativa (no terminal Python): ou via

ou via terminal:

Como executar Scripts em Python podem ser executados de maneira interativa (no terminal Python): ou via

Principais diferen¸cas

Espa¸co em branco

Espa¸cos s˜ao importantes para delimitar blocos! (Conven¸c˜ao:

4 espa¸cos)

C/C++

if

(condicao)

{

faca_algo();

faca_mais_algo();

outra_coisa();

}

Python

if

condicao:

faca_algo()

faca_mais_algo()

outra_coisa()

Final de linha e coment´arios

O final de linha ( ; ) ´e utilizado quando h´a mais de uma express˜ao na mesma linha:

if

condicao:

faca_algo();

faca_mais_algo();

outra_coisa()

Final de linha e coment´arios

O final de linha ( ; ) ´e utilizado quando h´a mais de uma express˜ao na mesma linha:

if

condicao:

 

faca_algo();

faca_mais_algo();

outra_coisa()

Coment´arios s˜ao feitos com #:

 

#

isto

eh

um

comentario

 

#

bla

bla

bla

print

"Ola

mundo!"

#

isto

eh

outro

comentario

Vari´aveis

N˜ao ´e necess´ario declarar uma vari´avel antes de us´a-la:

a

=

"estou

guardando

uma

string"

b

=

(2

+

3

+

4)/3.0

#

a

=

b

*

3

#

e

elas

podem

receber

qualquer

valor!

c

=

True

 

c

=

False

 

#

tipos

booleanos

 

Os tipos mais comuns est˜ao presentes: inteiros, doubles e strings.

Imprimindo na tela

Para imprimir vari´aveis na tela, utilizamos o print. O formato ´e parecido com C/C++:

a

=

(2

+

3

+

4)/3.0

b

=

"oi"

 

#

print

"Voce

 

possui

%g

coisas

de

nome

%s"

%

(a,b)

"oi"   # print "Voce   possui %g coisas de nome %s " % (a,b)

Listas

Um tipo muito usado ´e a lista. Funciona como um vetor:

a "sou

=

uma

string"

b (2

=

+

3

+

4)/3.0

lista

=

["outra",

[a,

b,

"papai

"lista"]

]

noel",

Listas

Um tipo muito usado ´e a lista. Funciona como um vetor:

a "sou

=

uma

string"

b (2

=

+

3

+

4)/3.0

lista

=

[a,

b,

"papai

noel",

["outra",

"lista"]

]

Para acessar os elementos:

print

lista[0]

#

a

print

lista[3]

#

["outra",

"lista"]

print

lista[3][0]

#

"outra"

Iterando a lista (loop com for)

Podemos “caminhar” por todos os elementos de uma lista:

lista = [a, b, "papai noel", ["outra", "lista"] ] for elemento in lista: print
lista
=
[a,
b,
"papai
noel",
["outra",
"lista"]
]
for
elemento
in
lista:
print
elemento
#
imprime
item
por
item
["outra", "lista"] ] for elemento in lista: print elemento # imprime item por item

Lendo arquivos

Para abrir um arquivo para leitura, utilizamos:

f

=

open("arquivo.txt",

"r")

#

abre

para

leitura

#

f.close()

#

fecha

o

arquivo

 

Lendo arquivos

Para abrir um arquivo para leitura, utilizamos:

f

=

open("arquivo.txt",

"r")

#

abre

para

leitura

#

f.close()

#

fecha

o

arquivo

Podemos utilizar o for para ler linha por linha:

#

for

linha

in

f:

print

linha

#

Lendo arquivos

Para abrir um arquivo para leitura, utilizamos:

f

=

open("arquivo.txt",

"r")

#

abre

para

leitura

#

f.close()

#

fecha

o

arquivo

Podemos utilizar o for para ler linha por linha:

#

for

linha

in

f:

print

linha

#

ou simplesmente obter uma string com todas as linhas:

#

texto

=

f.read()

#

Para escrever em um arquivo:

Escrevendo em arquivos

f

=

open("saida.txt",

"w")

#

<<

abre

para

*escrita*

#

a

=

30

b

=

4.5

f.write("a:

%d,

b:

%lf

\n"

%

(a,b)

)

#

semelhante

ao

print

#

f.close()

#

fecha

o

arquivo

Exemplo: m´edia de uma s´erie de dados

Se quisermos tomar a m´edia da primeira coluna em um arquivo de dados:

f = open("entrada.txt", "r") # abre para leitura soma = 0 n = 0 for
f
=
open("entrada.txt",
"r")
#
abre
para
leitura
soma
=
0
n
=
0
for
line
in
f:
# separa
os
valores:
# "23
34
0
2"
->
["23",
"34",
"0",
"2"]
valores
=
line.split()
# soma
o
valor
da
1a
coluna
como
double
soma
+=
float(
valores[0]
)
n
+=
1
print
"A
media
da
1a
coluna:
%lf"
%
soma/n

Exemplo: shuffle de intervalos com NumPy

O que seria complicado em C, se torna comum em Python. Para um shuffle no intervalo entre ocorrˆencias:

import numpy as np import random f = open("entrada.txt", "r") # abre para leitura #
import
numpy
as
np
import
random
f
=
open("entrada.txt",
"r")
#
abre
para
leitura
#
carrega
um
vetor
de
intervalos
a
partir
do
arquivo
delays=np.loadtxt(f,
unpack=False)
random.seed(23283423)
#
inicia
o
gerador
for
i
in
xrange(10):
#
loop
10
vezes
random.shuffle(delays)
#
embaralha
os
intervalos
for
delay
in
delays:
#
finalmente
os
imprime
print
delay

Exemplo: recebendo parˆametros da linha de comando

Para receber parˆametros:

parˆametros da linha de comando Para receber parˆametros: import sys # biblioteca de interacao com o
import sys # biblioteca de interacao com o sist. if (len(sys.argv) >= 1): # se
import
sys
#
biblioteca
de
interacao
com
o
sist.
if
(len(sys.argv)
>=
1):
#
se
ha
parametro,
f
=
open(sys.argv[1],
"r")
#
abre
o
arquivo
else:
f
=
sys.stdin
#
ou
utiliza
a
STDIN
#

Definindo fun¸c˜oes

Fun¸c˜oes podem ser definidas das seguintes formas:

def

faca_nada():

 

assovie()

 

def

faca_algo(minha_lista):

 

#

def

repete_algo(minha_lista,

n

=

5):

for

i

in

xrange(n):

 
 

faca_algo(minha_lista)

 

#

para

utilizar:

 

a

=

[1,

2,

3]

repete_algo(a)

#

valor

padrao

n=5

repete_algo(a,10)

Definindo novos tipos (classes!)

Novos tipos (classes) podem ser definidos para abstrair conceitos e organizar fun¸c˜oes:

class V: def neh(self): print "Neh?" def infinito(self, a = "legal"): print "Infinitamente
class
V:
def
neh(self):
print
"Neh?"
def
infinito(self,
a
=
"legal"):
print
"Infinitamente
"
+
a
+
"!"
cara
=
V()
cara.neh()
#
"Neh?"
cara.infinito()
#
"Infinitamente
legal!"
cara.infinito("facil")
#
"Infinitamente
facil!"

Classes

Os objetos podem executar comandos ao serem iniciados:

class

V:

def

init

(self):

 

print

"Djaaaaaaaabo!"

 

#

cara

=

V()

#

"Djaaaaaaaabo!"

#

Exemplo: pˆendulo simples

from math import sin # apenas a funcao sin() class Pendulo: def init (self, v0
from
math
import
sin
#
apenas
a
funcao
sin()
class
Pendulo:
def
init
(self,
v0
=
0.1,
x0
=
0,
g=9.81,
l
=
1.0):
self.t
=
0
self.v
=
v0;
self.x
=
x0
self.g
=
g;
self.l
=
l
def
dxdt(self):
return
self.v
def
dvdt(self):
return
-(self.g
/
self.l)
*
sin(self.x)
def
step(self,dt
=
0.001):
x0,
v0
=
self.x,
self.v
xf
=
x0
+
self.dxdt()
*
dt
vf
=
v0
+
self.dvdt()
*
dt
self.x,
self.v
=
xf,
vf
self.t
+=
dt

Exemplo: pˆendulo simples

from math import sin # apenas a funcao sin() class Pendulo: def init (self, v0
from
math
import
sin
#
apenas
a
funcao
sin()
class
Pendulo:
def
init
(self,
v0
=
0.1,
x0
=
0,
g=9.81,
l
=
1.0):
self.t
=
0
self.v
=
v0;
self.x
=
x0
self.g
=
g;
self.l
=
l
def
dxdt(self):
return
self.v
def
dvdt(self):
return
-(self.g
/
self.l)
*
sin(self.x)
def
step(self,dt
=
0.001):
x0,
v0
=
self.x,
self.v
xf
=
x0
+
self.dxdt()
*
dt
vf
=
v0
+
self.dvdt()
*
dt
self.x,
self.v
=
xf,
vf
self.t
+=
dt
## Para usar: a = Pendulo() for i in xrange(10000): print a.t, a.x, a.v a.step()
##
Para
usar:
a
=
Pendulo()
for
i
in
xrange(10000):
print
a.t,
a.x,
a.v
a.step()

Vari´aveis podem receber fun¸c˜oes:

Geeky stuff

Vari´avel para uma fun¸c˜ao

def

myFunc(x):

 

print

x*2

a

=

myFunc

a(4)

#

8

!

Em C vocˆe n˜ao entenderia de primeira como aqui!

Fun¸c˜oes podem ser parˆametro de outras fun¸c˜oes!

Salva vari´aveis em arquivos:

import

pickle

a

=

[1,

2,

3,

4]

b

=

[5,

6,

7,

8]

c

=

[a,

b,

"hohoho"]

 

#

escreve

em

um

arquivo

f

=

open("saida_pickle.txt",

"w")

pickle.dump(c,

f)

f.close()

Geeky stuff

Pickle/Unpickle

( "saida_pickle.txt" , "w" ) pickle . dump(c, f) f . close() Geeky stuff Pickle/Unpickle

Carrega variaveis de um arquivo:

import

pickle

#

le

de

um

arquivo

#

(pode

ser

rodado

em

outra

janela!)

f

=

open("saida_pickle.txt",

"r")

d

=

pickle.load(f)

 

f.close()

print

d

Geeky stuff

Pickle/Unpickle

, "r" ) d = pickle . load(f)   f . close() print d Geeky stuff

Python 101:

Where to go now?

The Python Tutorial:

Python Lib Reference:

Code like a Pythonista: