Minicurso de Python
• Conceitos Básicos, Estruturas de
  Dados e Orientação a objetos
                             Nathan Siegle Hartmann




VIII JOLIM - Maringá, 2012                            1
O que é Python?
• Python é uma linguagem de programação de altíssimo
  nível (VHLPL – very high level programming
  language), interpretada, orientada a objetos e
  dinâmica criada por Guido van Rossum em 1991.
• A linguagem tem um modelo de desenvolvimento
  aberto mantido pela PSF (Python Software
  Foundation).




 VIII JOLIM - Maringá, 2012                            2
O que é Python?
• A linguagem foi projetada com a filosofia de enfatizar
  a importância do esforço do programador sobre o
  esforço computacional;
• Prioriza a legibilidade do código e a expressividade.




 VIII JOLIM - Maringá, 2012                                3
Quem usa Python?
• Atualmente Python é uma das linguagens mais
  utilizadas em grandes projetos no mundo.
  Engenheiros de software de empresas como Google
  afirmam que o uso de Python é essencial para o
  funcionamento de famosas ferramentas do Google.
  “C++ quando necessitamos, Python quando
  podemos”.
• As ferramentas Google Doc, Picasa, Orkut Help,
  dentre outras da empresa americana Google utilizam
  a linguagem Python.




VIII JOLIM - Maringá, 2012                             4
Quem usa Python?
• Grande parte da API do Google é desenvolvida em
  Python;
• O Google App Engine (framework web online mantido
  pelo Google) oferece suporte total a Python e foi
  desenvolvido também em Python;
• Zope, um dos melhores servidores de aplicação da
  atualidade foi desenvolvido em Python;
• Linux tem diversar rotinas em Python.




 VIII JOLIM - Maringá, 2012                           5
Quem usa Python?
• Empresas que patrocinam a Python Software
  Foundation: ActiveState; ASTi; Array BioPharma,
  Inc.; BizRate.com; Canonical; CCP Games; cPacket
  Networks; EarnMyDegree.com; Enthought, Inc.;
  Google; HitFlip, Inc.; IronPort Systems; Madison
  Tyler LLC; Merfin LLC; Microsoft; O'Reilly &
  Associates, Inc.; Opsware, Inc.; Strakt Holdings,
  Inc.; Sun Microsystems; Tabblo; ZeOmega; Zope
  Corporation.




 VIII JOLIM - Maringá, 2012                           6
Por que usar Python?
• Python é portável, você não precisa compilar seu
  programa cada vez que muda de sistema operacional,
  basta apenas que exista um interpretador Python
  instalado.
• Python é open-source com licença flexível, há uma
  comunidade que desenvolve a linguagem, que está
  sempre aprimorando-a e qualquer um de nós pode
  fazer parte dessa comunidade. A licença flexível nos
  permite desenvolver softwares proprietários com
  ferramentas livres.




 VIII JOLIM - Maringá, 2012                              7
Por que usar Python?
• Python é simples e auto-descritiva, algumas
  linguagens de programação têm sintaxe complexa ou
  difícil de memorizar.




 VIII JOLIM - Maringá, 2012                           8
Resumo de características
• Case sensitive;
• Tipagem dinâmica;
• Linguagem pura: 100% orientada a objetos;
• Código auto-descritivo: simples e de fácil leitura;
• Programação em alto-nível: não permite manipulação
  de ponteiros;
• Não suporta sobrecarga de funções;




 VIII JOLIM - Maringá, 2012                             9
Sintaxe
#comentário de uma
 #comentário de uma                          if x > y:
                                              if x > y:
linha
 linha                                           big = x
                                                  big = x
                                                 small = y
                                                  small = y
“““comentário de um
 “““comentário de um                         else:
                                              else:
bloco“““
 bloco“““
                                                 big = y
                                                  big = y
                                                 small = x
                                                  small = x
‘‘‘comentário de um
 ‘‘‘comentário de um
bloco‘‘‘
 bloco‘‘‘



                    Simples e objetivo! Não é preciso saber
                    programação para entender este
                    código, basta um conhecimento básico
                    em inglês!

 VIII JOLIM - Maringá, 2012                                   10
Variáveis
• O conceito de variável em Python é representado
  sempre por um objeto. Na verdade, Python é uma
  linguagem pura, ou seja, tudo em Python é um
  objeto.
• Toda variável é uma referência!
• Variáveis armazenam endereços de memória e não
  valores!




 VIII JOLIM - Maringá, 2012                         11
Operadores
• Os operadores do Python:

      Aritméticos               Comparação   Lógicos
             +                     ==         and
              -                     !=         or
              *                     >         not
              /                     <
             **                    >=
                                   <=
                                    in
                                    is




VIII JOLIM - Maringá, 2012                             12
Procedimentos e Funções
• Procedimentos não           • Funções retornam
  retornam valores              valores

def procedimento():
 def procedimento():         def hora():
                              def hora():
    print “Hello World”
     print “Hello World”         from datetime import datetime
                                  from datetime import datetime
                                 return datetime.now()
                                  return datetime.now()




VIII JOLIM - Maringá, 2012                                 13
Procedimentos e Funções
• Valores padrão (Default)
• Se nenhum valor for passado como parâmetro, é
  assumido o valor padrão


                def teste(var = 1):
                 def teste(var = 1):
                    return var+1
                     return var+1




