Péricles Miran
Mini-Curso De Introdução a Python
1
O que é Python ?
Por que Python
Por que é fácil
•
Semelhança com pseudo-código.
Hello World Classíco
Hello World Classíco
.... Em Python ....
Por que Python
É fácil
Canivete suíço
Tipagem dinâmica
Biblioteca padrão completa
Multi-paradigma
Multi-plataforma
Facilmente extensível
Free Software (GPL)
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)Web
Web
Por que é poderoso
•
Python para gestão empresarial
•
PyGTK (http://www.pygtk.org)•
PyQT (http://qt.nokia.com)Aplicativos Desktop
Aplicativos Desktop
Python é multi-plataforma
•
Python em dispositivos móveis
Android (ASE)
Por que é poderoso
NetworkX
Python é multi-plataforma
•
PyMT
•
Python Multi Touch•
Especialmente criado para ambientes multi-touchPyGame e Jogos
Aplicativos Desktop
Python entre as 10 + !
O que é python ?
É fácil
É poderoso
O que é python ?
É fácil
É poderoso
É poderoso
Fácil e poderoso!
lista = ['laranja', 'banana', 'uva']
lista.sort()
for item in lista:
Hun, sei o que é Python!
Instaladores
•
Interpretador Python disponível para diversas
plataformas.
•
Windows, Unix, Linux, etc.•
Para usuários Windows, é necessário o download do SDK!Instaladores (Windows)
•
Não esqueça de adicionar o caminho da instalação
no PATH do sistema!
•
;C:\Python2x•
>>> 2 + 3•
>>> 5 Windows 7 Approved!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-DVamos executar!
...E agora como eu crio meu
programa em python ?
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 ...%python filename.py
Para tornar o arquivo *.py executável:
#!/usr/bin/python
Para aceitar textos com acentos e caracteres especiais:
-*-Ambiente IDLE
•
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
Desenvolvimento
... E ambientes de
Eclipse
•
Aptana PyDev
•
Plugin para
desenvolvimento de
aplicações Python para o
Eclipse
•
Suporte para Debug,
UnitTests.
Netbeans
•
Netbeans >= 6.5
•
Plugin para
desenvolvimento de
aplicações Python para o
Netbeans
•
Suporte para Debug,
UnitTests, etc.
ActivePython
•
ActiveState Python
•
Distribuição Python
completa, instale e execute!
•
Diversos plug-ins e suporte
já ao Python 3.0
EasyClipse
•
Distribuição
customizada do
Eclipse!
•
Distribuição pronta para
uso, inclusive com o
ambiente para Python!
•
Pydev já vem instalado !
PyCharm
•
IDE em Python
customizada com
suporte incluso ao
Django
•
Excelente IDE para
desenvolvimento WEB
•
30 dias gratuito
Outros Editores
Notepad++, GEdit, VIM, Emacs, IDLE, Eric IDE,
TextMate, etc.
Chega de conversa...
•
É hora de por a mão na
massa!
Por onde começo ?
... em Python ...
“Hello World”
Tipos e operações
Vamos ver um trecho de código em
Python!
... entendendo o código...
•
Atribuição utiliza
=
e comparação utiliza
==
... entendendo o código...
•
Atribuição utiliza
=
e comparação utiliza
==
... entendendo o código...
•
Números:
+ - * / %
tem suas funções características
•
+ pode ser usado como concatenação de Strings;... entendendo o código...
•
Números:
+ - * / %
tem suas funções características
•
+ pode ser usado como concatenação de Strings;... entendendo o código...
•
Operadores lógicos são
palavras
e não símbolos (||,
&&)
... entendendo o código...
•
Operadores lógicos são
palavras
e não símbolos (||,
&&)
... entendendo o código...
... entendendo o código...
... entendendo o código...
•
E se você quiser receber uma entrada diretamente
do usuário ?
... entendendo o código...
•
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;... entendendo o código...
•
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;... Usando o Shell
!
!"#$%&'&'"()**+,-! .#/#'&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 ! DDDComentários
•
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.Conhecendo a linguagem...
!
!"#"$%&#'(%)$"*+&*%),-! .)/"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=7DConhecendo a linguagem...
!
!"#$%&%'(")
! *+,-.,))/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,=BTipos Básicos
•
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
Tipos Básicos
•
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)Tipos Básicos
•
Strings
•
!
“abc” ou ‘abc’!"#$%&'&($)*"+",-.%
"#$%&'& ()*&+,&$-(.(/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/ '()*%Comandos básicos
•
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!!
!"#$%&'()$*"+),-$.*/0&/%($.
! 1$"'()$*"#$%&' !20/3,&'*&,)$*4,/*/.&56/%*/"*#%5"/5%$* 7-$3$*($*"+),-$ !8$%('*65.96/-*$7:/&$.*/*./,.*%/.#/3&56$.* ";&$)$. ) %$" ) %$" ) %$"Exercício 01
•
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 terceiroAtribuição
... Vamos entender como funciona
atribuição!
Atribuição
•
Atribuição de uma variável em Python significa criar um rótulopara 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).Atribuição
•
Lembre-se que Python a tipagem é dinâmica!•
Declarar variáveis sem atribuí-las irá levantar um erro!Atribuição
•
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 BoBListas, Strings e Tuplas
Listas, Strings e Tuplas
•
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’)•
StringsListas, Strings e Tuplas
•
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!Listas, Strings e Tuplas
!
!"#$%#&'&%()##%*+,&"$)*#
! -*+"()&.,#"$"/,#&)&*)0%$"/,# !!!"#$#%&'(')'*'+,#!"#$%&'()*%)+$,-% !!!"%-, & !!!"%(, ) !!!"%.&, + !!!"%.), ) !!!"%&/, %(')'*'+, !!!"%/), %&'('), !!!"%&/*/(,#!%"#.,"$*()()/%,,(0)"(+.-%1,.)/2+%3*()*.)4).5)4 %('*, !!!"%//.&, %+'*')'('&,#!/%,,()3.6%-$7()$37.#-.)%),.8293"$%Operacões em Listas
•
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’Operacões em Listas
•
Qual será o valor de b ?>>> a = [1,2,3]
>>> b = a
>>> a.append(4)
Operacões em Listas
•
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]Operacões em Listas
•
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!Tuplas x Listas
•
Para converter entre listas e tuplas ?!
!"#$%&
! ! /9&%:&-/%/4".562/)"#$-;</#%(%/)(%.&42(,%(/2")(2&/)*#2&/ -,/)"#$%& !!!"#$#%&'(')'*'+, !!!-./012"3 2&'(')'*'+3 !!!045-2-./012"33 %&'(')'*'+, !!!610/2-./013#!"#$%&%'#"())Exercício 02
!
!"#$%&%'()*+*
! ,(-.$#/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.OMétodos muito usados
•
append(), insert(), extend(), del()•
min(), max()•
index(), count(), remove(), pop()•
reverse() , sort()Strings
•
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!Métodos mais usados
•
find(), replace(), join(), split()•
isdigit(), islower(), strip(),•
startswith(), upper(), lower()Exercício 03
•
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 paraaleatoriedade.
•
Faça um programa que permita ao usuário digitar o nome e em seguida mostrar ao usuário de trás pra frentesomente em letras maiúsculas.
•
Dica: Procure pela documentação doDicionários
d = {“user” : “Pericles " , “password”: 2342}
Dicionários
•
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!Dicionários
•
Dicionários não são ordenados!•
Uma nova chave pode aparecer em qualquerr lugar•
Algums métodos:•
has_key(‘eggs’) , clear() , del d[‘key’] , keys(), values(), items(), get() , update()Arquivos
Arquivos
•
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(),Booleanos
Expressões lógicas
•
True e False são constantes em Python•
False : 0, None, [] , {} , 0.0•
True: Valores Numéricos exceto 0, objeto não vazios•
Operadores de comparação: ==, != , < , <=, etc.•
X == Y ( efetua teste de equivalência de valor)Expressões lógicas
•
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)Fluxo de Controle
•
Várias expressões Python para controlar o fluxo do programa. Todos eles fazem uso de testes condicionais booleanos.•
ifs, elseInstruções while
•
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óximaiteração.
•
Você pode usar o comando pass quando você não quer que se faça nada (instrução vazia)Instruções for
•
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.Compreensão de listas
Compreensão de listas
•
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]!
!"#$%&&'()"*+&*,-(./(
! 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*>>*BQCompreensão de listas
•
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 ]!
!"#$%&&'()"*+&*,-(./(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(.%-$02Exercício 05
•
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/21 5($;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#3HHFunções
Definindo Funções
Definindo Funções
Definindo Funções
Definindo Funções
Definição da função inicia com “def ” Nome da função Argumentos
Definindo Funções
Definição da função inicia com “def ” Nome da função Argumentos
Identação
“return” indica o retorno da função
Definindo Funções
Definição da função inicia com “def ” Nome da função Argumentos
Identação
“return” indica o retorno da função
Chamando uma função
>>> def myfun(x, y):
return x * y
>>> myfun(3, 4)
12
Parâmetros com valores padrões
•
Cada parâmetro pode ter um valor padrão.•
Utilizado quando um parâmetro é omitido na chamada da funçãodef myfun(x, y = 0.3, prompt = True): res = x * y
if prompt:
print “Resposta é %f”, res
Parâmetros com valores padrões
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 é 12 12
>>> myfun(x=3, prompt = False)
12
>>> myfun(5, 2, False)
Valor de retorno
•
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;Valor de retorno
•
Uma função pode retornar mais de um valor>>> def teste(): x = 1 y = 2 z = 3 return x, y, z >>> x, y, z = teste() >>> ret = teste() >>> ret (1, 2, 3)
Algumas funções especiais
Funções map, reduce e filter
•
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.Ordenação
•
Mas um programador Pythonico, ainda faria mais eficiente!Python é muito poderoso!
•
Não precisa reinventar a roda! Molde-a para adaptar ao seuproblema!