Pymordida0 Semana de computação da SOCIESC - 2008/10

download Pymordida0 Semana de computação da SOCIESC - 2008/10

If you can't read please download the document

description

Slides do minicurso de Python ministrado na Semana de computação da SOCIESC em outubro de 2008.

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
  • print
  • 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