VIII JOLIM - Maringá, 2012                        14
Exemplo 1




VIII JOLIM - Maringá, 2012               15
Strings
• A string em Python é representada pela classe str.
  Toda string possui estado e comportamento provido
  pela classe str.
• Podem ser representadas utilizando “ ou ‘.
• Ex: “Meu nome é Nathan”.
• Ex: ‘Meu nome é Nathan’.
• Ex: “Meu nome é ‘Nathan’”




 VIII JOLIM - Maringá, 2012                            16
Strings
• Conheceremos agora alguns métodos para trabalhar
  com strings:
   o __len__(): Retorna o tamanho da string;
   o capitalize(): Retorna a mesma string com a
     primeira letra em maiúsculo.
   o upper(): Retorna a mesma string com todas as
     letras em maiúsculo.
   o lower(): Retorna a mesma string com todas as
     letras em minúsculo.




 VIII JOLIM - Maringá, 2012                          17
Strings
• Mais métodos:
  o replace(antigo, novo): Retorna a mesma string com
    o valor novo em todas as ocorrências de antigo.
  o split([separador]): Retorna uma lista de strings.
    Caso o separador não seja especificado, a lista será
    dividida por espaços em branco.




 VIII JOLIM - Maringá, 2012                            18
Exemplo 2
• Criptografar uma string, substituindo todas as
  ocorrências de um ou mais elementos por símbolos
  especiais.
• Por exemplo: Substituir a ocorrência do símbolo “a”
  pelo símbolo “*”.




 VIII JOLIM - Maringá, 2012                             19
Lendo e Escrevendo em
                  Arquivos
• Leitura de arquivos em Python é simples como em C!
• Arquivos são objetos do tipo file;
• Para a abertura de um arquivo, utilizamos a função
  open;
• A função open funciona como uma fábrica de
  instâncias.




 VIII JOLIM - Maringá, 2012                            20
Formas de Abrir um
               Arquivo
• Read: Abre o arquivo para leitura.
• Write: Abre o arquivo para escrita. Cria uma nova
  instância do arquivo a cada vez.
• Append: Abre o arquivo para complementar. Cria
  um arquivo apenas se ele não existir
• (Variantes).


                              variável = open(file,mode)
                               variável = open(file,mode)
                              ...
                               ...
                              variável.close()
                               variável.close()



 VIII JOLIM - Maringá, 2012                                 21
Métodos para leitura
• Read: Lê todo o arquivo e retorna uma única string;
• Readline: Lê uma única linha do arquivo;
• Readlines: Lê todo o arquivo e retorna um array de
  linhas.




 VIII JOLIM - Maringá, 2012                             22
Métodos para Escrita
• Write: Escreve uma string no arquivo,
  sequencialmente.
• WriteLines: Escreve um array de string,
  sequencialmente.




 VIII JOLIM - Maringá, 2012                 23
Exemplo 3
• 1 - Criar um arquivo para escrita e escrever nele;
• 2 – Abrir o arquivo para leitura e verificar o
  conteúdo existente;
• 3 – Complementar o arquivo utilizando o modo
  append.




 VIII JOLIM - Maringá, 2012                            24
Estruturas de Dados
• Estruturas de dados englobam tipos compostos e
  dados complexos;
• As estruturas de dados mais famosas são vetores e
  matrizes. Dentre as mais avançadas, a mais
  conhecida é a lista.
• Há ainda outras estruturas como árvore, pilha, fila,
  hash, etc.
• Vale lembrar que uma string também é uma estrutura
  de dados!
• Estudaremos três estruturas: List, Tuple e Dict.



 VIII JOLIM - Maringá, 2012                              25
Estruturas de Dados: List
• A list (lista) é uma das mais conhecidas estruturas de
  dados.
• Em Python, a lista tem estado e comportamento que
  faz uma espécie de mistura entre o comportamento
  de vetores (acesso rápido por índices) e listas
  (“iterabilidade”);




 VIII JOLIM - Maringá, 2012                                26
Estruturas de Dados: List
• Veremos agora alguns métodos para trabalhar com
  listas:
   o append(elemento): adiciona elemento ao fim da
      lista.
   o count(elemento): retorna um inteiro contendo a
      quantidade de vezes que elemento aparece na
      lista.
   o reverse(): inverte a ordem dos elementos da lista.
   o remove(elemento): remove da lista o primeiro
      elemento encontrado.



 VIII JOLIM - Maringá, 2012                               27
Exemplo 4
• Trocar linhas por colunas de uma matriz quadrada.
• Verificar se um número é primo.




 VIII JOLIM - Maringá, 2012                           28
Gerando Listas
• Python possui formas de gerar listas, veremos duas;
• Uma das primeiras funções que todos aprendem em
  Python é a função range, que gera uma lista de
  inteiros;




 VIII JOLIM - Maringá, 2012                             29
Gerando Listas
                             lista1 = range(1500)

                             lista2 = range(1001, 2000)
Gera uma lista de 0 até
1499.



                                      Gera uma lista de 1001
                                      até 1999.




VIII JOLIM - Maringá, 2012                                     30
Gerando Listas
• Há ainda uma forma “avançada” de gerar listas a
  partir de outras listas;
• Trata-se da técnica List Comprehension (Compreensão
  de Listas);
• A sintaxe de List Comprehension vem da linguagem
  funcional Haskell;
