Pymordida0 Semana de computação da SOCIESC - 2008/10
-
Upload
marco-mendes -
Category
Education
-
view
2.095 -
download
0
description
Transcript of Pymordida0 Semana de computação da SOCIESC - 2008/10
- 1. Python: a primeira mordida Marco Andr Lopes Mendes [email_address]
2. Crditos Esses conjunto de slides foi desenvolvido a partir do material de: Luciano Ramalho[email_address] 3. Em vez deHello World... fromdatetimeimportdatetime fromtimeimportsleep whileTrue:# rodar para sempre hora = datetime.now() printhora.strftime( '%H:%M:%S' )sleep(1)# aguardar 1 segundo 4. Blocos por endentao
-
- fori in range(1,11) :
-
- j = i*i
-
- printi, j
-
- print'FIM'
dois-pontos marca o incio do bloco retorno ao nvel anterior deindentao marca o final do bloco indentao dentro do bloco deve ser constante* * por conveno, usa-se 4 espaos por nvel (mas basta ser consistente) 5. Blocos
- Todos os comandos que aceitam blocos:
- Se o bloco tem apenas um comando, pode-se escrever tudo em uma linha:
- if/elif/else
- for/else
- while/else
- try/except
- try/finally
- class
- def
-
- ifn < 0:print 'Valor invlido'
6. Comentrios
- O smbolo#indica que o texto partir daquele ponto e at o final da linha deve ser ignorado pelo interpretadorpython
-
- exceto quando # aparece em uma string
- Para comentrios de vrias linhas, usa-se trs aspas simples ou duplas (isso cria uma doc string e no ignorada pelopython , mas usada para documentar)
-
- """ Minha terra tem palmeiras,
-
- Onde canta o Sabi;
-
- As aves, que aqui gorjeiam,
-
- No gorjeiam como l. """
7. Tipos de dados bsicos
- Nmeros:int, long, float, complex
- Strings:str e unicode
- Listas e tuplas:list, tuple
- Dicionrios:dict
- Arquivos:file
- Booleanos:bool (True, False)
- Conjuntos:set, frozenset
- None
8. Nmeros inteiros
- int : usualmente inteiros de 32 bits
- long : alcance limitado apenas pela memria
- ATENO:a diviso entreinteiros em Python < 3.0 sempreretornaoutro inteiro
- Python promovedeint paralong automaticamente
-
- >>> 1 / 2
-
- 0
-
- >>> 1. / 2
-
- 0.5
-
- >>> 2**30 + (2**30-1)
-
- 2147483647
-
- >>> 2**31
-
- 2147483648L
9. Outros nmeros
- float : ponto-flutuante de 32 bits
- complex : nmero complexo
- Construtores oufunes de converso:
-
- int(a)
-
- long(b)
-
- float(c)
-
- complex(d)
-
- abs(e)
-
- >>> c = 4 + 3j
-
- >>> abs(c)
-
- 5.0
-
- >>> c.real
-
- 4.0
-
- >>> c.imag
-
- 3.0
10. Operadores numricos
- Aritmticos
-
- bsicos:+ - * / **(o ltimo: potenciao)
-
- aritmtica de inteiros:% //(resto e diviso)
- Bit a bit:
-
- & | ^ ~ >> >> bool(3)
-
-
- True
-
-
-
- >>> bool('0')
-
-
-
- True
-
-
-
- >>> bool([[]])
-
-
-
- True
-
-
-
- >>> bool(0)
-
-
-
- False
-
-
-
- >>> bool('')
-
-
-
- False
-
-
-
- >>> bool([])
-
-
-
- False
-
12. Operadores booleanos
- Operadores relacionais:
-
- ==!=>>=> fruta = 'ma'
-
- >>> fruta
-
- 'maxc3xa7xc3xa3'
-
- >>> print fruta
-
- ma
-
- >>> print repr(fruta)
-
- 'maxc3xa7xc3xa3'
-
- >>> print str(fruta)
-
- ma
-
- >>> len(fruta)
-
- 6
15. Strings unicode
- Padro universal, compatvel com todos os idiomas existentes (portugus, chins, grego, hndi, rabe, suali etc.)
- Cada caractere representado pordois bytes
- Utilize o prefixou para denotar umaconstante unicode:u'ma'
-
- >>> fruta = u'ma'
-
- >>> fruta
-
- u'maxe7xe3'
-
- >>> print fruta
-
- ma
-
- >>> len(fruta)
-
- 4
16. Codificao em scripts
- As constantes str ou unicode so interpretadas segundo a codificao declarada num comentrio especial no incio do arquivo .py:
-
- #!/usr/bin/env python
-
- # coding:utf-8
17. Como gerar strings com variveis embutidas
- Operador de interpolao:f % tupla
- Tipos de converso mais comuns:
-
-
- %s ,%f ,%d : string, float, inteiro decimal
-
- Aprendendo a aprender:
-
- Google:Python String Formatting Operations
-
- >>> m ='Euro'
-
- >>> t =2.7383
-
- >>> f = 'O%sest cotado a R$%0.2f .'%( m , t )
-
- >>> print f
-
- OEuroest cotado a R$2.74 .
18. Algumas funes com strings
- chr(n) :retorna uma string com um caractere de 8-bits cujo cdigo n
- unichr(n) :retorna uma string com um caractere Unicodecujo cdigo n
- ord(c) : retorna o cdigo numrico do caracterec(pode ser Unicode)
- repr(x) : converso de objeto para sua representao explcita emPython
- len(s) : nmero de caracteres da string
19. Alguns mtodos de strings
- s.strip()
-
- retira os brancos (espaos, tabs e newlines) da frente e de trs des(+ parmetros)
-
- rstripelstripretiram direita e esquerda
- s.upper(), s.lower(), s.capitalize(), s.title()
-
- converte todas maisculas, todas minsculas, primeira maiscula por palavra, primeira maiscula da string
- s.isdigit(), s.isalnum(), s.islower()...
-
- testa se a string contm somente dgitos, ou somente dgitos e letras ou s minsculas
20. Buscando substrings
- sub in s
-
- s contm sub ?
- s.startswith(sub), s.endswith(sub)
-
- scomea ou termina comsub ?
- s.find(sub), s.index(sub)
-
- posio desubems(sesubno existe ems ,findretorna -1,indexsinalizaValueError )
-
- rfinderindexcomeam pela direita
- s.replace(sub1, sub2)
-
- substitui as ocorrncias desub1porsub2
21. Aprendendo a aprender
- Use o interpretador interativo!
- Determinar o tipo de um objeto:
-
- type(obj)
- Ver docs de uma classe ou comando
-
- help(list)
- Obter uma lista de (quase) todos os atributos de um objeto
-
- dir(list)
- Listar smbolos do escopo corrente
-
- dir()
22. Listas
- Listas so colees de itens heterogneos que podem ser acessados sequencialmente ou diretamente atravs de um ndice numrico.
- Constantes do tipo lista so delimitadas por colchetes[] .
-
- a = []
-
- b = [1,10,7,5]
-
- c = ['casa',43,b,[9,8,7],u'coisa']
23. Listas
- O mtodolista.append(i) usado para colocar um novo itemi na lista.
- O mtodolista.extend(l) inclui todos os itens delno final da lista. O resultado o mesmo da expresso abaixo, s que mais eficiente pois evita copiar todos os itens da lista:
- Funo embutidalen()retorna o nmero de itens da lista:
-
- len(a), len(b), len(c) # 0, 4, ?
-
-
-
- lista += l2
-
-
24. Listas
- O mtodolista.sort()ordena os itens de forma ascendente.
- O mtodolista.reverse()inverte a ordem dos itens dentro da prpria lista.
- Ambos devolvemNone .
- A funo embutidasorted(l)devolve uma lista com os itens de uma lista ou sequncia qualquer ordenados
- A funo embutidareversed(l) devolve um iterador para percorrer a sequncia em ordem inversa (do ltimo para o primeiro item).
25. Operaes com itens de listas
- Atribuio:
-
- lista[5] = 123
- Outros mtodos da classelist :
-
- lista.insert(posicao, elemento)
-
- lista.pop()# +params: ver doc
-
- lista.index(elemento) # +params: ver doc
-
- lista.remove(elemento)
- Remoo do item:
-
- del lista[3]
26. Uma funo para gerar listas
- range([inicio,] fim[, passo])
-
- Retorna uma progresso aritmtica de acordo com os argumentos fornecidos
- Exemplos:
-
- range(8)# [0,1,2,3,4,5,6,7]
-
- range(1,7)# [1,2,3,4,5,6]
-
- range(1,8,3) # [1,4,7]
27. Expresses para gerar listas
- List comprehensions ou abrangncias de listas
- Produz uma lista a partir de qualquer objeto itervel
- Economizam loops explcitos
28. Abrangncia de listas
- Sintaxe emprestada da linguagem funcional Haskell
- Processar todos os elementos:
-
- l = [1,-2,3,-1,-3,4]
-
- l2 = [n*10 for n in l]
29.
- Filtrar alguns elementos:
-
- l3 = [n for n in l if n > 0]
- Processar e filtrar
-
- l4 = [n*10 for n in l if n > 0]
Abrangncia de listas 30. Produto cartesiano
- Usando dois ou mais comandosfordentro de uma list comprehension
>>> qtds = [2,6,12,24] >>> frutas = ['abacaxis', 'bananas', 'caquis'] >>> [(q,f) for q in qtds for f in frutas] [(2, 'abacaxis'), (2, 'bananas'), (2, 'caquis'),(6, 'abacaxis'), (6, 'bananas'), (6, 'caquis'),(12,'abacaxis'), (12,'bananas'), (12,'caquis'),(24,'abacaxis'), (24,'bananas'), (24,'caquis')] 31. Produto cartesiano (2) >>> naipes = 'copas ouros espadas paus'.split() >>> cartas = 'A 2 3 4 5 6 7 8 9 10 J Q K'.split() >>> baralho = [(c, n) for n in naipes for c in cartas] >>> baralho [('A', 'copas'), ('2', 'copas'), ('3', 'copas'), ('4', 'copas'), ('5', 'copas'), ('6', 'copas'), ('7', 'copas'), ('8', 'copas'),('9', 'copas'), ('10', 'copas'), ('J', 'copas'), ('Q', 'copas'),('K', 'copas'), ('A', 'ouros'), ('2', 'ouros'), ('3', 'ouros'),('4', 'ouros'), ('5', 'ouros'), ('6', 'ouros'), ('7', 'ouros'),('8', 'ouros'), ('9', 'ouros'), ('10', 'ouros'), ('J', 'ouros'),('Q', 'ouros'), ('K', 'ouros'), ('A', 'espadas'), ('2', 'espadas'),('3', 'espadas'), ('4', 'espadas'), ('5', 'espadas'), ('6', 'espadas'), ('7', 'espadas'), ('8', 'espadas'), ('9', 'espadas'), ('10', 'espadas'), ('J', 'espadas'),('Q', 'espadas'), ('K', 'espadas'), ('A', 'paus'), ('2', 'paus'),('3', 'paus'), ('4', 'paus'), ('5', 'paus'), ('6', 'paus'),('7', 'paus'), ('8', 'paus'), ('9', 'paus'), ('10', 'paus'),('J', 'paus'), ('Q', 'paus'), ('K', 'paus')] >>> len(baralho) 52 32. Tuplas
- Tuplas so sequncias imutveis
-
- no possvel modificar as referncias contidas na tupla
- Tuplas constantes so representadas como sequncias de itens entre parnteses
-
- em certos contextos os parnteses em redor das tuplas podem ser omitidos
-
-
-
- >>> t1 = 1, 3, 5, 7
-
-
-
-
-
- >>> t1
-
-
-
-
-
- (1, 3, 5, 7)
-
-
-
-
-
- a, b = b, a
-
-
33. Converses entre listas e strings
- s.split([sep[,max]])
-
- retorna uma lista de strings, quebrando snos brancos ou no separador fornecido
-
- maxlimita o nmero de quebras
- s.join(l)
-
- retorna todas as strings contidas na lista l"coladas" com a strings( comum quesseja uma string vazia)
- list(s)
-
- retornascomo uma lista de caracteres
-
-
-
- ''.join(l)
-
-
-
-
-
- s.split(';')
-
-
-
-
-
- list('python')
-
-
34. Tuplas
- Atribuies mltiplas utilizam tuplas
-
- #uma lista de duplas
-
- posicoes = [(1,2),(2,2),(5,2),(0,3)]
-
- #um jeito de percorrer
-
- for pos in posicoes:
-
- i, j = pos
-
- print i, j
-
- #outro jeito de percorrer
-
- for i, j in posicoes:
-
- print i, j
35. Operaes com sequncias
- Sequncias so colees ordenadas
-
- nativamente: strings, listas, tuplas, buffers
- Operadores:
-
- s[i] acesso a um item
-
- s[-i] acesso a um item pelo final
-
- s+z concatenao
-
- s*n ncpias desconcatenadas
-
- i in s teste de incluso
-
- i not in s teste de incluso negativo
36. Fatiamento de sequncias
- s[a:b] cpia dea(inclusive) atb(exclusive)
- s[a:] cpia a partir dea(inclusive) at o final
- s[:b] cpia do incio atb(exclusive)
- s[:] cpia total des
- s[a:b:n] cpia de nemnitens
- Atribuio em fatias:
-
- s[2:5] = [4,3,2,1]
-
- vlida apenas em sequncias mutveis
37. Funes nativas para sequncias
- len(s)
-
- nmero de elementos
- min(s), max(s)
-
- valores mnimo e mxi mo contidos em s
- sorted(s)
-
- retorna um iterador para percorrer os elementos em ordem ascendente
- reversed(s)
-
- retorna um iterador para percorrer os elementos do ltimo ao primeiro
38. Dicionrios
- Dicionrios so colees de valores identificados por chaves nicas
-
- Outra definio: dicionrios so colees de pareschave:valorque podem ser recuperados pela chave
- Dicionrios constantes so representados assim:
-
- uf={'SC':'Santa Catarina', 'PR':'Paran', 'RS':'Rio Grande do Sul'}
39. Dicionrios: caractersticas
- As chaves so sempre nicas
- As chaves tm que ser objetos imutveis
-
- nmeros, strings e tuplas so alguns tipos de objetos imutveis
- Qualquer objeto pode ser um valor
- A ordem de armazenagem das chaves indefinida
- Dicionrios so otimizados para acesso direto a um item pela chave, e no para acesso sequencial em determinada ordem
40. Dicionrios: operaes bsicas
- Criar um dicionrio vazio:
-
- d = {}
-
- d = dict()
- Acessar um item do dicionrio:
-
- print d[chave]
- Adicionar ou sobrescrever um item:
-
- d[chave] = valor
- Remover um item:
-
- del d[chave]
41. Alguns mtodos de dicionrios
- Verificar a existncia de uma chave:
-
- d.has_key(chave)
-
- chave in d
- Obter listas de chaves, valores e pares:
-
- d.keys()
-
- d.values()
-
- d.items()
- Acessar um item que talvez no exista:
-
- d.get(chave, default) #retorna None ou default
42. Conjuntos
- Conjuntos so colees de itens nicos e imutveis
- Existem duas classes de conjuntos:
-
- set : conjuntos mutveis
-
-
- suportam s.add(item)es.remove(item)
-
-
- frozenset : conjuntos imutveis
-
-
- podem ser elementos de outros conjuntos e chaves de dicionrios
-
43. Removendo repeties
- Transformar uma lista num set e depois transformar o set em lista remove todos os itens duplicados da lista:
-
- l = [2, 6, 6, 4, 4, 6, 1, 4, 2, 2]
-
- s = set(l)
-
- l = list(s)
-
- print l
-
- # [1, 2, 4, 6]
44. Arquivos
- Objetos da classefilerepresentam arquivos em disco
- Para abrir um arquivo, use o construtorfile() (a funoopen() um sinnimo)
-
- abrir arquivo binrio para leitura:
-
-
- arq = file('/home/juca/grafico.png','rb')
-
-
- abrir arquivo texto para escrita:
-
-
- arq = file('/home/juca/nomes.txt','w')
-
-
- abrir arquivo para acrescentar (append):
-
-
- arq = file('/home/juca/grafico.png','a')
-
45. Execuo condicional
- Forma simples:
-
- ifcond :comando
- Forma em bloco:
-
- ifcond : comando1 comando2
- Alternativas:
-
- ifcond1: comando1 elifcond2: comando2 else : comando3
46. Repeties: comandofor
- Para percorrer sequncias previamente conhecidas
-
- foriteminlista: printitem
- Se for necessrio um ndice numrico:
-
- fori,iteminenumerate(lista): printi,item
- Para percorrer uma PA de 0 a 99:
-
- foriinrange(100):printi
47. Repeties: comandowhile
- Para repetir enquanto uma condio verdadeira
-
- """ Srie de Fibonacci
-
- at 1.000.000
-
- """
-
- a = b = 1
-
- whilea < 10**6:
-
- printa
-
- a, b = b, a + b
48. Controle de repeties
- Para iniciar imediatamente a prxima volta do loop, use o comandocontinue:
-
- """ Ignorar linhas em branco
-
- """
-
- soma = 0
-
- forlinhainfile('vendas.txt'):
-
- ifnot linha.strip():
-
- continue
-
- codigo, qtd, valor = linha.split()
-
- soma += qtd * valor
-
- printsoma
49. Controle de repeties (2)
- Para encerrar imediatamente o loop, use o comandobreak :
-
- total=0
-
- while True :
-
- p =raw_input ('+')
-
- if not p.strip ():break
-
- total +=float(p)
-
- print '---------'
-
- print total
50. Tratamento de excees
- Comandotry/except :
-
- total=0
-
- while True:
-
- p = raw_input('+')
-
- if not p.strip(): break
-
- try :
-
- total += float(p)
-
- exceptValueError:
-
- print '.'
-
- print '---------'
-
- print total
51. Palavras reservadas
- and
- assert
- break
- class
- continue
- def
- del
- elif
- else
- except
- exec
- finally
- for
- from
- global
- if
- import
- in
- is
- lambda
- not
- or
- pass
- raise
- return
- try
- while
- yield
52. Variveis
- Variveis contm referncias a objetos
-
- variveisnocontm os objetos em si
- Variveis no tm tipo
-
- os objetos aos quais elas se referem tm tipo
- Uma varivel no pode ser utilizada em uma expresso sem ter sido inicializada
-
- no existe criao automtica de variveis
53. Atribuio
- Forma simples:
-
- reais = euros * taxa
- Outras formas:
-
- atribuio com operao
-
-
- a+=10# a=a+10
-
-
- atribuio mltipla:
-
-
- x=y=z=0
-
-
- atribuio posicional de itens de sequncias:
-
-
- a,b,c=lista
-
-
-
- i,j=j,i# swap
-
54. Atribuio
- Exemplo
-
- # Srie de Fibonacci
-
- a = b = 1
-
- whileTrue:
-
- printa
-
- a, b = b, a + b
55. Atribuio: princpios
- Python trabalha com referncias, portanto a atribuio no gera uma cpia do objeto
-
- Uma varivelno uma caixa que contm um valor (esquea esta velha idia!)
-
- Uma varivel uma etiqueta Post-it colada a um objeto (adote esta nova idia!!!)
- del : comando de desatribuio
-
- remove uma referncia ao objeto
-
- no existindo mais referncias, o objeto varrido da memria
56. Variveis
- Podem ser entendidas como rtulos
-
- no so "caixas que contm valores"
- Atribuir valor varivel equivale a colar um rtulo no valor
-
- a = [1,2,3]b = a
[1,2,3] a [1,2,3] a b 57. Apelidos e cpias
- aebso apelidos do mesmo objeto lista
- c uma referncia a uma cpia da lista
-
-
- >>> a = [21, 52, 73]
-
-
-
- >>> b = a
-
-
-
- >>> c = a[:]
-
-
-
- >>> b is a
-
-
-
- True
-
-
-
- >>> c is a
-
-
-
- False
-
-
-
- >>> b == a
-
-
-
- True
-
-
-
- >>> c == a
-
-
-
- True
-
-
-
- >>> a, b, c
-
-
-
- ([21, 52, 73], [21, 52, 73], [21, 52, 73])
-
-
-
- >>> b[1] =99
-
-
-
- >>> a, b, c
-
-
-
- ([21,99 , 73], [21,99 , 73], [21, 52, 73])
-
-
-
- >>>
-
58. Definio de funes
- Comandodef inicia a definio
- Comandoreturnmarca o fim da execuo da funo e define o resultado a ser retornado
-
- definverter(texto):
-
- if len(texto) >> c = Coisa()
-
- >>> c.altura = 2.5
-
- >>> c.largura = 3
-
- >>> c.altura, c.largura
-
- (2.5, 3)
-
- >>> dir(c)
-
- ['__doc__', '__module__', 'altura', 'largura']
- passindica um bloco vazio
65. Como extender uma classe
-
- classContadorTolerante(Contador):
-
- defcontar(self, item):
-
- returnself.dic.get(item, 0)
- declarao
- mtodo sobrescrito
-
- classContadorTotalizador(Contador):
-
- def__init__(self):
-
- super(ContadorTotalizador, self).__init__()
-
- self.total = 0
-
- defincluir(self, item):
-
- super(ContadorTotalizador, self).incluir(item)
-
- self.total += 1
- Como invocar mtodos de super-classes:
66. Herana mltipla
-
- classContadorTolerante(Contador): defcontar(self, item):
-
- returnself.dic.get(item, 0)
-
- classContadorTotalizador(Contador):
-
- def__init__(self):
-
- super(ContadorTotalizador, self).__init__()
-
- self.total = 0
-
- defincluir(self, item):
-
- super(ContadorTotalizador, self).incluir(item)
-
- self.total += 1
-
- classContadorTT(ContadorTotalizador,ContadorTolerante):
-
- pass
- passindica um bloco vazio
67. Propriedades
- Encapsulamento quando voc precisa
>>> a = C() >>> a.x = 10#!!! >>> print a.x 10 >>> a.x = -10 >>> print a.x# ?????? 0 68. Implementao de uma propriedade classC(object): def__init__(self, x=0): self.__x = x defgetx(self): returnself.__x defsetx(self, x): if x < 0: x = 0 self.__x = x x = property(getx, setx) classC(object): def__init__(self, x): self.__x = x @property defx(self): returnself.__x
- Apenas paraleitura
- Para leiturae escrita
69. Exemplo de propriedade
-
- classContadorTotalizador( Contador ):
-
- def__init__(self):
-
- super(ContadorTotalizador, self).__init__()
-
- self.__total = 0
-
- defincluir(self, item):
-
- super(ContadorTotalizador, self).incluir(item)
-
- self.__total += 1
-
- @property
-
- deftotal(self):
-
- returnself.__total
- Funciona porque uma classe estilo novo
-
- extende deContador , que extendeobject
70. python.mordida[0] Marco Andr Lopes Mendes [email_address] marrcandre.blogspot.com slideshare.net/marcoandre