V Semana Acadêmica da Computação UCS – Mini-Curso de Python
Mini-Curso
de
Python
Alex Augusto da Luz dos Santos – nowayx@[Link]
V Semana Acadêmica da Computação UCS – Mini-Curso de Python
Histórico
Criada em 1991
Ensino de Programação
Simplicidade e fácil aprendizado
Monty Python Flying Circus
Alex Augusto da Luz dos Santos – nowayx@[Link]
V Semana Acadêmica da Computação UCS – Mini-Curso de Python
Características
Interpretada
Orientada a Objetos
Suporte a outros paradigmas
Estrutural
Funcional
Multiplataforma
Windows, Unix/Linux, MacOS, PalmOS
Fácil integração com outras linguagens
Alex Augusto da Luz dos Santos – nowayx@[Link]
V Semana Acadêmica da Computação UCS – Mini-Curso de Python
Características
Licença GPL-compatível
Tudo é objeto
Fortemente tipada
Tipagem dinâmica
Poderosas estruturas de dados nativas
Listas
Dicionários
Documentação permanece com o código
Alex Augusto da Luz dos Santos – nowayx@[Link]
V Semana Acadêmica da Computação UCS – Mini-Curso de Python
Vamos Começar!
>>> print 'Hello Python!‘
Hello Python!
Alex Augusto da Luz dos Santos – nowayx@[Link]
V Semana Acadêmica da Computação UCS – Mini-Curso de Python
Vamos Começar
Esqueça declarações de tipos de variáveis;
Esqueça begin e end;
Esqueça { e };
Se você já era organizado, não sofrerá!
A identação é obrigatória! : )
Alex Augusto da Luz dos Santos – nowayx@[Link]
V Semana Acadêmica da Computação UCS – Mini-Curso de Python
Variáveis Numéricas
Imutáveis
num_int = 13
num_int_long = 13L
num_real = 13.0
Alex Augusto da Luz dos Santos – nowayx@[Link]
V Semana Acadêmica da Computação UCS – Mini-Curso de Python
Strings
Imutáveis
‘python’ + ‘ powered’
‘python powered’
‘python’ * 3
‘pythonpythonpython’
Alex Augusto da Luz dos Santos – nowayx@[Link]
V Semana Acadêmica da Computação UCS – Mini-Curso de Python
Strings
‘python’[0] ‘python’[4:]
‘p’ ‘on’
‘python’[-2:]
‘python’[2:4] ‘on’
‘th’
Alex Augusto da Luz dos Santos – nowayx@[Link]
V Semana Acadêmica da Computação UCS – Mini-Curso de Python
Strings
Imutáveis
Principais Métodos:
split, count, index, join, lower, upper, replace
var = ‘o guia do mochileiro das galaxias’
[Link]()
['o', 'guia', 'do', 'mochileiro', 'das', 'galaxias']
Alex Augusto da Luz dos Santos – nowayx@[Link]
V Semana Acadêmica da Computação UCS – Mini-Curso de Python
Tuplas
Formadas por elementos de qualquer tipo
Delimitadas por parenteses. ‘(‘ e ‘)’
Imutáveis
>>> tupla = (‘RS’, ‘Rio Grande do Sul’)
>>> tupla[1]
‘Rio Grande do Sul’
Alex Augusto da Luz dos Santos – nowayx@[Link]
V Semana Acadêmica da Computação UCS – Mini-Curso de Python
Listas
Formadas por elementos de qualquer tipo
Delimitadas por colchetes. ‘[‘ e ‘]’
>>> lista = [‘elemento1’, 0, 1, 2, (‘x’, ‘y’)]
>>> [Link]()
>>> lista
[0, 1, 2, [‘x’, ‘y’], ‘elemento1’]
Alex Augusto da Luz dos Santos – nowayx@[Link]
V Semana Acadêmica da Computação UCS – Mini-Curso de Python
Listas
Principais Métodos:
append, count, index, insert, pop, remove,
reverse, sort
lista = []
[Link]('laranja')
[Link]('kiwi')
[Link]()
Alex Augusto da Luz dos Santos – nowayx@[Link]
V Semana Acadêmica da Computação UCS – Mini-Curso de Python
Listas
>>> lista = range(10)
>>> lista
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> max(lista)
9
>>> min(lista)
0
>>> len(lista)
10
>>> sum(lista)
45
Alex Augusto da Luz dos Santos – nowayx@[Link]
V Semana Acadêmica da Computação UCS – Mini-Curso de Python
Entrada de Dados
nome = raw_input(‘digite o seu nome: ‘)
idade = int(raw_input(‘digite a sua idade: ‘)
Alex Augusto da Luz dos Santos – nowayx@[Link]
V Semana Acadêmica da Computação UCS – Mini-Curso de Python
Condições
if exp: if exp:
#comandos #comandos
else: elif exp:
#comandos
#comandos
else:
#comandos
Alex Augusto da Luz dos Santos – nowayx@[Link]
V Semana Acadêmica da Computação UCS – Mini-Curso de Python
Expressões
var1 == var2
var1 != var2
>, <, >=, <=, isinstance(obj, class), is
var1 in var2 # var2 = string, lista, tupla ou dict.
var1 not in var2
Alex Augusto da Luz dos Santos – nowayx@[Link]
V Semana Acadêmica da Computação UCS – Mini-Curso de Python
Repetição
for num in range(200):
print num
for letra in ‘python’:
print letra
Alex Augusto da Luz dos Santos – nowayx@[Link]
V Semana Acadêmica da Computação UCS – Mini-Curso de Python
Repetição
while exp:
#comandos
if exp:
break
elif exp:
continue
#comandos
Alex Augusto da Luz dos Santos – nowayx@[Link]
V Semana Acadêmica da Computação UCS – Mini-Curso de Python
Funções
def exemplo():
pass
def exemplo(a,b,c):
return a + b + c
>>> exemplo(5,1,3)
9
Alex Augusto da Luz dos Santos – nowayx@[Link]
V Semana Acadêmica da Computação UCS – Mini-Curso de Python
Formatando a Saída
>>> print "numeros: %d e %05d" % (1,2)
numeros: 1 e 00002
>>> print "Linguagem: %s" % 'Python'
Linguagem: Python
Alex Augusto da Luz dos Santos – nowayx@[Link]
V Semana Acadêmica da Computação UCS – Mini-Curso de Python
Importante!
import modulo
from modulo import *
dir(modulo) - mostra os métodos de um módulo
dir() - mostra os módulos carregados
help(modulo) - mostra a documentação do
módulo
Alex Augusto da Luz dos Santos – nowayx@[Link]
V Semana Acadêmica da Computação UCS – Mini-Curso de Python
Lendo um Arquivo
arq = open(‘[Link]’, ‘r’)
for linha in [Link]():
print linha
[Link]()
Alex Augusto da Luz dos Santos – nowayx@[Link]
V Semana Acadêmica da Computação UCS – Mini-Curso de Python
Gravando em um Arquivo
arq = open(‘[Link]’, ‘w’) # ** ‘a’,‘r+’,‘w+’,‘a+’
[Link](‘linha1\n’)
[Link](‘linha2\n’)
[Link]()
Alex Augusto da Luz dos Santos – nowayx@[Link]
V Semana Acadêmica da Computação UCS – Mini-Curso de Python
Dicionários
Formados por pares de chave-valor
Chave sempre um valor Imutável!
Delimitados por chaves. ‘{‘ e ‘}’
>>> estoque = {‘peras’: 5, ‘laranjas’: 2}
>>> estoque[‘peras’]
5
>>> estoque[‘peras’] = 4
>>> estoque[‘peras’]
4
Alex Augusto da Luz dos Santos – nowayx@[Link]
V Semana Acadêmica da Computação UCS – Mini-Curso de Python
Dicionários
>>> estoque[‘macas’] = 2
>>> [Link](‘melao’,’nao temos’)
‘não temos’
>>> estoque
{‘macas’: 3, ‘laranjas’: 2, ‘peras’: 5}
Alex Augusto da Luz dos Santos – nowayx@[Link]
V Semana Acadêmica da Computação UCS – Mini-Curso de Python
Dicionários
Principais Métodos:
copy, get, has_key, items, keys, update, values
estoque.has_key('uvas')
False
[Link]()
[('macas', 3), ('laranjas', 2), ('peras', 5)]
Alex Augusto da Luz dos Santos – nowayx@[Link]
V Semana Acadêmica da Computação UCS – Mini-Curso de Python
estados = {‘RS’: ‘Rio Grande do Sul’, ‘SC’:
‘Santa Catarina’, ....}
def imprime_estados():
for uf, des in [Link]():
print ‘Estado: %s - %s’ % (uf, des)
Alex Augusto da Luz dos Santos – nowayx@[Link]
V Semana Acadêmica da Computação UCS – Mini-Curso de Python
Programa
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
Alex Augusto da Luz dos Santos – nowayx@[Link]
V Semana Acadêmica da Computação UCS – Mini-Curso de Python
Contador de Palavras
palavra_count = {}
arqnom = raw_input('Digite o nome do Arquivo: ')
arq = open(arqnom, 'r')
for linha in [Link]():
palavras = [Link]()
for palavra in palavras:
palavra_count[palavra] =
palavra_count.get(palavra,0) + 1
[Link]()
Alex Augusto da Luz dos Santos – nowayx@[Link]
V Semana Acadêmica da Computação UCS – Mini-Curso de Python
Contador de Palavras - Continuação
palavras = palavra_count.keys()
[Link]()
for palavra in palavras:
print 'Palavra: %s, Quantidade: %05i' %
(palavra, palavra_count[palavra])
Alex Augusto da Luz dos Santos – nowayx@[Link]
V Semana Acadêmica da Computação UCS – Mini-Curso de Python
Funções
def exemplo(a,b=5,c=0):
return a + b + c
>>> exemplo(1,2,3) >>> exemplo(5,c=3)
6 13
>>> exemplo(5) >>> exemplo(5,2)
10 7
Alex Augusto da Luz dos Santos – nowayx@[Link]
V Semana Acadêmica da Computação UCS – Mini-Curso de Python
Exceções
try:
arq=open(‘[Link]','r')
print [Link]()
[Link]()
except:
print ‘Erro lendo arquivo [Link]'
Alex Augusto da Luz dos Santos – nowayx@[Link]
V Semana Acadêmica da Computação UCS – Mini-Curso de Python
Exceções
if numero < 10:
raise “Numero menor que zero”
O except vefica a exceção com ‘is’, por isso
strings com o mesmo ‘conteúdo’ não
retornam True
Como solucionar?
Alex Augusto da Luz dos Santos – nowayx@[Link]
V Semana Acadêmica da Computação UCS – Mini-Curso de Python
Exceções
EXCECAO_NUM = “Numero menor que zero”
def verifica(numero):
if numero < 10:
raise EXCECAO_NUM
try:
verifica(numero)
except EXCECAO_NUM:
print “Digite um numero >= que 10!”
except:
print “Erro ao validar numero!”
Alex Augusto da Luz dos Santos – nowayx@[Link]
V Semana Acadêmica da Computação UCS – Mini-Curso de Python
Exceções
try:
arq = open(‘[Link]’, ‘r’)
except:
print “Erro ao ler arquivo”
else:
# Será executado se qnd não houver exceção
le_arquivo()
Alex Augusto da Luz dos Santos – nowayx@[Link]
V Semana Acadêmica da Computação UCS – Mini-Curso de Python
Exceções
try:
algumaCoisa()
finally:
# Será executado sempre! (com ou sem exceção)
outraCoisa()
# Podemos usar except ou finally, nunca os dois!
Alex Augusto da Luz dos Santos – nowayx@[Link]
V Semana Acadêmica da Computação UCS – Mini-Curso de Python
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’]}
Alex Augusto da Luz dos Santos – nowayx@[Link]
V Semana Acadêmica da Computação UCS – Mini-Curso de Python
Grafos com Dicionários
def ache_caminho(grafo, inicio, final, 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
Alex Augusto da Luz dos Santos – nowayx@[Link]
V Semana Acadêmica da Computação UCS – Mini-Curso de Python
Grafos com Dicionários
>>> 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']
Alex Augusto da Luz dos Santos – nowayx@[Link]
V Semana Acadêmica da Computação UCS – Mini-Curso de Python
Classes
class A:
atributo1 = 'atributo1 da classe A'
atributo2 = 'atributo2 da classe A'
def __init__(self, val_ini=1):
"Construtor da classe A"
self.atributo_de_instacia = val_ini
def metodo(self):
print self.atributo_de_instacia
print A.atributo1
Alex Augusto da Luz dos Santos – nowayx@[Link]
V Semana Acadêmica da Computação UCS – Mini-Curso de Python
Classes
>>> import classe1
>>> classe1.A.atributo1
'atributo1 da classe A'
>>> classe1.A.atributo_de_instacia
Traceback (most recent call last):
File "<stdin>", line 1, in ?
AttributeError: class A has no attribute 'atributo_de_instacia‘
>>> classe1.A.atributo2
'atributo2 da classe A'
Alex Augusto da Luz dos Santos – nowayx@[Link]
V Semana Acadêmica da Computação UCS – Mini-Curso de Python
Classes
>>> x = classe1.A()
>>> x.atributo_de_instacia
1
>>> x.outro_atributo = 3
>>> x.outro_atributo
3
>>> [Link]()
1
'atributo1 da classe A'
Alex Augusto da Luz dos Santos – nowayx@[Link]
V Semana Acadêmica da Computação UCS – Mini-Curso de Python
Classes
class A:
atributo = 'atributo da classe‘
def metodo_statico():
print [Link]
metodo_statico = staticmethod(metodo_statico)
Alex Augusto da Luz dos Santos – nowayx@[Link]
V Semana Acadêmica da Computação UCS – Mini-Curso de Python
Classes
>>> import classe2
>>> classe2.A.metodo_statico()
‘atributo da classe‘
>>> x = classe2.A()
>>> x.metodo_statico()
‘atributo da classe‘
Alex Augusto da Luz dos Santos – nowayx@[Link]
V Semana Acadêmica da Computação UCS – Mini-Curso de Python
Classes
hasattr(objeto, nome)
delattr(objeto, nome)
getattr(objeto, nome [, default])
setattr(objeto, nome, valor)
Alex Augusto da Luz dos Santos – nowayx@[Link]
V Semana Acadêmica da Computação UCS – Mini-Curso de Python
Mais sobre Funções
def teste(a,b=0,*c):
print a,b,c
>>> teste(1) >>> teste(1,2,3)
1 0 () 1 2 (3,)
>>> teste(1,2) >>> teste(1,2,3,4)
1 2 () 1 2 (3, 4)
Alex Augusto da Luz dos Santos – nowayx@[Link]
V Semana Acadêmica da Computação UCS – Mini-Curso de Python
Mais sobre Funções
def teste(**d):
print d
>>> teste()
{}
>>> teste(a=1,b=2)
{'a': 1, 'b': 2}
Alex Augusto da Luz dos Santos – nowayx@[Link]
V Semana Acadêmica da Computação UCS – Mini-Curso de Python
Mais Funções (Builtins)
abs, divmod, pow, round
int, long, float, oct, hex, ord, chr, repr, str
cmp, len, id, input, type
>>> dir(__builtins__)
Alex Augusto da Luz dos Santos – nowayx@[Link]
V Semana Acadêmica da Computação UCS – Mini-Curso de Python
Threads
import thread
import time
def t1(a,b,c):
t1id = thread.get_ident()
for i in range(10):
[Link](1)
print t1id, i
thread.start_new_thread(t1, (1,2,3))
Alex Augusto da Luz dos Santos – nowayx@[Link]
V Semana Acadêmica da Computação UCS – Mini-Curso de Python
Threads
var_lock = thread.allocate_lock()
var_lock.acquire()
var_lock.release()
Alex Augusto da Luz dos Santos – nowayx@[Link]
V Semana Acadêmica da Computação UCS – Mini-Curso de Python
Threading
import threading
t1 = [Link](target=funcao,args=())
[Link]()
sem = [Link](2)
[Link]()
[Link]()
Alex Augusto da Luz dos Santos – nowayx@[Link]
V Semana Acadêmica da Computação UCS – Mini-Curso de Python
Sockets
- Comunicação entre processos
- Cliente
- Endereço e porta de conexão
- Servidor
- Endereço e porta de ‘listen’
- Comunicação
- read()
- write()
- socket(tipo end. e protocolo, tipo socket)
Alex Augusto da Luz dos Santos – nowayx@[Link]
V Semana Acadêmica da Computação UCS – Mini-Curso de Python
Sockets - Cliente
from socket import socket, AF_INET, SOCK_STREAM
HOST = 'localhost'
PORT = 2223
s = socket(AF_INET, SOCK_STREAM)
[Link]((HOST, PORT))
[Link]('Mensagem do Cliente!')
data = [Link](1024)
print data
[Link]()
Alex Augusto da Luz dos Santos – nowayx@[Link]
V Semana Acadêmica da Computação UCS – Mini-Curso de Python
Sockets - Servidor
from socket import socket, AF_INET, SOCK_STREAM
HOST = ''
PORT = 2223
s = socket(AF_INET, SOCK_STREAM)
[Link]((HOST, PORT))
[Link](1) # Numero de Conexoes
conn, addr = [Link]()
data = [Link](1024)
print data
[Link]('Mensagem do Servidor!')
[Link]()
Alex Augusto da Luz dos Santos – nowayx@[Link]
V Semana Acadêmica da Computação UCS – Mini-Curso de Python
DBM
- anydbm
- dumbdbm (lenta e limitada, todas plataformas)
- dbm (somente em UNIX)
- gdbm (somente em UNIX)
- dbhash (biblioteca BSD, em UNIX e Windows)
Alex Augusto da Luz dos Santos – nowayx@[Link]
V Semana Acadêmica da Computação UCS – Mini-Curso de Python
DBM
import anydbm
dados = [Link](‘[Link]’,’c’)
dados[‘she’] = ‘ela’
dados[‘he’] = ‘ele’
[Link]()
first, next, previous, last, has_key, keys
Alex Augusto da Luz dos Santos – nowayx@[Link]
V Semana Acadêmica da Computação UCS – Mini-Curso de Python
Bancos de Dados
Os bancos possuem uma API padrão
Conexão
Cursor
Comandos SQL
Commit
Alex Augusto da Luz dos Santos – nowayx@[Link]
V Semana Acadêmica da Computação UCS – Mini-Curso de Python
Sqlite
import sqlite
banco = [Link]('[Link]')
cur = [Link]()
[Link]('create table empresa (cod numeric not null,
des character not null, primary key (cod))')
[Link]('insert into empresa values(1,“empresa
teste")')
[Link]()
[Link]()
Alex Augusto da Luz dos Santos – nowayx@[Link]
V Semana Acadêmica da Computação UCS – Mini-Curso de Python
Sqlite
[Link]('select * from empresa order by des')
result = [Link]()
for regs in result:
print regs
[Link]('select * from empresa where cod = %i or
cod = %i order by des', [3,2])
Alex Augusto da Luz dos Santos – nowayx@[Link]
V Semana Acadêmica da Computação UCS – Mini-Curso de Python
Outros Bancos de Dados
import MySQLdb
con = [Link]('servidor', 'usuario',
'senha')
con.select_db('banco de dados')
cur = [Link]()
Alex Augusto da Luz dos Santos – nowayx@[Link]
V Semana Acadêmica da Computação UCS – Mini-Curso de Python
Bancos de Dados
Alguns Cursores permitem iteração
[Link](‘SQL’)
for registros in cur:
print registros
Alguns Cursores retornam um uma lista de
dicionários
registros = [Link]()
for registro in registros:
print registro[‘coluna1’]
Alex Augusto da Luz dos Santos – nowayx@[Link]
V Semana Acadêmica da Computação UCS – Mini-Curso de Python
Interfaces Gráficas
Tkinter – Padrão
wxPython (antiga wxWindows)
GTK no Linux
MFC no Windows
pyGTK
pyQT (Windows requer Licença)
pyFLTK, FxPy, Anygui
Alex Augusto da Luz dos Santos – nowayx@[Link]
V Semana Acadêmica da Computação UCS – Mini-Curso de Python
Tkinter
import Tkinter
tela = [Link]()
[Link]('Hello')
edit = [Link](tela)
label= [Link](tela, text='Tkinter!!!!')
[Link]()
[Link]()
[Link]()
Alex Augusto da Luz dos Santos – nowayx@[Link]
V Semana Acadêmica da Computação UCS – Mini-Curso de Python
wxPython
from [Link] import *
class App(wxApp):
def OnInit(self):
frame = wxFrame(id=wxNewId(), name='frame', parent=None,
pos=wxPoint(0, 0), size=wxSize(200, 200),
style=wxDEFAULT_FRAME_STYLE, title='Hello World')
[Link]()
return True
app = App(0)
[Link]()
Alex Augusto da Luz dos Santos – nowayx@[Link]
V Semana Acadêmica da Computação UCS – Mini-Curso de Python
wxPython
wxFrame
EVT_CLOSE(func)
wxPanel
wxStaticText
wxTextCtrl
wxButton
EVT_BUTTON(id, func)
(parent, id, ...)
Alex Augusto da Luz dos Santos – nowayx@[Link]
V Semana Acadêmica da Computação UCS – Mini-Curso de Python
wxPython
Alex Augusto da Luz dos Santos – nowayx@[Link]
V Semana Acadêmica da Computação UCS – Mini-Curso de Python
Prog_ini.py
from [Link] import *
import Tela
class App(wxApp):
def OnInit(self):
tela = [Link](None)
[Link](tela)
[Link]()
return True
app = App(0)
[Link]()
Alex Augusto da Luz dos Santos – nowayx@[Link]
V Semana Acadêmica da Computação UCS – Mini-Curso de Python
[Link]
from [Link] import *
def create(parent):
return Tela(parent)
class Tela(wxFrame):
def __init__(self, parent):
wxFrame.__init__(self, id=wxNewId(), parent=parent,
pos=wxPoint(0, 0), size=wxSize(200, 120),
style=wxDEFAULT_FRAME_STYLE, title='Hello
World')
Alex Augusto da Luz dos Santos – nowayx@[Link]
V Semana Acadêmica da Computação UCS – Mini-Curso de Python
[Link] - Continuação
panel = wxPanel(self, -1)
B1 = wxButton(panel, 20, 'Ok', wxPoint(75, 40), wxSize(50,
45))
EVT_BUTTON(panel, 20, self.OnClickB1)
[Link]('Pressione!')
L1 = wxStaticText(panel, -1, 'Digite', wxPoint(10,10))
E1 = wxTextCtrl(panel, -1, 'Informe um Valor', wxPoint(50,7),
wxSize(100,20))
def OnClickB1(self, event):
wxMessageBox('Obrigado por Pressionar!', 'Mensagem',
wxOK)
Alex Augusto da Luz dos Santos – nowayx@[Link]
V Semana Acadêmica da Computação UCS – Mini-Curso de Python
Onde buscar mais informações?
[Link]
[Link]
[Link]
[Link]
[Link] (Como sempre!)
Alex Augusto da Luz dos Santos – nowayx@[Link]
V Semana Acadêmica da Computação UCS – Mini-Curso de Python
OBRIGADO!
Alex Augusto da Luz dos Santos – nowayx@[Link]