• O nome e a sintaxe originam da Matemática:
  Compreensão de listas tem sintaxe praticamente igual
  à notação axiomática de compreensão (Teoria de
  Conjuntos);



 VIII JOLIM - Maringá, 2012                              31
Exemplo 5
• 1 – Criar um vetor B que não contenha as
  ocorrências de um elemento em um vetor A
     o A = [1,2,3,1,2,3,1,2,3,4,5,6]

• 2 - Criar um array que contenha todos os
  elementos múltiplos de 3, 5 e 9 (simultaneamente)
  entre 0 e 10.000.




 VIII JOLIM - Maringá, 2012                           32
Estruturas de Dados: Dict
• Chamaremos dicts de dicionários, para facilitar a fala
  em português;
• Um dicionário é uma estrutura de dados onde cada nó
  é composto por uma chave e um valor;
• Têm este nome pois são praticamente a mesma coisa
  que um dicionário!




 VIII JOLIM - Maringá, 2012                                33
Estruturas de Dados: Dict
dicionario = {}
 dicionario = {}
dicionario["teste"] = "A palavra teste significa que estamos
 dicionario["teste"] = "A palavra teste significa que estamos
testando"
 testando"
dicionario["testado"] = "A palavra testado significa que algo jah
 dicionario["testado"] = "A palavra testado significa que algo jah
passou por um teste"
 passou por um teste"
dicionario["testando"] = "A palavra testando significa que algo
 dicionario["testando"] = "A palavra testando significa que algo
estah passando por um teste"
 estah passando por um teste"


pessoas = {"Maria" : "Nome antigo", "Shyana" : "Nome complicado"}




    VIII JOLIM - Maringá, 2012                                34
Estruturas de Dados: Dict
• Alguns métodos de manipulação de dicionários:
   o get(indice): retorna o valor correspondente a indice.
   o items(): retorna uma lista de tuplas, no formato
     (índice, valor).
   o values(): retorna uma lista com todos os valores do
     dicionário.
   o keys(): retorna uma lista com todas as chaves do
     dicionário.
   o clear(): remove todos os itens do dicionário.




 VIII JOLIM - Maringá, 2012                              35
Estruturas de Dados: Dict
pessoas = {"Maria" : "Nome antigo", "Shyana" : "Nome complicado"}
 pessoas = {"Maria" : "Nome antigo", "Shyana" : "Nome complicado"}

print(pessoas.get("Maria"))
 print(pessoas.get("Maria"))
print(pessoas.items())
 print(pessoas.items())
print(pessoas.values())
 print(pessoas.values())
print(pessoas.keys())
 print(pessoas.keys())
pessoas.clear()
 pessoas.clear()
print(pessoas)
 print(pessoas)




    VIII JOLIM - Maringá, 2012                                36
Utilização
• Muito útil para arrays esparços.
• Hashing.
• Etc.




 VIII JOLIM - Maringá, 2012                37
Exemplo 6
• Criar um dicionário com as pessoas Ana, Bruna,
  Carolina atribuindo suas respectivas idades: 20, 19,
  18 anos.




 VIII JOLIM - Maringá, 2012                              38
Recursão
• Recursão é uma forma alternativa à tradicional
  para desenvolver programas de computador.
• Algumas versões recursivas são mais eficientes que
  imperativas e até mesmo mais simples de se
  implementar.




 VIII JOLIM - Maringá, 2012                            39
Recursão
def funcaoRecursiva(variavel):
 def funcaoRecursiva(variavel):
    if variavel == 10:
     if variavel == 10:
        return variavel
         return variavel          #caso base
                                   #caso base
    return variavel + funcaoRecursiva(variavel+1)
     return variavel + funcaoRecursiva(variavel+1)
    #chamada recursiva
     #chamada recursiva




 VIII JOLIM - Maringá, 2012                          40
Exemplo 7
• Calcular o fatorial de um número utilizando uma
  função recursiva e também uma versão não
  recursiva.
• Comparar a complexidade de implementação.




 VIII JOLIM - Maringá, 2012                         41
Desafio
• Criar um registro (utilizando arquivo) que armazene
  diversas pessoas (Nome e idade) para uma
  pesquisa da universidade.
• Crie uma função que leia o arquivo e apresente na
  tela os devidos dados.




 VIII JOLIM - Maringá, 2012                             42
Orientação a Objetos em
            Python




VIII JOLIM - Maringá, 2012    43
Orientação a objetos
• Python é uma linguagem 100% orientada a objetos,
  significa que tudo em Python é um objeto!
• Veremos nos próximos slides como definir classes,
  atributos, métodos e como aplicar em Python diversos
  conceitos da Orientação a Objetos.




 VIII JOLIM - Maringá, 2012                              44
Definindo Classes
                                 class Veiculo(object):
                                  class Veiculo(object):
                                     def __init(self,parametro):
                                      def __init(self,parametro):
                                        self.parametro = parametro
                                         self.parametro = parametro




