Introdução à linguagem de
programação
Python
1
1Departamento de Ciência da
Computação Universidade Federal de
São João del Rei
XIV Semana de Computação da
UFJF
Introdução à linguagem de programação
Sobre a
linguagem
Criada por Guido van Rossum em 1991
Origem do nome: grupo de humoristas
Monty Python
Linguagem de altíssimo nível
(VHLL) Sintaxe simples e fácil de
ser assimilada Fácil de usar,
aprender, ler
Orientada à objetos, estruturada e
funcional Tipagem forte e dinâmica
Interpretada
Ambiente
interativo
Introdução à linguagem de programação
Mais sobre a
linguagem
Extremamente portável (Multiplataforma)
Unix/Linux, Windows, Mac, PalmOS, WindowsCE,
RiscOS, VxWorks, QNX, OS/2, OS/390, AS/400,
PlayStation, Sharp Zaurus, BeOS, VMS...
Compila para byte code
compilação implícita e automática
Gerenciamento automático memória (Garbage
Collector) Poderosas estruturas de dados nativas
Listas
Dicionário
s
Licença GPL-
compatível
Introdução à linguagem de programação
Ainda mais sobre a
linguagem
Tudo é objeto
Pacotes, módulos, classes,
funções Tratamento exceções
Sobrecarga de operadores
Identação para estrutura de
bloco
O resto é sintaxe
convencional
Introdução à linguagem de programação
Por que usar
Python?
Uma das linguagens mais divertidas que
se tem atualmente
Já vem com “baterias inclusas” (vasto
repertório de bibliotecas)
Protótipos rápidos sem preocupação com
detalhes de implementação da linguagem
Linguagem Interpretada: evita “codifica-
compila-roda”
Bem menos linhas de código comparando
com Java, C/C++...
Introdução à linguagem de programação
Quem
usa?
Google (vários
projetos) NASA
(vários projetos)
RedHat (ferramentas instalação Linux)
Muitas Universidades, como MIT, e
Stanford Globo.com
Introdução à linguagem de programação
Vamos
Começar!
Esqueça declarações de tipos de
variáveis Esqueça begin e end
Esqueça
{e}
Esqueça ;
Se você já era organizado, não
sofrerá! A identação é
obrigatória! :)
Introdução à linguagem de programação
Shell
Interativa
Ótimo para aprender sobre a
linguagem Experimentar
bibliotecas
Testar novos
módulos Usar como
calculadora
Exemplos
>> print "opa!"
opa!
>> x = 2 ** 3
>> x / 2
4
>> Introdução à linguagem de programação
Tipos de dados
básicos
Números: int, long, float,
complex Strings, Unicode:
imutáveis Tuplas: imutáveis
Listas, dicionários e
conjuntos: “containers”,
mutáveis
Introdução à linguagem de programação
Variáveis
Numéricas
São tipos
imutáveis:
num_int = 13
num_int_long =
13L num_real =
13.0
Introdução à linguagem de programação
String
s
São imutáveis
Armazenam texto (conjuntos de
caracteres) Crescem até o limite da
memória Substituem char e vetor de
char
Acesso sequencial, em fatias ou direto por
índice Implementadas com arrays
Possuem diversos métodos: procurar, contar,
mudar caixa, etc.
Introdução à linguagem de programação
String -
Exemplos
>>"hello"+"world" # concatenação
’helloworld’
>>"hello"*3 #repetição
’hellohellohello’
>>"hello"[0]
’h’
>>"hello"[-1] # (do final)
’o’
>>"hello"[1:4] # "slicing"
’ell’
>>len("hello") # tamanho
5
>>"hello" < "jello" # comparação
True
>>"e" in "hello" # busca
True
Introdução à linguagem de programação
String -
Métodos
Principais métodos: split, count, index, join,
lower, upper, replace
split()
var = ’o guia do mochileiro das galaxias’
print var.split()
Saída
[’o’, ’guia’, ’do’, ’mochileiro’, ’das’, ’galaxias’]
count()
var = ’o guia do mochileiro das galaxias’
print var.count(’guia’)
Saíd
a 1
Introdução à linguagem de programação
String -
Métodos
join()
var = ’o guia do mochileiro das galaxias’
var2 = var.split()
print "/".join(var2)
Saída
o/guia/do/mochileiro/das/gala
xias
Introdução à linguagem de programação
Listas e
tuplas
Armazenam coleções de objetos
heterogêneos Crescem até o limite da
memória
vetores, matrizes, registros e listas
encadeadas Acesso sequencial, em fatias
ou direto por índice Implementadas com
arrays
Possuem diversos métodos: adicionar, remover,
ordenar, procurar, contar
Listas são mutáveis e tuplas são imutáveis
Listas são delimitadas por [ e ] e tuplas são
delimitados por ( e )
Introdução à linguagem de programação
Tupla
s
Exemplo
tupla = (’MG’, ’Juiz de Fora’)
print tupla[1]
Saída
Juiz de Fora
Introdução à linguagem de programação
Lista
s
Arrays flexíveis
a = [98, "bottles of beer", ["on", "the",
"wall"]]
Operações comuns
a+b, a*3, a[0], a[-1], a[1:], len(a)
Item e slice
a[0] -> 98
a[1:2] -> ["bottles", "of",
"beer"] del a[-1]
-> [98, "bottles", "of",
"beer"]
Introdução à linguagem de programação
Lista
s
Exemplo
a = range(5)
print a
a.append(5)
print a
a.insert(0, 42)
print a
a.reverse()
print a
a.sort()
print a
Saída
[0, 1, 2, 3, 4]
[0, 1, 2, 3, 4, 5]
[42, 0, 1, 2, 3, 4, 5]
[5, 4, 3, 2, 1, 0, 42]
[0, 1, 2, 3, 4, 5, 42]
Introdução à linguagem de programação
Dicionári
os
Armazenam pares chave/valor de forma
desordenada Crescem até o limite da
memória
Acesso sequencial, em fatias ou direto pela
chave Implementados com tabelas hash
Possuem diversos métodos: adicionar, remover,
procurar, contar
Introdução à linguagem de programação
Dicionári
os
Exemplo
>>>estoque = {’peras’: 5, ’laranjas’: 2}
>>>estoque[’peras’]
5
>>>estoque[’peras’]
= 4
>>>estoque[’bananas
’] = 2
>>>estoque.get(’melancias’,’Em falta’)
’Em falta’
>>>estoque
{’bananas’: 2, ’laranjas’: 2, ’peras’:
4}
>>>’uvas’ in estoque
False
>>>estoque.has_key(’
bananas’)
True
>>>estoque.items()
[(’laranjas’, 2),
(’bananas’, 2),
(’peras’, 4)] Introdução à linguagem de programação
Sintax
e
Variáveis
Identificadores: (underscore ou letra) + (qualquer
número de dígitos ou underscores)
Case sensitive (Var /= var)
Nomes são criados quando atribuídos pela primeira
vez Nomes devem ser atribuídos antes de serem
referenciados spam = ’Spam’ #basico
spam, ham = ’yum’, ’YUM’ #tupla
spam = ham = ’lunch’ #multiplo
spam + foo #Erro!!
Introdução à linguagem de programação
Sintax
e
Atribuição
Atribuição manipula referências
x = y não faz uma cópia de y
x = y faz x referenciar ao objeto que y
referencia
Bastante útil e eficiente, mas cuidado!
Exemplo:
>>> a = [1, 2, 3]
>>> b = a
>>> a.append(4)
>>> print b
[1, 2, 3, 4]
Para obter um novo objeto, ao invés de uma
referência para um objeto existente deve-se
usar o módulo copy Introdução à linguagem de programação
Atribuição -
Exemplo
Introdução à linguagem de programação
Atribuição - Outro
Exemplo
Introdução à linguagem de programação
Formatando a
saída
>>> print "numeros: %d e %05d" % (1,2)
numeros: 1 e 00002
print "Linguagem: %s" % ’Python’
Linguagem: Python
Introdução à linguagem de programação
Estruturas de
Controle
If-Else-If-
If-Else Else
if exp: if exp:
#comandos
#comandos elif exp:
else: #comandos
#comandos else:
#comandos
Introdução à linguagem de programação
Estruturas de
Controle
For While
for num in range(200): while exp:
print num #comandos
if exp:
break
For
elif
for letra in ’python’:
exp:
print letra
c
ontin
ue
#coma
ndos
Introdução à linguagem de programação
list comprehensions e
Generators
list comprehensions
pares = [i for i in range(100) if (i%2) == 0]
impares = [i for i in range(100) if (i%2) != 0]
lista_zeros = [0 for i in range(10)]
matriz = [ [ 0 for j in range(3) ] for i in
range(5)]
Generators
pares = (i for i in range(100) if (i%2) == 0)
print pares.next() #0
print pares.next() #2
soma_impares = sum (i for i in range(100) if (i
%2) != 0)
Introdução à linguagem de programação
Funções e
procedimentos
def nome(arg1, arg2, ...):
"""Documentacao"""
#comandos
return
#procedimento
return expressao
#funcao
Exemplo
def exemplo(a,b,c):
"""Soma tres valores"""
return a + b + c
>>> exemplo(5,1,3)
9
Introdução à linguagem de programação
Passagem de
parâmetros
def changer (x,y):
x = 2 #modifica x local apenas
y[0] = ’hi’#modifica o objeto compartilhado
Introdução à linguagem de programação
Argumentos
Opcionais
É possível definir argumentos defaults que não
precisam ser passados
def func(a, b, c=10, d=100):
print a, b, c, d
>>> func(1,2)
1 2 10 100
>>> func(1,2,3,4)
1,2,3,4
Introdução à linguagem de programação
Argumentos
Opcionais
Aviso Importante: O valor default é avaliado apenas
uma vez. Isso faz uma diferença quando o default
é um objeto mutável como uma lista, dicionário,
ou instâncias de classes. Por exemplo, a seguinte
função acumula os argumentos passados em
chamadas subsequentes:
def f(a, L=[]):
L.append(a)
return L
>>>print f(1)
[1]
>>>print f(2)
[1, 2]
>>>print f(3)
[1, 2, 3] Introdução à linguagem de programação
Argumentos
Opcionais
Para que esse problema não aconteça você pode
escrever a função anterior da seguinte forma:
def f(a, L=None):
if L is None:
L = []
L.append(a)
return L
Introdução à linguagem de programação
Algumas funções
úteis
dir() -> lista atributos de um objeto
help() -> help interativo ou help(objeto), info.
sobre objeto type() -> retorna tipo do objeto
raw_input() -> prompt de entrada de
dados int(), str(), float()... ->
typecast
chr(), ord() -> ASCII
max(), min() -> maior e menor de
uma string, lista ou tupla
Introdução à linguagem de programação
Módulo
s
Um módulo é um arquivo contendo definições de
Python e declarações.
O nome do arquivo é o nome do módulo com o
sufixo ’.py’ anexado.
Dentro de um módulo, o nome do módulo
(como uma string) está disponível como o
valor da variável global
name .
Introdução à linguagem de programação
Módulo
s
fibo.py
# modulo Fibonacci
def fib(n):
"""Escreve a serie de Fibonacci ate n"""
a, b = 0, 1
while b < n:
print b,
a, b = b, a+b
def fib2(n):
"""Retorna a serie de Fibonacci ate n"""
result = []
a, b = 0,
1
while b <
n:
result.append(b)
a, b = b, a+b
return result
if name ==" main
": fib(10)
Introdução à linguagem de programação
Módulos e
funções
Exempl
o
>>> import fibo
>>> fibo.fib(1000)
1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987
>>> fibo.fib2(100)
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
>>> fibo. name
’fibo’
>>> help(fibo)
Help on module
fib:
NAME
fibo
FILE
fibo.py
FUNCTIONS
fib(n)
Escreve a
serie de
Fibonacci
ate n
fib2(n)
Retorna a
serie de
Fibonacci
ate n Introdução à linguagem de programação
Exceçõe
s
Informar que uma condição anormal
ocorreu
a = [ 1, 2, 3 ]
try:
print a[5]
except IndexError:
print "Posicao
inexistente!"
finally:
print "Fim do teste"
Introdução à linguagem de programação
Manipulando
Arquivos
Lendo arquivos
arq = open(’teste.txt’, ’r’) #rb
for linha in arq:
print linha
arq.close()
Escrevendo
arquivos
arq = open(’teste.txt’,
’w’)#’a’,’r+’,’w+’,’a+’ arq.write(’linha1\n’)
arq.write(’linha2
\n’) arq.close()
Introdução à linguagem de programação
Manipulando
Arquivos
Alguns Métodos:
read([nbytes]), readline(),
readlines() write(string),
writelines(list) seek(pos[,
how]), tell()
flush(), close()
Introdução à linguagem de programação
Programa
exemplo
Conta palavras
Pedir
Arquivo
Ler Arquivo
Contar quantas
vezes
aparece
cada
palavra
Listar as palavras em ordem alfabética, junto com o
seu número de repetições no texto
Introdução à linguagem de programação
Programa
Exemplo
Conta palavras
p_count = {}
arqnom = raw_input(’Digite o nome do Arquivo: ’)
arq = open(arqnom, ’r’)
for linha in arq:
palavras = linha.split()
for palavra in palavras:
p_count[palavra] = p_count.get(palavra,0) + 1
arq.close()
palavras = p_count.keys()
palavras.sort()
for palavra in palavras:
print ’Palavra: %s, Quantidade: %05i’ %
(palavra, p_count[palavra])
Introdução à linguagem de programação
Grafos com
dicionários
Podemos utilizar dicionários para representar
diversos tipos de dados, inclusive grafos!
grafo = {’A’: [’B’,’C’], ’B’: [’A’,’C’,’D’], ’C’: [’A’,’B’], ’D’: [’B’]}
Introdução à linguagem de programação
Grafos com
dicionários
Achar caminho
def ache_caminho(grafo, inicio, final, caminho=None):
if caminho is None:
caminho = []
caminho = caminho +
[inicio]
if inicio == final:
return caminho
for nodo in grafo[inicio]:
if nodo not in caminho:
novocaminho = ache_caminho(grafo, nodo, final,
caminho)
if novocaminho:
return novocaminho
return None
Introdução à linguagem de programação
Grafos com
dicionários
Exemplo
>>> ache_caminho(grafo, ’A’, ’D’)
[’A’, ’B’, ’D’]
>>> ache_caminho(grafo, ’A’, ’D’)
[’A’, ’B’, ’D’]
>>> ache_caminho(grafo, ’D’, ’C’)
[’D’, ’B’, ’A’, ’C’]
Introdução à linguagem de programação
Classe
s
class Matriz(object):
nome_da_classe = "Matriz"
def init (self, n, m):
self.matriz = [[None for j in range(m)] for i in range(n) ]
Introdução à linguagem de programação
Classe
s
class Matriz(object):
nome_da_classe = "Matriz"
def init (self, n, m):
self.matriz = [[None for j in range(m)] for i in range(n) ]
def getitem (self, i):
return self.matriz[i]
Introdução à linguagem de programação
Classe
s
class Matriz(object):
nome_da_classe = "Matriz"
def init (self, n, m):
self.matriz = [[None for j in range(m)] for i in range(n) ]
def getitem (self, i):
return self.matriz[i]
Introdução à linguagem de programação
Classe
s
class Matriz(object):
nome_da_classe = "Matriz"
def init (self, n, m):
self.matriz = [[None for j in range(m)] for i in range(n) ]
self.linhas = n
self.colunas = m
def getitem (self, i):
return self.matriz[i]
def add (self, b):
c =
Matriz(self.linhas,
self.colunas)
for i in
range(self.linhas):
for j in range(self.colunas):
c[i][j] = self[i][j] + b[i][j]
return c
@staticmethod
def nome():
Introdução à linguagem de programação
Classe
s
from matriz import Matriz
if name == " main
": a = Matriz(2,2)
b = Matriz(2,2)
print Matriz.nome()
for i in range(a.linhas):
for j in range(a.colunas):
a[i][j] = i
b[i][j] = j
c = a+b
print c.matriz
print a.matriz
print
b.matriz
Introdução à linguagem de programação
Monkey patch
from matriz import Matriz
def sub(self, b):
c = Matriz(self.linhas, self.colunas)
for i in range(self.linhas):
for j in range(self.colunas):
c[i][j] = self[i][j] - b[i][j]
return c
if name == " main
": a = Matriz(2,2)
b = Matriz(2,2)
for i in range(a.linhas):
for j in range(a.colunas):
a[i][j] = i
b[i][j] = j
Matriz. sub = sub c
= a-b
print c.matriz
print a.matriz
print b.matriz
Introdução à linguagem de programação
Threading
import threading
t1 = threading.Thread(target=funcao,args=())
t1.start()
...
t1.join()
sem = threading.Semaphore(2)
sem.acquire()
...
sem.release()
Introdução à linguagem de programação
Sockets
Comunicação entre
processos Cliente
Endereço e porta de
conexão
Servidor
Endereço e porta de
escuta
Comunicaç
ão
read()
write()
Introdução à linguagem de programação
Sockets
Cliente
from socket import socket, AF_INET, SOCK_STREAM
HOST = ’localhost’
PORT = 2223
s = socket(AF_INET, SOCK_STREAM)
s.connect((HOST, PORT))
s.send(’Mensagem do Cliente!’)
data = s.recv(1024)
print data
s.close()
Servidor
from socket import socket,
AF_INET, SOCK_STREAM
HOST = ’’
PORT = 2223
s = socket(AF_INET, SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(1) # Numero de Conexoes
conn, addr = s.accept()
data = conn.recv(1024)
print data
conn.send(’Mensagem do
Servidor!’)
conn.close()
Introdução à linguagem de programação
DBM
anydb
m dumbdbm (lenta e limitada, todas
plataformas) dbm (somente em UNIX)
gdbm (somente em UNIX)
dbhash (biblioteca BSD, em UNIX e
Windows)
Exemplo
import anydbm
db = anydbm.open(’db.dat’,’c’)
db[’she’] = ’ela’
db[’he’] = ’ele’
for k, v in db.iteritems():
print k, ’\t’, v
db.close()
Introdução à linguagem de programação
Bancos de
dados
Os bancos possuem uma API
padrão Conexão
Cursor
Comandos SQL
Commit (Finaliza a
operação)
Exemplo
import sqlite3
db = sqlite3.connect(’test.db’)
cur = db.cursor()
cur.execute(’create table
empresa (cod numeric not
null, \
des character not null, primary key (cod))’)
cur.execute(’insert into empresa values(1,"empresa teste")’)
db.commit()
cur.execute(’select * from empresa
order by des’) result = cur.fetchall()
for regs in result:
print regs
Introdução à linguagem de programação
Interfaces
Gráficas
Tkinter - Padrão
wxPython (antiga
wxWindows)
GTK no Linux
MFC no
Windows
pyGT
K
pyQt
pyFLT
K,
FxPy,
Anyg
Introdução à linguagem de programação
NumPy e
matplotlib
from numpy import *
import matplotlib.pyplot as plt
x = array([1,2,3,4,5])
y = array([6, 11, 18, 27, 38])
p1 = poly1d(polyfit(x,y,2))
p2 =
poly1d(polyfit(x,y,1))
y1 = p1(x)
y2 =
plt.plot(x,
p2(x) y, ’bo’, x, y1, x, y2)
Poderoso array N-dimensional de plt.show()
objetos integração com código
C/C++ e Fortran funções de
álgebra linear, etc...
Introdução à linguagem de programação
Sag
e
Aplicativo de matemática GPL
Combina o poder de muitos pacotes de código
aberto existentes em uma interface Python
comum
Missão: Criar uma alternativa livre e de código
aberto para Magma, Maple, Mathematica e Matlab
Introdução à linguagem de programação
pyOD
E
PyODE é um binding de ODE para Python
ODE: simulação da dinâmica de objetos
rígidos Detecção de colisão com fricção
Simulação de veículos, objetos e criaturas em
ambientes virtuais
Jogos de computador, ferramentas de autoria
3D e de simulação
Introdução à linguagem de programação
PyOpenG
L
PyOpenGL: binding de OpenGL para Python
OpenGL: API livre utilizada na computação
gráfica
Desenvolvimento de aplicativos gráficos,
ambientes 3D, jogos, entre outros
Introdução à linguagem de programação
PIL
suporte à abertura, gravação e manipulação de
muitos formatos de imagem diferentes
Introdução à linguagem de programação
Pygle
t
Desenvolvimento de jogos e outras
aplicações visualmente ricas
Suporte para eventos de mouse e
teclado
Pode carregar diversos formatos de
arquivos de multimídia Introdução à linguagem de programação
Pygam
e
Módulo multi-plataforma projetado para
escrever jogos. Inclui bibliotecas de
computação gráfica e de som.
construída sobre a biblioteca SDL
(Simple DirectMediaLayer) Introdução à linguagem de programação
Panda3
D
Motor de jogo 3D escrito em C++ para ser
usado com Python
Desenvolvido pela Disney e Carnegie Mellon
University’s Entertainment Technology Center
Possui motor de física, texturas animadas,
suporte
shaders ae som 2D e
3D
Introdução à linguagem de programação
AIM
A
Código em Python dos algoritmos do livro
Artificial Intelligence: a Modern Approach,
de Peter Norvig
O livro-texto apresenta osIntrodução
algoritmos em
à linguagem de programação
Network
X
Criação, manipulação e estudo da estrutura,
dinâmica e funções das redes complexas
E adequada para operações em grandes grafos do
mundo real
Pode ser usada para análise de redes
Introdução à linguagem de programação
Twiste
d
Framework de rede de código aberto escrito
inteiramente em Python
Permite a criação de proxiesHTTP e servidores
SSH (e mais) em Python com o mínimo esforço
É assíncrono e orientado a eventos
Introdução à linguagem de programação
Pyr
o
Comunicação de objetos em rede de forma
simples Acesso a objetos em diferentes
máquinas na rede Lembra Java Remote
Method Invocation (RMI).
Introdução à linguagem de programação
Onde buscar mais
informação?
http://www.python.org
http://docs.python.org
http://www.pythonbr
asil.com.br
http://www.pythonology.co
m/
http://www.google.com :)
Introdução à linguagem de programação