Upload
marcel-caraciolo
View
4.115
Download
0
Embed Size (px)
DESCRIPTION
Mini-Course introducing Python for beginners presented at II workshop of open source software at Centro de Informática/UFPE - 21/03/2011.
Citation preview
Hello, I am Python!Marcel Caraciolo
Mini-Curso De Introdução a Python
II Workshop de Software Livre - CIN/UFPE - Recife - PE
1
1
Quem é o instrutor ?
2II Workshop de Software Livre - CIN/UFPE - Recife - PE
• Marcel Pinheiro Caraciolo - @marcelcaraciolo
• Sergipano, porém Recifense.
• Diretor de Pesquisa e Desenvolvimento da Orygens
• Mestrando em Ciência da Computação no CIN/UFPE na área de mineração de dados
• Membro e Moderador da Celúla de Usuários Python de Pernambuco (PUG-PE)
• Minhas áreas de interesse: Computação móvel e Computação inteligente
• Meus blogs: http://www.mobideia.com (sobre Mobilidade desde 2006)
http://aimotion.blogspot.com (sobre I.A. desde 2009)
Jovem Aprendiz ainda nas artes pythonicas.... (desde 2007)
2
O que é Python ?
Por que Python?
3
!"#$
II Workshop de Software Livre - CIN/UFPE - Recife - PE
3
Por que Python
4
É fácil
!"#$
II Workshop de Software Livre - CIN/UFPE - Recife - PE
4
Por que é fácil
5
• Semelhança com pseudo-código.
!"#$
II Workshop de Software Livre - CIN/UFPE - Recife - PE
5
Hello World Classíco... ‘hello world’ - Python vs { Java, C, PHP e Pascal }
II Workshop de Software Livre - CIN/UFPE - Recife - PE
6
Hello World Classíco.... Em Python ....
print “Hello World”
II Workshop de Software Livre - CIN/UFPE - Recife - PE
7
Por que Python
8
É fácil
É poderoso
II Workshop de Software Livre - CIN/UFPE - Recife - PE
8
Canivete suíçoTipagem dinâmica
Biblioteca padrão completa
Multi-paradigma
Multi-plataforma
Facilmente extensível
Free Software (GPL)
II Workshop de Software Livre - CIN/UFPE - Recife - PE
9
Por que é poderoso• Python para Web
• Web é presente -> Futuro!
• Django (http://www.django.org)
• Zope (http://www.zope.org)
• Plone (http://www.plone.org)
• Turbogears (http://www.turbogears.org)
• Web2Py (http://www.web2py.com)
10
II Workshop de Software Livre - CIN/UFPE - Recife - PE
10
Web
11
http://www.nationalgeographic.com/
II Workshop de Software Livre - CIN/UFPE - Recife - PE
11
Web
12
http://globo.com
II Workshop de Software Livre - CIN/UFPE - Recife - PE
12
Por que é poderoso• Python para gestão empresarial
• PyGTK (http://www.pygtk.org)
• PyQT (http://qt.nokia.com)
• MySQL, PostgreSQL, Oracle, Sqlite
13
II Workshop de Software Livre - CIN/UFPE - Recife - PE
13
Aplicativos Desktop
http://www.stoq.com.br/ http://taskcoach.org/
II Workshop de Software Livre - CIN/UFPE - Recife - PE
14
Aplicativos Desktop
Python + Qt + Qml
II Workshop de Software Livre - CIN/UFPE - Recife - PE
15
Python é multi-plataforma• Python em dispositivos móveis
• Python for Symbian (PyS60), PySide (Maemo), ASE (Android)
II Workshop de Software Livre - CIN/UFPE - Recife - PE
16
Android (ASE)
17
http://code.google.com/p/android-scripting/II Workshop de Software Livre - CIN/UFPE - Recife - PE
17
Por que é poderoso
NetworkXhttp://pypi.python.org/pypi
II Workshop de Software Livre - CIN/UFPE - Recife - PE
18
Python é multi-plataforma
• PyMT
• Python Multi Touch
• Especialmente criado para ambientes multi-touch
http://pymt.eu/
II Workshop de Software Livre - CIN/UFPE - Recife - PE
19
PyGame e Jogos
http://www.pygame.org/news.htmlII Workshop de Software Livre - CIN/UFPE - Recife - PE
20
Aplicativos Desktop
http://www.blender.org/
II Workshop de Software Livre - CIN/UFPE - Recife - PE
21
Quem usa Python?
22
II Workshop de Software Livre - CIN/UFPE - Recife - PE
22
... e aqui no Brasil também!
II Workshop de Software Livre - CIN/UFPE - Recife - PE
23
Python entre as 10 + !
http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
II Workshop de Software Livre - CIN/UFPE - Recife - PE
24
O que é python ?
É fácil
É poderosoÉ poderoso
II Workshop de Software Livre - CIN/UFPE - Recife - PE
25
O que é python ?
É fácil
É poderosoÉ poderoso
É divertido
II Workshop de Software Livre - CIN/UFPE - Recife - PE
25
Fácil e poderoso!
lista = ['laranja', 'banana', 'uva']
lista.sort()
for item in lista:
print item.capitalize()
II Workshop de Software Livre - CIN/UFPE - Recife - PE
26
Hun, sei o que é Python!
...E agora como eu começo ?
II Workshop de Software Livre - CIN/UFPE - Recife - PE
27
Instaladores• Interpretador Python disponível para diversas
plataformas.
• Windows, Unix, Linux, etc.
• Para usuários Windows, é necessário o download do SDK!
• http://www.python.org/download/
28II Workshop de Software Livre - CIN/UFPE - Recife - PE
28
Instaladores
• Atualmente Python está na versão 2.7.1 / 3.2
• No Python 3.0 houve mudanças críticas! 2.7.x suaviliza a transição para os desenvolvedores (Muitos frameworks ainda escritos para Python 2.x)
29II Workshop de Software Livre - CIN/UFPE - Recife - PE
29
Instaladores (Windows)
30II Workshop de Software Livre - CIN/UFPE - Recife - PE
30
Instaladores (Windows)• Não esqueça de adicionar o caminho da instalação
no PATH do sistema!
• ;C:\Python2x
• >>> 2 + 3
• >>> 5
31
Windows 7Approved!
II Workshop de Software Livre - CIN/UFPE - Recife - PE
31
Instaladores• E enquanto no Linux e Unix ?
• Estas distribuições já disponibilizam para você de forma nativa!
• Prompt do python “>>>”:
• Para sair:
• No Unix, digite CONTROL-D
• No Windows, digite CONTROL-Z + ENTER
32II Workshop de Software Livre - CIN/UFPE - Recife - PE
32
Vamos executar!...E agora como eu crio meu
programa em python ?
33II Workshop de Software Livre - CIN/UFPE - Recife - PE
33
Rodando Programas no Unix• Os arquivos python tem finalização .py!
• Você pode usar qualquer editor de texto para codificar o seu código!
• No Windows : Clássico Notepad ou o IDLE...
• No Mac OS/Linux: VI, TextEdit, GEdit, TextMate ...
34
%python filename.py
Para tornar o arquivo *.py executável: #!/usr/bin/python
Para aceitar textos com acentos e caracteres especiais:
# -*- coding: utf-8 -*-
II Workshop de Software Livre - CIN/UFPE - Recife - PE
34
Ambiente IDLE
35
• Ambiente Shell de desenvolvimento básico
• Editor de texto com highlighting e identação automática para criação de arquivos python
• Comandos para alterar propriedades e execução de programas
II Workshop de Software Livre - CIN/UFPE - Recife - PE
35
Desenvolvimento... E ambientes de
desenvolvimento para Python ?
36II Workshop de Software Livre - CIN/UFPE - Recife - PE
36
Eclipse
37
• Aptana PyDev
• Plugin para desenvolvimento de aplicações Python para o Eclipse
• Suporte para Debug, UnitTests.
• http://pydev.org/
II Workshop de Software Livre - CIN/UFPE - Recife - PE
37
Netbeans
38
• Netbeans >= 6.5
• Plugin para desenvolvimento de aplicações Python para o Netbeans
• Suporte para Debug, UnitTests, etc.
• http://wiki.netbeans.org/PythonInstall
II Workshop de Software Livre - CIN/UFPE - Recife - PE
38
ActivePython
39
• ActiveState Python
• Distribuição Python completa, instale e execute!
• Diversos plug-ins e suporte já ao Python 3.0
• http://www.activestate.com/activepython/
II Workshop de Software Livre - CIN/UFPE - Recife - PE
39
EasyClipse
40
• Distribuição customizada do Eclipse!
• Distribuição pronta para uso, inclusive com o ambiente para Python!
• Pydev já vem instalado !
• http://www.easyeclipse.org/
II Workshop de Software Livre - CIN/UFPE - Recife - PE
40
PyCharm
41
• IDE em Python customizada com suporte incluso ao Django
• Excelente IDE para desenvolvimento WEB
• 30 dias gratuito
• http://www.jetbrains.com/pycharm/
II Workshop de Software Livre - CIN/UFPE - Recife - PE
41
Outros Editores
42
Notepad++, GEdit, VIM, Emacs, IDLE, Eric IDE, TextMate, etc.
Vários editores ao seu dispor compatíveis com Python!
II Workshop de Software Livre - CIN/UFPE - Recife - PE
42
Seu shell incrementado...
43
• IPython (Disponível para Linux, Mac, Windows)
• http://ipython.scipy.org/
• BPython (Disponível para Linux e Mac OS)
• http://bpython-interpreter.org/
• Incrementam o shell do seu interpretador Python com auto-complete, highlighting, etc.
II Workshop de Software Livre - CIN/UFPE - Recife - PE
43
Chega de conversa...
44
• É hora de por a mão na massa!
II Workshop de Software Livre - CIN/UFPE - Recife - PE
44
Por onde começo ?
... Criando nosso primeiro Hello World !
45II Workshop de Software Livre - CIN/UFPE - Recife - PE
45
... em Python ...
46
print “Hello World”
Exemplos1.py
II Workshop de Software Livre - CIN/UFPE - Recife - PE
46
Tipos e operaçõesVamos ver um trecho de código em
Python!
47II Workshop de Software Livre - CIN/UFPE - Recife - PE
47
Código Base
48II Workshop de Software Livre - CIN/UFPE - Recife - PE
48
... entendendo o código...
49
• Atribuição utiliza = e comparação utiliza ==
II Workshop de Software Livre - CIN/UFPE - Recife - PE
49
... entendendo o código...
50
• Atribuição utiliza = e comparação utiliza ==
II Workshop de Software Livre - CIN/UFPE - Recife - PE
50
... entendendo o código...
51
• Números: + - * / % tem suas funções características
• + pode ser usado como concatenação de Strings;
• % pode ser usado para formatar Strings (assim como em C).
II Workshop de Software Livre - CIN/UFPE - Recife - PE
51
... entendendo o código...
52
• Números: + - * / % tem suas funções características
• + pode ser usado como concatenação de Strings;
• % pode ser usado para formatar Strings (assim como em C).
II Workshop de Software Livre - CIN/UFPE - Recife - PE
52
... entendendo o código...
53
• Operadores lógicos são palavras e não símbolos (||, &&)
• and, or, not
II Workshop de Software Livre - CIN/UFPE - Recife - PE
53
... entendendo o código...
54
• Operadores lógicos são palavras e não símbolos (||, &&)
• and, or, not
II Workshop de Software Livre - CIN/UFPE - Recife - PE
54
... entendendo o código...
55
• print é o comando básico para “impressão” na tela
II Workshop de Software Livre - CIN/UFPE - Recife - PE
55
... entendendo o código...
56
• print é o comando básico para “impressão” na tela
II Workshop de Software Livre - CIN/UFPE - Recife - PE
56
... entendendo o código...
57
• E se você quiser receber uma entrada diretamente do usuário ?
• raw_input() - retorna uma string !
Exemplos1.py
II Workshop de Software Livre - CIN/UFPE - Recife - PE
57
... entendendo o código...
58
• A primeira atribuição em uma variável também é responsável por cria-lá.• Os tipos das variáveis não precisam ser informados;
• Python descobre o tipo da variável por conta própria!
II Workshop de Software Livre - CIN/UFPE - Recife - PE
58
... entendendo o código...
59
• A primeira atribuição em uma variável também é responsável por cria-lá.• Os tipos das variáveis não precisam ser informados;
• Python descobre o tipo da variável por conta própria!
II Workshop de Software Livre - CIN/UFPE - Recife - PE
59
... Usando o Shell
60
!!"#$%&'&'"()**+,-
! .#/#'&01)/'2$3&/4#56)"'7&4&'481&%&"')'#1/2091&"'%)'94'&0:)1&'0#"1#');)791#/'&'7&4#$%&'<%2/=>'?0">@'A9%&')4'.B1(&$'8'&0:)1&C
!DDD%2/+<"1/2$E'%)'1)"1)=-
!F19%&'"&0/)'"1/2$E"CD
!DDD
! .#/#'G2"9#*2H#/'#'%&794)$1#5I&'%)'94'?0:)1&'0#"1#');)791#/'&'7&4#$%&'<()*J=
!DDD()*J+KLLL-
!FM&794)$1#5I&'%&'&0:)1&'N$1)2/&D
!DDD
II Workshop de Software Livre - CIN/UFPE - Recife - PE
60
... Usando o Shell
61
!!"#$%&'&'"()**+,-
! .#/#'/)0)12/'&'3&4#$%&'#$1)/2&/'0&%)5")
!!"#/'#'")1#'0#/#'324#!62721#/'89:
! .#/#'$#;)7#/')$1/)'&"'3&4#$%&'<=')>)3?1#%&"'@#"1#'?"#/'#"'")1#"'0#/#'324#')'0#/#'@#2>&
! .#/#'&@1)/'#<?%#'7)/#*')>)3?1#5")'&'3&4#$%&'A()*0+-B
!.#/#'"#2/'%&'()*0'AC?21B!.#/#'&@1)/'#'*2"1#'%&"'4D%?*&"'A4&%?*)"B
! .#/#'2$1)//&40)/'#*7?4'3&4#$%&'A31/*'E'FB
II Workshop de Software Livre - CIN/UFPE - Recife - PE
61
Whitespace
62
• Importante para identação e novas linhas• Use \ para quando for para uma próxima linha prematuramente.
• Em Python não há { } !! Isso é para definição de dicionários (dict)
• Blocos de código definidos por identação!
Exemplos1.py
II Workshop de Software Livre - CIN/UFPE - Recife - PE
62
Comentários
63
• Comentários começam com #• Convenção: Você pode definir uma “documentação” em string como
primeira linha de qualquer nova função que você definir.
• Muito importante para o desenvolvedor, crítico para o usuário!
II Workshop de Software Livre - CIN/UFPE - Recife - PE
63
Conhecendo a linguagem...
64
!!"#"$%&#'(%)$"*+&*%),-
! .)/"0)$"0&/%&*%),"+"
!12&0,3-!444"*5*67
!444"*5*8%&(%&9
!444
! :-#%&0&/%&*%),"+";*/<-*&2)(%&*$"(%=
!>&*?@)(&#*0@+"#*-*%),-;*@(&*@0"*A@/B<-!12&0,3-
! 444"*5*C)/%D*6=7*E*1FFGHHH
! 444"*5*)/%C6=7D
II Workshop de Software Livre - CIN/UFPE - Recife - PE
64
Conhecendo a linguagem...
65
!!"#$%&%'(")
! *+,-.,))/0-1"#$%&%'+,-1"-20.,)
! 3%4%! 052-%-6-78
!9:2;,5! %-6-7
! *+,-.,))/0-#,<%51,)-1"#$%&%204,)-=>?@40,)AB
! 3%4%! C$D,-5-6-5"E-C$D,=B8
!9:2;,5! 5-6-C$D,=B
II Workshop de Software Livre - CIN/UFPE - Recife - PE
65
Tipos Básicos
66
• Inteiros (padrão para números)• Divisão entre inteiros, resposta um inteiro!
• Inteiros Longos • L ou l no final. (Convertido automaticamente com precisão de inteiros >
32 bits)
• Floats (ponto flutuante)• 1.23, 3.4e-10
• Complexas • >> 2 + 3j
Exemplos1.pyII Workshop de Software Livre - CIN/UFPE - Recife - PE
66
Tipos Básicos
67
• Representação numérica• Representação de dígitos com/sem formatação de string
• Divisão clássica / base • Uso dos operadores // e /
• Operações em nível de bit• 1 << 2 , 1| 2 , 1&2
• Notações hexadecimal / octal• 2 , 0x10 , 0100 , oct(64), hex(255) , int(‘200’), int(‘0100’,8) , int(‘0x40’,16)
• Operações válidas: +, *, >> , ** , pow, abs, round, etc.Exemplos1.py
II Workshop de Software Livre - CIN/UFPE - Recife - PE
67
Tipos Básicos
68
• Strings• “abc” ou ‘abc’
Exemplo1.py
II Workshop de Software Livre - CIN/UFPE - Recife - PE
!!"#$%&'&($)*"+",-.%
"#$%&'& ()*&+,&$-(.(/01(
/01 2.3$+&45.
/061 ).3$+&$5&785"9
/:1 )"7$+&45.
/:61 )"7$+&$5&785"9
/661 785"9&;$<=.>$&':+.?.+@3(7"A
/B61 #7?.+.3>.
/0:1 #7?.+.3>.
/7%1 785"9#"#.&#.&$<=.>$%
/7%&3$>1 #7?.+.3,"&#.&$<=.>$%
!!!"#$%&!&'()*%
!"#$%&'()*$&+&)('#%,$-+.../
!!!+,(-.#/&0&+1()2%3444/
'()*%
68
Comandos básicos
69
• Alguns comandos básicos que podem ajudar no ínicio!• dir(element) - todos os atributos e métodos que estão associados a
elemento.
• type(element) - Descobrir o tipo do objeto!
• import - importe módulos para uso no seu código!
II Workshop de Software Livre - CIN/UFPE - Recife - PE
!
!"#$%&'()$*"+),-$.*/0&/%($.
! 1$"'()$*"#$%&'
!20/3,&'*&,)$*4,/*/.&56/%*/"*#%5"/5%$*7-$3$*($*"+),-$
!8$%('*65.96/-*$7:/&$.*/*./,.*%/.#/3&56$.*";&$)$.
!"#$%& !"#$%&#
!"#$%& !"#$%&#'(&)#
!"#$%& !"#$%&#'(&)#!'(!"(&)
) %$"!"#$%&#!!"#$%& !*
) %$"!"#$%&#!!"#$%& !(&)#
) %$"!"#$%&#!!"#$%& !(&)#'+,-"!'(!(+,
69
Exercício 01
70
• Faça um programa que peça 2 números e um real.• Calcule e mostre:
• O produto do dobro do primeiro com a metade do segundo
• A soma do triplo do primeiro com o terceiro
• O terceiro elevado ao cubo
II Workshop de Software Livre - CIN/UFPE - Recife - PE
70
Atribuição... Vamos entender como funciona
atribuição!
71II Workshop de Software Livre - CIN/UFPE - Recife - PE
71
Atribuição
72
• Atribuição de uma variável em Python significa criar um rótulo para armazenar uma referência para algum objeto.• Atribuição cria referências e não cópias!
• Inferência do tipo da referência baseado no tipo de dado atribuído
• A referência é deletada por meio de Garbage Collection• Quando o objeto deixa de ser referenciado por nenhum outro
rótulo(variável).
II Workshop de Software Livre - CIN/UFPE - Recife - PE
72
Atribuição
73
• Lembre-se que Python a tipagem é dinâmica!• Declarar variáveis sem atribuí-las irá levantar um erro!
II Workshop de Software Livre - CIN/UFPE - Recife - PE
73
Atribuição
74
• Você pode inicializar várias variáveis de uma só vez!• x = y = z = 2.0
• Rótulos de variáveis são Case Sensitive e não podem iniciar com número. Números, letras e underscores são permitidos!• bob bob_2 _bob _2_bob bob_2 BoB
• Não esquecer das palavras reservadas!
II Workshop de Software Livre - CIN/UFPE - Recife - PE
74
Atribuição
75
• Entendendo manipulação de atribuição de referências• x = y não significa que você fez uma cópia de y!
• x = y o que realmente faz é x referencia ao objeto que y referencia!
• O que realmente acontece por trás dessa simples atribuição:
II Workshop de Software Livre - CIN/UFPE - Recife - PE
75
Atribuição
76
• Mas e se fizermos isso ?! Qual será o valor de x ?
>>> x = “casa”
>>> y = x
>>> x = “fazenda”
>>> print x
II Workshop de Software Livre - CIN/UFPE - Recife - PE
76
Atribuição
77
• Mas e se fizermos isso ?! Qual será o valor de x ?
• Do mesmo jeito que nós esperávamos! Dados nativos são imutáveis! (String, Inteiros, float, complexos).
>>> x = “casa”
>>> y = x
>>> y = “fazenda”
>>> print x
>>> x = “casa” #cria 3, x referencia ao objeto string “casa”
>>> y = x # Cria variavel y, referencia ao objeto string “casa”
>>> y = “fazenda” #Cria referencia ao objeto string “fazenda”
>>> print x # Nenhum efeito em x, ainda referencia “casa”
>>> casa
II Workshop de Software Livre - CIN/UFPE - Recife - PE
77
Listas, Strings e Tuplas
... O poder de python agora!
78II Workshop de Software Livre - CIN/UFPE - Recife - PE
78
Listas, Strings e Tuplas
79
• Todos os três são Sequências!• Podem ser indexados por algum valor ordinal posicional
• Todas as operações apresentadas aqui nesta seção podem ser aplicadas em todos os tipos de sequência
• Listas• li = [1,2,3, ‘abc’]
• Tuplas• li = (23, ‘abc’, 4.56, (2,3), ‘def’)
• Strings• st = “Hello World” st = ‘Hello World’
Exemplos2.py
II Workshop de Software Livre - CIN/UFPE - Recife - PE
79
Listas, Strings e Tuplas
80
• Manipulando sequências!• Pelo índice a partir de 0 Ex: ti [0]
• Índices podem ser positivos ou negativos! Ex: ti[1] (esq.) ti[-4] (dir.)
• Fracionamento e matrizes!• li[1:3] L[1:] matrix = [[1,3,4] , [3,5,6] , [7,8,9]]
• Operador in• retorna um booleano. Checa se um valor está em uma sequência!
• 4 in li
Exemplos2.py
II Workshop de Software Livre - CIN/UFPE - Recife - PE
80
Listas, Strings e Tuplas
81
Exemplos2
!
!"#$%#&'&%()##%*+,&"$)*#
! -*+"()&.,#"$"/,#&)&*)0%$"/,#
!!!"#$#%&'(')'*'+,#!"#$%&'()*%)+$,-%
!!!"%-,
&
!!!"%(,
)
!!!"%.&,
+
!!!"%.),
)
!!!"%&/,
%(')'*'+,
!!!"%/),
%&'('),
!!!"%&/*/(,#!%"#.,"$*()()/%,,(0)"(+.-%1,.)/2+%3*()*.)4).5)4
%('*,
!!!"%//.&,
%+'*')'('&,#!/%,,()3.6%-$7()$37.#-.)%),.8293"$%
II Workshop de Software Livre - CIN/UFPE - Recife - PE
81
Operacões em Listas
82
• Operador + , *• a = “Hello” + “ World” (concatenação)
• [3] * 4 (repetição)
• Operador len() e append()• len() - retorna um inteiro com o tamanho da sequência!
• append() - adiciona um elemento ao final da lista!
• Atribuição• list[0] = ‘3’
• Fazendo cópias de sequência , Cuidado!!!Exemplos2.py
II Workshop de Software Livre - CIN/UFPE - Recife - PE
82
Operacões em Listas
83
• Qual será o valor de b ?
>>> a = [1,2,3]
>>> b = a
>>> a.append(4)
>>> print b
II Workshop de Software Livre - CIN/UFPE - Recife - PE
83
Operacões em Listas
84
• Qual será o valor de b ?
• Surpresa!
• Dados do tipo listas, dicionarios e pré-definidos pelo usuário são mutáveis!
>>> a = [1,2,3]
>>> b = a
>>> a.append(4)
>>> print b
>>> b = [1,2,3,4]
II Workshop de Software Livre - CIN/UFPE - Recife - PE
84
Operacões em Listas
85II Workshop de Software Livre - CIN/UFPE - Recife - PE
85
Operacões em Listas
86
• Para fazer cópias de listas• a = b[:] (2 cópias independentes)
• a = b (os 2 referenciam o mesmo objeto)
• Qual a diferença entre listas e tuplas ?• Listas são mutáveis e Tuplas imutáveis!
• l = [1,‘abc’,4] t = (1,‘abc’,4,5)
• Atribuição em listas e tuplas• list[0] = ‘3‘ ok!
• t[0] = 3 NOK!!! (Deve-se criar uma nova tupla! - t = (3, ‘abc’,4,5)
Exemplos2.py
II Workshop de Software Livre - CIN/UFPE - Recife - PE
86
Tuplas x Listas
87
• Listas são mais lentas porém mais poderosas que tuplas• Listas podem ser modificadas e tem diversos operadores que podem ser
utilizados
• Tuplas são imutáveis e tem menos funcionalidades!
• Para converter entre listas e tuplas ?
Exemplos2.py
II Workshop de Software Livre - CIN/UFPE - Recife - PE
!
!"#$%&
! '(%)*+%,-.)-/*0"%*&/%/$*&)%&1/+2,/",%/3*4-(-.5%/&")*$1/&62/*,")78-*&
! /9&%:&-/%/4".562/)"#$-;</#%(%/)(%.&42(,%(/2")(2&/)*#2&/-,/)"#$%&
!!!"#$#%&'(')'*'+,
!!!-./012"3
2&'(')'*'+3
!!!045-2-./012"33
%&'(')'*'+,
!!!610/2-./013#!"#$%&%'#"())
87
Exercício 02
88
!
!"#$%&%'()*+*
! ,(-.$#/0#)1-)-#23'4.#)5'-.1-6)7#$'8171-)7#9
!:;6*6<6=6>6?6@6A6B6C6*;6**6*<6*=6*>6*?D! E4.#$815()7#)*)1)C
! E4.#$815()7#)B)1)*=
! FG0#$(-)H1$#-
! FG0#$(-)&0H1$#-
! I(7(-)(-)0G5.'H5(-)7#)<6)=)#)>
! J'-.1)$#8#$-1
! K1LM()#4.$#)1)-(01)7()'4.#$815()7#)*;)1)*?)H#5()'4.#$815()7#)=)1)C)#0)N5(1.O
II Workshop de Software Livre - CIN/UFPE - Recife - PE
88
Métodos muito usados
89
• append(), insert(), extend(), del()
• min(), max()
• index(), count(), remove(), pop()
• reverse() , sort()
• etc.
Exemplos2.py
II Workshop de Software Livre - CIN/UFPE - Recife - PE
89
Strings
90
• Formatação e conversão de Strings
• Usam os mesmos operadores básicos de lista
• Multi-Strings, Strings com aspas simples e duplas
• Caracteres Speciais e str() e unicode()
Exemplos2.py
II Workshop de Software Livre - CIN/UFPE - Recife - PE
90
Strings
91
• Também uma sequência e é Imutável!• “42” + 1 (erro!) Use “42” + str(1)
• float(), int() -> string para numéro
• Atribuição • S = ‘spam’ S[0] = ‘x’ ERRO!!!
• Strings são imutáveis!
• String -> Lista -> String (.join)
• Formatação de string
Exemplos2.py
II Workshop de Software Livre - CIN/UFPE - Recife - PE
91
Métodos mais usados
92
• find(), replace(), join(), split()
• isdigit(), islower(), strip(),
• startswith(), upper(), lower()
• etc.
Exemplos2.py
II Workshop de Software Livre - CIN/UFPE - Recife - PE
92
Exercício 03
93
• Crie uma lista com o nome de 10 pessoas e sorteie uma pessoa, depois embaralhe novamente e sorteie outra (sem repetição)
• Dica: help(random) - módulo para aleatoriedade.
• Faça um programa que permita ao usuário digitar o nome e em seguida mostrar ao usuário de trás pra frente somente em letras maiúsculas.
• Dica: Procure pela documentação do help(“”) !
II Workshop de Software Livre - CIN/UFPE - Recife - PE
93
Dicionários
Um “hash map” pythonico!
94II Workshop de Software Livre - CIN/UFPE - Recife - PE
94
Dicionários
95
• Estrutura de dados em forma de coleções onde os items são armazenados e buscados pela chave em vez do deslocamento posicional. • Chaves podem ser quaisquer objetos do tipo imutável
• Valores podem ser de qualquer tipo
• Um dicionário pode armazenar diferentes tipos de valores e é mutável!
• Criando e modificando dicionários!• d = {“user” : “Marcel” , “password”: 2342}
Exemplos3.py
II Workshop de Software Livre - CIN/UFPE - Recife - PE
95
Dicionários
96
• Dicionários não são ordenados!• Uma nova chave pode aparecer em qualquerr lugar
• Funciona como “hashing”
• Algums métodos:• has_key(‘eggs’) , clear() , del d[‘key’] , keys(), values(), items(), get() , update()
• copy() fazer cópias de dicionários ! (Lembre-se que dicionario é mutável!)
Exemplos3.py
II Workshop de Software Livre - CIN/UFPE - Recife - PE
96
Arquivos
Como é fácil manipular um arquivo!
97II Workshop de Software Livre - CIN/UFPE - Recife - PE
97
Arquivos
98
• Apenas uma linha para abrir um arquivo!• file = open(“data”, ‘r’) tipos: r, a, w
• Alguns métodos para operações em arquivos:• file.read(), readline(), readlines(),
• file.write(), writelines(),
• file.close()
Exemplos3.py
II Workshop de Software Livre - CIN/UFPE - Recife - PE
98
Booleanos
Expressões lógicas
99II Workshop de Software Livre - CIN/UFPE - Recife - PE
99
Expressões lógicas
100
• True e False são constantes em Python• False : 0, None, [] , {} , 0.0
• True: Valores Numéricos exceto 0, objeto não vazios
• Um dicionário pode armazenar diferentes tipos de valores e é mutável!
• Operadores de comparação: ==, != , < , <=, etc.• X == Y ( efetua teste de equivalência de valor)
• X is Y (Testa a identidade do objeto)
Exemplos3.py
II Workshop de Software Livre - CIN/UFPE - Recife - PE
100
Expressões lógicas
101
• None é similar ao NULL em linguagem C• L = [None] * 100 (declara uma lista de 100 items None )
• Operações com or e and• not -> inversão lógica (true -> false , false -> true)
• and e or (&& e II)
• isinstance(element,type)• Verifica se um elemento é do tipo type
Exemplos3
II Workshop de Software Livre - CIN/UFPE - Recife - PE
101
Exercício 03
102II Workshop de Software Livre - CIN/UFPE - Recife - PE
102
Exercício 04
103II Workshop de Software Livre - CIN/UFPE - Recife - PE
103
Instruções compostasIf python == “cool”:
print “Oh yeah!”
104II Workshop de Software Livre - CIN/UFPE - Recife - PE
104
Fluxo de Controle
105
• Várias expressões Python para controlar o fluxo do programa. Todos eles fazem uso de testes condicionais booleanos.• ifs, else
• loops while, for
II Workshop de Software Livre - CIN/UFPE - Recife - PE
105
Instruções if
106
Exemplos4
II Workshop de Software Livre - CIN/UFPE - Recife - PE
106
Instruções while
107
Exemplos4
II Workshop de Software Livre - CIN/UFPE - Recife - PE
107
Instruções while
108
• Você pode usar o comando break para sair do loop mais próximo que a envolve.
• Você pode usar o comando continue para pular para o ínicio do loop mais próximo que a envolve e pular para a próxima iteração.
• Você pode usar o comando pass quando você não quer que se faça nada (instrução vazia)
• Você pode o o bloco else do loop para quando se quer executar um código quando se sai normalmente do loop (sem ser por comando break)
Exemplos4.py
II Workshop de Software Livre - CIN/UFPE - Recife - PE
108
Instruções for
109
• Loops for iteram sobre uma sequência de items (listas, tuplas, string ou quaisquer outros objetos cuja a linguagem considere como um “iterator”)
• Várias maneiras de iterar sobre um conjunto de items!
• Também possui o bloco else quando se sai normalmente do loop (similar ao while)
• Função muito usada nos loops for: range()• range() - Retorna uma lista de números que varia de 0 a ao número passado
como parâmetro.Exemplos4.py
II Workshop de Software Livre - CIN/UFPE - Recife - PE
109
Instruções for
110II Workshop de Software Livre - CIN/UFPE - Recife - PE
110
Instrução zip
111
• A função range() percorre sequências de maneira exaustiva. A função interna zip permite usar loops for para visitar várias sequências em paralelo.
• zip() é bastante poderoso, pode unir sequências onde retorna uma lista de tuplas que se distribuem em pares os items paralelos extraídos dessas sequências.
• Permite também facilitar a construção de dícionarios!• x = dict(zip(kes,vals))
Exemplos4.py
II Workshop de Software Livre - CIN/UFPE - Recife - PE
!
� � � � � � � � � � � � � � � � � � � � � � � � �
! � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �
! � � � � � � �! % % % � � � � & � � ! ' & " # ( ' �! & � � � " � � � � � # � � � ! � ( � '! % % % � � � � & � � ! ' & " # ( ' & ) * $ ' �! & � � � " � ) � � � � � # � * � � � ! � ( � $ � '! % % % � � � � & � � ! ' & " # ( ' & ) * ' �! & � � � " � ) � � � � � # � * � '
111
Compreensão de listas
[i for i in “python é fácil demais”]
112II Workshop de Software Livre - CIN/UFPE - Recife - PE
112
Compreensão de listas
113
• Funcionalidade muito poderosa da linguagem Python• Gera uma lista nova aplicando uma função para cada elemento da lista original.
• Muito usado por programadores Python! (Economia de código!)
• A sintaxe da compreensão de lista usa-se de palavra-chaves:
• [expression for name in list]
Exemplos4.py
II Workshop de Software Livre - CIN/UFPE - Recife - PE
!
!"#$%&&'()"*+&*,-(./(
! 01.2"'*(3$"%./*4"#$%&(()"*+&*,-(./(5*4%-/*,-(./(*+&*6"%#/*674-,*&*%7$-+/8*9*3("*+&*4"#$%&(()"*+&*,-(./(*:*;&#*4"#3#*&#*#/..-4/8
! 0"%*&<&#$,"
!=*>*?<@*A*<*-'*?B*888*CDD!E*>*?<*F*<*-'*=*/'+*<*&G&'D
! H#*$1.2"'*.&#"(
!III(*>*J<KKL*6"%*<*-'*%/'M&NOBPQ!III#*>*J<*6"%*<*-'*(*-6*<RL*>>*BQ
113
Compreensão de listas
114
• Permite também o uso de filtros (deteminam se uma determina expressão deve ser executada sobre um membro da lista)
• [expression for name in list if filter ]
Exemplos4.py
II Workshop de Software Livre - CIN/UFPE - Recife - PE
!
!"#$%&&'()"*+&*,-(./(012
! 3.-,-4/%*+-5-"'6%-"(7*&8&#$,"9
! :::+;<=>",?=9@AAAA7=5&,./=9BCAAA7=D-,E8=9FGAAA7=?E(5/=91AAAH
! :::$"((-I-,-+/+&(J%-5"*;*K5/%*?"%*5/%*-'*+*-?*+K5/%L*M*NAAAAL
! :::$"((-I-,-+/+&(J$"I%&*;*K5/%*?"%*5/%*-'*+*-?*+K5/%L*M*1AAL
! O#*(.%-'>(
! :::*'"#&*;*=P'P'*QQ*OQP'QQ(Q.QP'P'QP'/*?Q%P'P'/QQQ(P'&*P.-QQ'RQQ/Q*Q(QQEP'QSP'&QQP'P'Q-P'%QQ/QT***P'QQ*P'P'P'P'=
! :::==TS"-'0K8*?"%*8*-'*'"#&*-?*8U;=Q=*/'+*8U;=P'=L2T(.%-$02
114
Exercício 05
115
• Faça um programa que imprima na tela apenas os números ímpares entre 1 e 50 (usando compreensão de listas!)
!
!"#$%&%'()*+*
! ,#-.()/01)2'341)5#)-(0#3)5#)%2133#3)(3)6/1'3)#347()#3%$'4(3)-()#34'2()/-5#$2'-#)89-(0#:(/4$(:-(0#;<)#)1=($1)0/5(/>3#)()?15$7()?1$1)@10#2@13#+)A#5#>3#)/0)2'341)%(0)(3)-(0#3)4(5(3)#0)@10#2@13#+
! BBB2'341:-(0#:%2133#3CD94#21:?$'-%'?12;E;01?1:5#:5'3?(3'4'F(3;E;%2133#:-#=(%'(:?#315(;E;1%/0/215($;E;G'0:51:2'341:5#):5#:%2133#3:5(:#"#$%'%'(;H
!I'%1J!K3#)13)G/-LM#3)34$+4'42#)#)34$+3?2'4
! N#?(341O
! $#3?(341)C)DPP+Q('-8DR+4'42#8<)G($)R)'-)SH<)G($)S)'-)D"+3?2'48P:P<)G($)")'-)2'341:-(0#:%2133#3HH
II Workshop de Software Livre - CIN/UFPE - Recife - PE
115
Funções
...Seu programa tendo cara de programa!
116II Workshop de Software Livre - CIN/UFPE - Recife - PE
116
Definindo Funções
117
Definição da função inicia com “def ”
II Workshop de Software Livre - CIN/UFPE - Recife - PE
117
Definindo Funções
118
Definição da função inicia com “def ” Nome da função
II Workshop de Software Livre - CIN/UFPE - Recife - PE
118
Definindo Funções
119
Definição da função inicia com “def ” Nome da função Argumentos
II Workshop de Software Livre - CIN/UFPE - Recife - PE
119
Definindo Funções
120
Definição da função inicia com “def ” Nome da função Argumentos
Identação
II Workshop de Software Livre - CIN/UFPE - Recife - PE
120
Definindo Funções
121
Definição da função inicia com “def ” Nome da função Argumentos
Identação
“return” indica o retorno da função
II Workshop de Software Livre - CIN/UFPE - Recife - PE
121
Definindo Funções
122
Definição da função inicia com “def ” Nome da função Argumentos
Identação
“return” indica o retorno da função
Sem header fileSem declaração do tipo de retorno da função ou do tipo dos argumentos
II Workshop de Software Livre - CIN/UFPE - Recife - PE
122
Chamando uma função
123
>>> def myfun(x, y): return x * y>>> myfun(3, 4)12
• Sintaxe básica para chamar uma função:
Exemplos5.py
II Workshop de Software Livre - CIN/UFPE - Recife - PE
123
Passagem de parâmetros
124
• Várias métricas podem ser usadas na passagem dos parâmetros de uma função:
>>> def myfun(x, y): return x * y>>> myfun(3, 4)12>>> myfun(y=3, x=4)12>>> myfun(3, y=4)12
Exemplos5.py
II Workshop de Software Livre - CIN/UFPE - Recife - PE
124
Parâmetros com valores padrões
125
• Cada parâmetro pode ter um valor padrão.
• Utilizado quando um parâmetro é omitido na chamada da função
def myfun(x, y = 0.3, prompt = True): res = x * y if prompt: print “Resposta é %f”, res return res
Exemplos5.py
II Workshop de Software Livre - CIN/UFPE - Recife - PE
125
Parâmetros com valores padrões
126
def myfun(x, y = 4, prompt = True): res = x * y if prompt: print “Resposta é %i”, res return res
• Esta função pode ser invocada de várias formas:
>>> myfun(3)Resposta é 1212>>> myfun(x=3, prompt = False)12>>> myfun(5, 2, False)10 Exemplos5.py
II Workshop de Software Livre - CIN/UFPE - Recife - PE
126
Valor de retorno
127
• Toda função em Python retorna alguma valor;
• Mesmo funções que não possuem a cláusula return.
• Funções que não possuem return retornam None.
• None é uma constante especial definida na linguagem;
• Similar a NULL, void, ou nil em outras linaguagens;
• É lógicamente equivalente à False;
• O interpretador não imprime None.
II Workshop de Software Livre - CIN/UFPE - Recife - PE
127
Valor de retorno
128
• Uma função pode retornar mais de um valor
>>> def teste(): x = 1
y = 2z = 3
return x, y, z
>>> x, y, z = teste()>>> ret = teste()>>> ret(1, 2, 3)
Exemplos5.py
II Workshop de Software Livre - CIN/UFPE - Recife - PE
128
Algumas funções especiais
129
... e Python também tem seu momento funcional!
II Workshop de Software Livre - CIN/UFPE - Recife - PE
129
Parâmetros args
130
Exemplos5.py
II Workshop de Software Livre - CIN/UFPE - Recife - PE
130
Funções map, reduce e filter
131
• Função map(func, seq)
• Função interna que aplica uma função func a cada item de um objeto sequência (seq) e retorna uma lista com os resultados da chamada da função.
• Função filter(func, seq)
• Função interna que aplica uma função filtro func a cada item de um objeto sequência (seq) e retorna uma lista com os resultados que satisfazem os critérios
da função de teste seq.
Exemplos5.py
II Workshop de Software Livre - CIN/UFPE - Recife - PE
131
Módulos
132
... Módulos: o que é, como criar e como utilizar.
II Workshop de Software Livre - CIN/UFPE - Recife - PE
132
Introdução 1/2
133
• Quando você encerra o interpretador, todas as definições de variáveis e funções são perdidas;
• Solução é gerar um script e roda-lo.
• Mas e se você desejar utilizar um determinada função do script em outro programa?
• Solução são os módulos!
II Workshop de Software Livre - CIN/UFPE - Recife - PE
133
Introdução 2/2
134
• Um módulo é um arquivo .py contendo definições e comandos Python:
• Funções
• Variáveis e constantes
• Classes
• ...
• Vantagem é a possibilidade de adicionar todas estas definições em outros arquivos ou módulos.
• Isto é feito utilizando a cláusula import
II Workshop de Software Livre - CIN/UFPE - Recife - PE
134
Executando módulos como scripts
135
• Rodar um módulo Python é similar a importar as definições do módulo para o interpretador.
• Se você fizer python meuModulo.py irá carregar as definições e destruir logo em seguida!
• Para executar algum determinado código de maneira similar à um script você deve testar a cláusula __name__ :
Exemplos5.py
if __name__ == “__main__”: print “Execute algum código”
II Workshop de Software Livre - CIN/UFPE - Recife - PE
135
Pacotes
136
• Pacotes são coleções de módulos Python.
• Qualquer diretório do sistema operacional que contém um arquivo __init__.py dentro é considerado um pacote.
• Pacotes organizam módulos e permitem que programadores importem módulos da seguinte maneira:
• import meuPacote.meuSubPacote.meuModulo
# meuPacote/# __init__.py -- vazio# meuSubPacote/# __init__.py -- vazio# meuModulo.py -- modulo importado
II Workshop de Software Livre - CIN/UFPE - Recife - PE
136
Caminho de busca dos módulos
137
• Quando você executa import meuModulo o interpretador procura pelo arquivo meuModulo.py seguindo uma determinada regra.
• Primeiramente ele procura pelo arquivo no diretório corrente (onde o interpretador foi executado).
• Caso ele não encontre o arquivo no diretório corrente, a busca prossegue em uma lista de diretórios que é especificada na variável sys.path
• Você pode atribuir novos diretórios de busca na variável sys.path (ela é uma lista dentro do módulo sys da biblioteca padrão)
• Útil quando você quer instalar seu módulo na máquina de um usuário.
II Workshop de Software Livre - CIN/UFPE - Recife - PE
137
Compilando um módulo Python
138
... Compilando??? Como assim??? Python não é interpretado???
II Workshop de Software Livre - CIN/UFPE - Recife - PE
138
Compilando um módulo Python
139
• Sim, Python é e continua sendo interpretada!
• Python utiliza o conceito de byte-code (muito conhecido em Java).
• O que acontece quando você importa um módulo:
• 1) - Interpretador busca pelo arquivo .py correspondente;
• 2) - Arquivo .py é “compilado” para o byte-code reconhecido pelo interpretador;
• 3) - Byte-Code é incorporado a tabela de símbolos correntes do interpretador.
II Workshop de Software Livre - CIN/UFPE - Recife - PE
139
Compilando um módulo Python
140
• Compilação para byte-code pode ser um gargalo de desempenho quando você carregar um programa!
• Especialmente se você utiliza muitos módulos em seu programa.
• Solução é pré-compilar os módulos antes de rodar seu programa!
II Workshop de Software Livre - CIN/UFPE - Recife - PE
140
Exercício 06
141
•
II Workshop de Software Livre - CIN/UFPE - Recife - PE
141
QuickSort
142
• Algoritmo de ordenação bastante utilizado e muito eficiente
• Complexidade BigO(nlogn)
1 . Escolher um pivô inicial x;
2. Colocar todos itens com chave menor que a de x à esquerda de x, formando uma seqüência S1;
3. Colocar todos itens com chave maior que a de x à direita de x, formando uma seqüência S2;
4. Isto feito, o mesmo processo é aplicado às seqüências S1 e S2, que por sua vezproduzirão novos segmentos;
5. O processo deve ser aplicado sucessivamente às seqüências enquantoelas tiverem tamanho ≥ 1;
II Workshop de Software Livre - CIN/UFPE - Recife - PE
142
QuickSort
143
• Você pensaria assim...
def partition(list, l, e, g): if list == []: return (l, e, g) else: head = list[0] if head < e[0]: return partition(list[1:], l + [head], e, g) elif head > e[0]: return partition(list[1:], l, e, g + [head]) else: return partition(list[1:], l, e + [head], g)
II Workshop de Software Livre - CIN/UFPE - Recife - PE
143
QuickSort
144
• Agora que você sabe compreensão de listas, você pode fazer assim!
def qsort(L): if len(L) <= 1: return L return qsort( [ lt for lt in L[1:] if lt < L[0] ] ) + [ L[0] ] + \ qsort( [ ge for ge in L[1:] if ge >= L[0] ] )
• E não é que lembra a linguagem funcional Haskel ?!# qsort [] = [] # qsort (x:xs) = qsort elts_lt_x ++ [x] ++ qsort elts_greq_x# where # elts_lt_x = [y | y <- xs, y < x] # elts_greq_x = [y | y <- xs, y >= x]
II Workshop de Software Livre - CIN/UFPE - Recife - PE
144
Ordenação
145
• Mas um programador Pythonico, ainda faria mais eficiente!
list.sort()
• Utiliza-se de uma implementação nativa de Python para ordenação de sequências! Mais eficiente, híbrido com complexidade no pior caso de nlogn.
II Workshop de Software Livre - CIN/UFPE - Recife - PE
145
Python é muito poderoso!
146
• Não precisa reinventar a roda! Molde-a para adaptar ao seu problema!
• A documentação de Python é bastante vasta e há muitas funcionalidades prontas!
II Workshop de Software Livre - CIN/UFPE - Recife - PE
146
Chegamos ao fim! =D
147
Hora da random.choice([pergunta, dúvida, discussão]) !!
II Workshop de Software Livre - CIN/UFPE - Recife - PE
147
Referências
148
• I Workshop CINLUG de Python (Ministrado no CIN)• http://www.cin.ufpe.br/~cinlug/files/workshop-python.1.pdf
• http://www.cin.ufpe.br/~cinlug/files/workshop-python.2.pdf
• Mini-Curso de Introdução a Python (Avaty Tecnologia e Info.)• http://www.avaty.com.br/artigos/CURSO-PYTHON.pdf
II Workshop de Software Livre - CIN/UFPE - Recife - PE
148
Hello, I am Python!Marcel Caraciolo
Mini-Curso De Introdução a Python
149II Workshop de Software Livre - CIN/UFPE - Recife - PE
149