Palavra class tipicamente utilizada              Método inicializador da classe
para definir classes! (:




    VIII JOLIM - Maringá, 2012                                                    45
Definindo Atributos
 • Existem duas formas de definir atributos de instância
   em Python;

                               class Veiculo(object):
                                class Veiculo(object):
                                   pass
                                    pass

                               fusca = Veiculo()
                                fusca = Veiculo()
                               fusca.marca = "Volkswagen"
                                fusca.marca = "Volkswagen"
                               fusca.ano = 1972
                                fusca.ano = 1972

class Veiculo(object):
 class Veiculo(object):
    marca = None
     marca = None
    ano = None
     ano = None

gol = Veiculo()
 gol = Veiculo()
gol.marca = "Volkswagen"
 gol.marca = "Volkswagen"
gol.ano = 2008
 gol.ano = 2008
  VIII JOLIM - Maringá, 2012                                 46
Definindo Atributos
  class Veiculo(object):
   class Veiculo(object):
      marca = None
       marca = None
      ano = None
       ano = None

  gol = Veiculo()
   gol = Veiculo()
  gol.marca = "Volkswagen"
   gol.marca = "Volkswagen"
  gol.ano = 2008
   gol.ano = 2008
  gol.bazinga = True
   gol.bazinga = True




VIII JOLIM - Maringá, 2012    47
Atributos
• Nem sempre queremos que os atributos sejam
  acessados diretamente
• Para isso podemos criar métodos Getters e Setters
                   Pessoa.getNome()
                    Pessoa.getNome()
                   Pessoa.setNome(nome)
                    Pessoa.setNome(nome)


• Ainda podemos tornar os atributos privados
                   Pessoa.__nome = “nome”
                    Pessoa.__nome = “nome”
                   Pessoa.__idade = idade
                    Pessoa.__idade = idade




 VIII JOLIM - Maringá, 2012                           48
Definindo métodos
• Um método é um atributo com comportamento;
• Para não fundir conceitos, vamos apenas trabalhar
  com métodos da forma tradicional, ou quase isso;
• Para definir métodos e funções em Python utilizamos
  a palavra reservada def;


• Def __init__(self,atr1,atr2)
• Def getNome(self): return self.__nome




 VIII JOLIM - Maringá, 2012                             49
Herança de classes
class Atleta(Pessoa):
 class Atleta(Pessoa):
    peso = None
     peso = None
    aposentado = None
     aposentado = None

        def __init__(self, nome, idade, peso):
         def __init__(self, nome, idade, peso):
            super(Atleta, self).__init__(nome, idade)
             super(Atleta, self).__init__(nome, idade)
            self.peso = peso
             self.peso = peso
            self.aposentado = False
             self.aposentado = False

        def aquecer(self):
         def aquecer(self):
            print("Atleta aquecido!")
             print("Atleta aquecido!")

        def aposentar(self):
         def aposentar(self):
            self.aposentado = True
             self.aposentado = True




VIII JOLIM - Maringá, 2012                               50
Herança de classes
class Corredor(Atleta):
 class Corredor(Atleta):
    def correr(self):
     def correr(self):
        print("Corredor correndo!")
         print("Corredor correndo!")

         class Nadador(Atleta):
          class Nadador(Atleta):
             def nadar(self):
              def nadar(self):
                 print("Nadador nadando!")
                  print("Nadador nadando!")

                    class Ciclista(Atleta):
                     class Ciclista(Atleta):
                        def pedalar(self):
                         def pedalar(self):
                            print("Ciclista pedalando!")
                             print("Ciclista pedalando!")




 VIII JOLIM - Maringá, 2012                                 51
Herança múltipla
• Há uma peculiaridade no diagrama de classes: a classe
  TriAtleta herda de três outras classes;
• Muitas pessoas podem pensar: mas isso é impossível!
• Em Python, assim como em C++, isso é possível sim!
  Logo, a classe TriAtleta fica bem simples:


        class TriAtleta(Ciclista, Nadador, Corredor):
         class TriAtleta(Ciclista, Nadador, Corredor):
            pass
             pass




  VIII JOLIM - Maringá, 2012                              52
Exemplo 8
• Criar uma classe Estudante, com atributo curso.
  Esta classe deve herdar da classe Pessoa os
  atributos nome e idade.
• Uma pessoa tem um carro. Criar uma classe Carro
  e fazer que uma pessoa tenha um atributo do tipo
  Carro.




VIII JOLIM - Maringá, 2012                           53
Exceções
• Em Python, assim como em C++ e Java, o conceito de
  Exceção está ligado à orientação a objetos.
• Uma exceção é um objeto, possui estado e
  comportamento.
• O tratamento de exceções pode ser utilizado para
  aumentar o nível de abstração do código.
• É possível usar exceções também para encapsular
  dados específicos sobre o erro levantado.
• Vamos aprender como criar, tratar e levantar uma
  exceção em Python!



 VIII JOLIM - Maringá, 2012                          54
Exceções
• Primeiramente, vamos criar nossas exceções.
• Uma exceção personalizada é modelada por uma
  classe qualquer, que herda da classe BaseException;
• Nas versões anteriores de Python qualquer classe
  podia modelar uma exceção. Isso gerava a má prática
  de lançar exceções modeladas pela classe string;




 VIII JOLIM - Maringá, 2012                             55
Exceções
def alterarPeso(self, peso):
 def alterarPeso(self, peso):
        if peso > 0 and peso < 400:
         if peso > 0 and peso < 400:
            self.__peso = peso
             self.__peso = peso
        else:
         else:
            raise Exception("%f nao eh um peso valido!", %(peso))
             raise Exception("%f nao eh um peso valido!", %(peso))




    VIII JOLIM - Maringá, 2012                                56
Exceções
• Python levanta diversas exceções internamente:
  ValueError, IOError, TypeError;
• Vamos tratar exceções!
• Para tratar exceções em Python utilizamos try…
  except… else… finally;




 VIII JOLIM - Maringá, 2012                        57
Exceções
def incrementar(numero):
 def incrementar(numero):
    try:
     try:
         return numero+1
          return numero+1
     except:
      except:
           raise Exception(“É necessário um número para somar”)
            raise Exception(“É necessário um número para somar”)


def incrementar(numero):
 def incrementar(numero):
    try:
     try:
         return numero+1
          return numero+1
     except TypeError:
      except TypeError:
           return int(numero)+1
            return int(numero)+1


VIII JOLIM - Maringá, 2012                                    58
Referências
• www.python.org
• www.pythonbrasil.org
• www.djangobrasil.org
• www.plone.org
• www.tchezope.org




 VIII JOLIM - Maringá, 2012                 59

Minicurso Python - Apresentado no JOLIM 2012

  • 1.
    Minicurso de Python •Conceitos Básicos, Estruturas de Dados e Orientação a objetos Nathan Siegle Hartmann VIII JOLIM - Maringá, 2012 1
  • 2.
    O que éPython? • Python é uma linguagem de programação de altíssimo nível (VHLPL – very high level programming language), interpretada, orientada a objetos e dinâmica criada por Guido van Rossum em 1991. • A linguagem tem um modelo de desenvolvimento aberto mantido pela PSF (Python Software Foundation). VIII JOLIM - Maringá, 2012 2
  • 3.
    O que éPython? • A linguagem foi projetada com a filosofia de enfatizar a importância do esforço do programador sobre o esforço computacional; • Prioriza a legibilidade do código e a expressividade. VIII JOLIM - Maringá, 2012 3
  • 4.
    Quem usa Python? •Atualmente Python é uma das linguagens mais utilizadas em grandes projetos no mundo. Engenheiros de software de empresas como Google afirmam que o uso de Python é essencial para o funcionamento de famosas ferramentas do Google. “C++ quando necessitamos, Python quando podemos”. • As ferramentas Google Doc, Picasa, Orkut Help, dentre outras da empresa americana Google utilizam a linguagem Python. VIII JOLIM - Maringá, 2012 4
  • 5.
    Quem usa Python? •Grande parte da API do Google é desenvolvida em Python; • O Google App Engine (framework web online mantido pelo Google) oferece suporte total a Python e foi desenvolvido também em Python; • Zope, um dos melhores servidores de aplicação da atualidade foi desenvolvido em Python; • Linux tem diversar rotinas em Python. VIII JOLIM - Maringá, 2012 5
  • 6.
    Quem usa Python? •Empresas que patrocinam a Python Software Foundation: ActiveState; ASTi; Array BioPharma, Inc.; BizRate.com; Canonical; CCP Games; cPacket Networks; EarnMyDegree.com; Enthought, Inc.; Google; HitFlip, Inc.; IronPort Systems; Madison Tyler LLC; Merfin LLC; Microsoft; O'Reilly & Associates, Inc.; Opsware, Inc.; Strakt Holdings, Inc.; Sun Microsystems; Tabblo; ZeOmega; Zope Corporation. VIII JOLIM - Maringá, 2012 6
  • 7.
    Por que usarPython? • Python é portável, você não precisa compilar seu programa cada vez que muda de sistema operacional, basta apenas que exista um interpretador Python instalado. • Python é open-source com licença flexível, há uma comunidade que desenvolve a linguagem, que está sempre aprimorando-a e qualquer um de nós pode fazer parte dessa comunidade. A licença flexível nos permite desenvolver softwares proprietários com ferramentas livres. VIII JOLIM - Maringá, 2012 7
  • 8.
    Por que usarPython? • Python é simples e auto-descritiva, algumas linguagens de programação têm sintaxe complexa ou difícil de memorizar. VIII JOLIM - Maringá, 2012 8
  • 9.
    Resumo de características •Case sensitive; • Tipagem dinâmica; • Linguagem pura: 100% orientada a objetos; • Código auto-descritivo: simples e de fácil leitura; • Programação em alto-nível: não permite manipulação de ponteiros; • Não suporta sobrecarga de funções; VIII JOLIM - Maringá, 2012 9
  • 10.
    Sintaxe #comentário de uma #comentário de uma if x > y: if x > y: linha linha big = x big = x small = y small = y “““comentário de um “““comentário de um else: else: bloco“““ bloco“““ big = y big = y small = x small = x ‘‘‘comentário de um ‘‘‘comentário de um bloco‘‘‘ bloco‘‘‘ Simples e objetivo! Não é preciso saber programação para entender este código, basta um conhecimento básico em inglês! VIII JOLIM - Maringá, 2012 10
  • 11.
    Variáveis • O conceitode variável em Python é representado sempre por um objeto. Na verdade, Python é uma linguagem pura, ou seja, tudo em Python é um objeto. • Toda variável é uma referência! • Variáveis armazenam endereços de memória e não valores! VIII JOLIM - Maringá, 2012 11
  • 12.
    Operadores • Os operadoresdo Python: Aritméticos Comparação Lógicos + == and - != or * > not / < ** >= <= in is VIII JOLIM - Maringá, 2012 12
  • 13.
    Procedimentos e Funções •Procedimentos não • Funções retornam retornam valores valores def procedimento(): def procedimento(): def hora(): def hora(): print “Hello World” print “Hello World” from datetime import datetime from datetime import datetime return datetime.now() return datetime.now() VIII JOLIM - Maringá, 2012 13
  • 14.
    Procedimentos e Funções •Valores padrão (Default) • Se nenhum valor for passado como parâmetro, é assumido o valor padrão def teste(var = 1): def teste(var = 1): return var+1 return var+1 VIII JOLIM - Maringá, 2012 14
  • 15.
    Exemplo 1 VIII JOLIM- Maringá, 2012 15
  • 16.
    Strings • A stringem Python é representada pela classe str. Toda string possui estado e comportamento provido pela classe str. • Podem ser representadas utilizando “ ou ‘. • Ex: “Meu nome é Nathan”. • Ex: ‘Meu nome é Nathan’. • Ex: “Meu nome é ‘Nathan’” VIII JOLIM - Maringá, 2012 16
  • 17.
    Strings • Conheceremos agoraalguns métodos para trabalhar com strings: o __len__(): Retorna o tamanho da string; o capitalize(): Retorna a mesma string com a primeira letra em maiúsculo. o upper(): Retorna a mesma string com todas as letras em maiúsculo. o lower(): Retorna a mesma string com todas as letras em minúsculo. VIII JOLIM - Maringá, 2012 17
  • 18.
    Strings • Mais métodos: o replace(antigo, novo): Retorna a mesma string com o valor novo em todas as ocorrências de antigo. o split([separador]): Retorna uma lista de strings. Caso o separador não seja especificado, a lista será dividida por espaços em branco. VIII JOLIM - Maringá, 2012 18
  • 19.
    Exemplo 2 • Criptografaruma string, substituindo todas as ocorrências de um ou mais elementos por símbolos especiais. • Por exemplo: Substituir a ocorrência do símbolo “a” pelo símbolo “*”. VIII JOLIM - Maringá, 2012 19
  • 20.
    Lendo e Escrevendoem Arquivos • Leitura de arquivos em Python é simples como em C! • Arquivos são objetos do tipo file; • Para a abertura de um arquivo, utilizamos a função open; • A função open funciona como uma fábrica de instâncias. VIII JOLIM - Maringá, 2012 20
  • 21.
    Formas de Abrirum Arquivo • Read: Abre o arquivo para leitura. • Write: Abre o arquivo para escrita. Cria uma nova instância do arquivo a cada vez. • Append: Abre o arquivo para complementar. Cria um arquivo apenas se ele não existir • (Variantes). variável = open(file,mode) variável = open(file,mode) ... ... variável.close() variável.close() VIII JOLIM - Maringá, 2012 21
  • 22.
    Métodos para leitura •Read: Lê todo o arquivo e retorna uma única string; • Readline: Lê uma única linha do arquivo; • Readlines: Lê todo o arquivo e retorna um array de linhas. VIII JOLIM - Maringá, 2012 22
  • 23.
    Métodos para Escrita •Write: Escreve uma string no arquivo, sequencialmente. • WriteLines: Escreve um array de string, sequencialmente. VIII JOLIM - Maringá, 2012 23
  • 24.
    Exemplo 3 • 1- Criar um arquivo para escrita e escrever nele; • 2 – Abrir o arquivo para leitura e verificar o conteúdo existente; • 3 – Complementar o arquivo utilizando o modo append. VIII JOLIM - Maringá, 2012 24
  • 25.
    Estruturas de Dados •Estruturas de dados englobam tipos compostos e dados complexos; • As estruturas de dados mais famosas são vetores e matrizes. Dentre as mais avançadas, a mais conhecida é a lista. • Há ainda outras estruturas como árvore, pilha, fila, hash, etc. • Vale lembrar que uma string também é uma estrutura de dados! • Estudaremos três estruturas: List, Tuple e Dict. VIII JOLIM - Maringá, 2012 25
  • 26.
    Estruturas de Dados:List • A list (lista) é uma das mais conhecidas estruturas de dados. • Em Python, a lista tem estado e comportamento que faz uma espécie de mistura entre o comportamento de vetores (acesso rápido por índices) e listas (“iterabilidade”); VIII JOLIM - Maringá, 2012 26
  • 27.
    Estruturas de Dados:List • Veremos agora alguns métodos para trabalhar com listas: o append(elemento): adiciona elemento ao fim da lista. o count(elemento): retorna um inteiro contendo a quantidade de vezes que elemento aparece na lista. o reverse(): inverte a ordem dos elementos da lista. o remove(elemento): remove da lista o primeiro elemento encontrado. VIII JOLIM - Maringá, 2012 27
  • 28.
    Exemplo 4 • Trocarlinhas por colunas de uma matriz quadrada. • Verificar se um número é primo. VIII JOLIM - Maringá, 2012 28
  • 29.
    Gerando Listas • Pythonpossui formas de gerar listas, veremos duas; • Uma das primeiras funções que todos aprendem em Python é a função range, que gera uma lista de inteiros; VIII JOLIM - Maringá, 2012 29
  • 30.
    Gerando Listas lista1 = range(1500) lista2 = range(1001, 2000) Gera uma lista de 0 até 1499. Gera uma lista de 1001 até 1999. VIII JOLIM - Maringá, 2012 30
  • 31.
    Gerando Listas • Háainda uma forma “avançada” de gerar listas a partir de outras listas; • Trata-se da técnica List Comprehension (Compreensão de Listas); • A sintaxe de List Comprehension vem da linguagem funcional Haskell; • O nome e a sintaxe originam da Matemática: Compreensão de listas tem sintaxe praticamente igual à notação axiomática de compreensão (Teoria de Conjuntos); VIII JOLIM - Maringá, 2012 31
  • 32.
    Exemplo 5 • 1– Criar um vetor B que não contenha as ocorrências de um elemento em um vetor A o A = [1,2,3,1,2,3,1,2,3,4,5,6] • 2 - Criar um array que contenha todos os elementos múltiplos de 3, 5 e 9 (simultaneamente) entre 0 e 10.000. VIII JOLIM - Maringá, 2012 32
  • 33.
    Estruturas de Dados:Dict • Chamaremos dicts de dicionários, para facilitar a fala em português; • Um dicionário é uma estrutura de dados onde cada nó é composto por uma chave e um valor; • Têm este nome pois são praticamente a mesma coisa que um dicionário! VIII JOLIM - Maringá, 2012 33
  • 34.
    Estruturas de Dados:Dict dicionario = {} dicionario = {} dicionario["teste"] = "A palavra teste significa que estamos dicionario["teste"] = "A palavra teste significa que estamos testando" testando" dicionario["testado"] = "A palavra testado significa que algo jah dicionario["testado"] = "A palavra testado significa que algo jah passou por um teste" passou por um teste" dicionario["testando"] = "A palavra testando significa que algo dicionario["testando"] = "A palavra testando significa que algo estah passando por um teste" estah passando por um teste" pessoas = {"Maria" : "Nome antigo", "Shyana" : "Nome complicado"} VIII JOLIM - Maringá, 2012 34
  • 35.
    Estruturas de Dados:Dict • Alguns métodos de manipulação de dicionários: o get(indice): retorna o valor correspondente a indice. o items(): retorna uma lista de tuplas, no formato (índice, valor). o values(): retorna uma lista com todos os valores do dicionário. o keys(): retorna uma lista com todas as chaves do dicionário. o clear(): remove todos os itens do dicionário. VIII JOLIM - Maringá, 2012 35
  • 36.
    Estruturas de Dados:Dict pessoas = {"Maria" : "Nome antigo", "Shyana" : "Nome complicado"} pessoas = {"Maria" : "Nome antigo", "Shyana" : "Nome complicado"} print(pessoas.get("Maria")) print(pessoas.get("Maria")) print(pessoas.items()) print(pessoas.items()) print(pessoas.values()) print(pessoas.values()) print(pessoas.keys()) print(pessoas.keys()) pessoas.clear() pessoas.clear() print(pessoas) print(pessoas) VIII JOLIM - Maringá, 2012 36
  • 37.
    Utilização • Muito útilpara arrays esparços. • Hashing. • Etc. VIII JOLIM - Maringá, 2012 37
  • 38.
    Exemplo 6 • Criarum dicionário com as pessoas Ana, Bruna, Carolina atribuindo suas respectivas idades: 20, 19, 18 anos. VIII JOLIM - Maringá, 2012 38
  • 39.
    Recursão • Recursão éuma forma alternativa à tradicional para desenvolver programas de computador. • Algumas versões recursivas são mais eficientes que imperativas e até mesmo mais simples de se implementar. VIII JOLIM - Maringá, 2012 39
  • 40.
    Recursão def funcaoRecursiva(variavel): deffuncaoRecursiva(variavel): if variavel == 10: if variavel == 10: return variavel return variavel #caso base #caso base return variavel + funcaoRecursiva(variavel+1) return variavel + funcaoRecursiva(variavel+1) #chamada recursiva #chamada recursiva VIII JOLIM - Maringá, 2012 40
  • 41.
    Exemplo 7 • Calcularo fatorial de um número utilizando uma função recursiva e também uma versão não recursiva. • Comparar a complexidade de implementação. VIII JOLIM - Maringá, 2012 41
  • 42.
    Desafio • Criar umregistro (utilizando arquivo) que armazene diversas pessoas (Nome e idade) para uma pesquisa da universidade. • Crie uma função que leia o arquivo e apresente na tela os devidos dados. VIII JOLIM - Maringá, 2012 42
  • 43.
    Orientação a Objetosem Python VIII JOLIM - Maringá, 2012 43
  • 44.
    Orientação a objetos •Python é uma linguagem 100% orientada a objetos, significa que tudo em Python é um objeto! • Veremos nos próximos slides como definir classes, atributos, métodos e como aplicar em Python diversos conceitos da Orientação a Objetos. VIII JOLIM - Maringá, 2012 44
  • 45.
    Definindo Classes class Veiculo(object): class Veiculo(object): def __init(self,parametro): def __init(self,parametro): self.parametro = parametro self.parametro = parametro Palavra class tipicamente utilizada Método inicializador da classe para definir classes! (: VIII JOLIM - Maringá, 2012 45
  • 46.
    Definindo Atributos •Existem duas formas de definir atributos de instância em Python; class Veiculo(object): class Veiculo(object): pass pass fusca = Veiculo() fusca = Veiculo() fusca.marca = "Volkswagen" fusca.marca = "Volkswagen" fusca.ano = 1972 fusca.ano = 1972 class Veiculo(object): class Veiculo(object): marca = None marca = None ano = None ano = None gol = Veiculo() gol = Veiculo() gol.marca = "Volkswagen" gol.marca = "Volkswagen" gol.ano = 2008 gol.ano = 2008 VIII JOLIM - Maringá, 2012 46
  • 47.
    Definindo Atributos class Veiculo(object): class Veiculo(object): marca = None marca = None ano = None ano = None gol = Veiculo() gol = Veiculo() gol.marca = "Volkswagen" gol.marca = "Volkswagen" gol.ano = 2008 gol.ano = 2008 gol.bazinga = True gol.bazinga = True VIII JOLIM - Maringá, 2012 47
  • 48.
    Atributos • Nem semprequeremos que os atributos sejam acessados diretamente • Para isso podemos criar métodos Getters e Setters Pessoa.getNome() Pessoa.getNome() Pessoa.setNome(nome) Pessoa.setNome(nome) • Ainda podemos tornar os atributos privados Pessoa.__nome = “nome” Pessoa.__nome = “nome” Pessoa.__idade = idade Pessoa.__idade = idade VIII JOLIM - Maringá, 2012 48
  • 49.
    Definindo métodos • Ummétodo é um atributo com comportamento; • Para não fundir conceitos, vamos apenas trabalhar com métodos da forma tradicional, ou quase isso; • Para definir métodos e funções em Python utilizamos a palavra reservada def; • Def __init__(self,atr1,atr2) • Def getNome(self): return self.__nome VIII JOLIM - Maringá, 2012 49
  • 50.
    Herança de classes classAtleta(Pessoa): class Atleta(Pessoa): peso = None peso = None aposentado = None aposentado = None def __init__(self, nome, idade, peso): def __init__(self, nome, idade, peso): super(Atleta, self).__init__(nome, idade) super(Atleta, self).__init__(nome, idade) self.peso = peso self.peso = peso self.aposentado = False self.aposentado = False def aquecer(self): def aquecer(self): print("Atleta aquecido!") print("Atleta aquecido!") def aposentar(self): def aposentar(self): self.aposentado = True self.aposentado = True VIII JOLIM - Maringá, 2012 50
  • 51.
    Herança de classes classCorredor(Atleta): class Corredor(Atleta): def correr(self): def correr(self): print("Corredor correndo!") print("Corredor correndo!") class Nadador(Atleta): class Nadador(Atleta): def nadar(self): def nadar(self): print("Nadador nadando!") print("Nadador nadando!") class Ciclista(Atleta): class Ciclista(Atleta): def pedalar(self): def pedalar(self): print("Ciclista pedalando!") print("Ciclista pedalando!") VIII JOLIM - Maringá, 2012 51
  • 52.
    Herança múltipla • Háuma peculiaridade no diagrama de classes: a classe TriAtleta herda de três outras classes; • Muitas pessoas podem pensar: mas isso é impossível! • Em Python, assim como em C++, isso é possível sim! Logo, a classe TriAtleta fica bem simples: class TriAtleta(Ciclista, Nadador, Corredor): class TriAtleta(Ciclista, Nadador, Corredor): pass pass VIII JOLIM - Maringá, 2012 52
  • 53.
    Exemplo 8 • Criaruma classe Estudante, com atributo curso. Esta classe deve herdar da classe Pessoa os atributos nome e idade. • Uma pessoa tem um carro. Criar uma classe Carro e fazer que uma pessoa tenha um atributo do tipo Carro. VIII JOLIM - Maringá, 2012 53
  • 54.
    Exceções • Em Python,assim como em C++ e Java, o conceito de Exceção está ligado à orientação a objetos. • Uma exceção é um objeto, possui estado e comportamento. • O tratamento de exceções pode ser utilizado para aumentar o nível de abstração do código. • É possível usar exceções também para encapsular dados específicos sobre o erro levantado. • Vamos aprender como criar, tratar e levantar uma exceção em Python! VIII JOLIM - Maringá, 2012 54
  • 55.
    Exceções • Primeiramente, vamoscriar nossas exceções. • Uma exceção personalizada é modelada por uma classe qualquer, que herda da classe BaseException; • Nas versões anteriores de Python qualquer classe podia modelar uma exceção. Isso gerava a má prática de lançar exceções modeladas pela classe string; VIII JOLIM - Maringá, 2012 55
  • 56.
    Exceções def alterarPeso(self, peso): def alterarPeso(self, peso): if peso > 0 and peso < 400: if peso > 0 and peso < 400: self.__peso = peso self.__peso = peso else: else: raise Exception("%f nao eh um peso valido!", %(peso)) raise Exception("%f nao eh um peso valido!", %(peso)) VIII JOLIM - Maringá, 2012 56
  • 57.
    Exceções • Python levantadiversas exceções internamente: ValueError, IOError, TypeError; • Vamos tratar exceções! • Para tratar exceções em Python utilizamos try… except… else… finally; VIII JOLIM - Maringá, 2012 57
  • 58.
    Exceções def incrementar(numero): defincrementar(numero): try: try: return numero+1 return numero+1 except: except: raise Exception(“É necessário um número para somar”) raise Exception(“É necessário um número para somar”) def incrementar(numero): def incrementar(numero): try: try: return numero+1 return numero+1 except TypeError: except TypeError: return int(numero)+1 return int(numero)+1 VIII JOLIM - Maringá, 2012 58
  • 59.
    Referências • www.python.org • www.pythonbrasil.org •www.djangobrasil.org • www.plone.org • www.tchezope.org VIII JOLIM - Maringá, 2012 59