SlideShare uma empresa Scribd logo
1 de 77
Python - 3ª Aula
   Bruno Gama Catão
Relembrando ...

• Na aula passada vimos:
 • Como criar funções;
 • Listas, tuplas, conjuntos e dicionários;
 • Módulos random, urllib2 e zipfile.
Funções

def fatorial(n):
    if n == 0:
        return 1;
    return n * fatorial(n - 1)

#Chamando a funcao
print str(fatorial(5))
Listas

• Padrão:
   •   legumes = ['Batata', 'Cenoura', 'Repolho']


• Listas compactadas:
  salarios = [510, 720, 850, 1200]

 #aumento de 10%

 salarios = [s * 1.01 for s in salarios]
Tuplas

#tupla simples
telefone = (83, 33102222)
print 'Telefone (%d) %d' % telefone

#Lista de tuplas
telefones = [(83, 33332222), (84, 32215678)]
for tel in telefones:
    print 'Telefone (%d) %d' % tel
Conjuntos

# Lista de compras
compras = ['laranja', 'uva', 'maca', 'uva']
# Verificando quais frutas foram compradas
frutas = set(compras)

print frutas
Dicionários


aluno = {"nome" : "Bruno", "curso" : "SI", "media" : 8.2};

print "%s - %.2f" % (aluno["nome"], aluno["media"])
Módulo random
import random

#Sorteando as dezenas
dezenas = random.sample(range(1, 61), 6)

#Ordenando
dezenas.sort()

print dezenas
Módulo urllib2


import urllib2

url = raw_input('Digite a URL: ')
print urllib2.urlopen(url).readlines()
Módulo zipfile

# -*- coding: latin-1 -*-
from zipfile import ZipFile

arquivo = raw_input('Digite o nome do arquivo: ')
diretorio = raw_input('Digite o diretório de destino: ')
zip = ZipFile(arquivo)
zip.extractall(diretorio)
Resposta ao desafio
# -*- coding: latin-1 -*-
import os

arquivo = open(raw_input('Qual o arquivo do cabeçalho ?'))
cabecalho = arquivo.read()
arquivo = open(raw_input('Qual o arquivo do corpo ?'))
corpo = arquivo.read()
arquivo = open(raw_input('Qual o arquivo do rodapé ?'))
rodape = arquivo.read()
diretorio = raw_input('Qual o diretório das imagens ?')
formato   = raw_input('Qual o formato das imagens ?')
album     = raw_input('Qual o nome do álbum ?')
pagina    = cabecalho % album
for arquivo in os.listdir(diretorio):
    if arquivo.endswith(formato):
        pagina += corpo % (arquivo, arquivo)
pagina += rodape
arquivo = open(os.path.join(diretorio, "album.html"), "w")
arquivo.write(pagina)
arquivo.close()
Criando seus próprios
      módulos
• Um módulo em Python é um arquivo .py;
• Módulos podem ser organizados em
  diretórios (pacotes);
• Para utilizar mais de um módulo em uma
  aplicação é necessário importar este outro
  módulo.
Exemplo

• Criem um novo projeto PyDev chamado
  Aula3;
• Criem dois módulos:
 • funcoes;
 • principal.
Módulo “funcoes”

 def fatorial(n):
     if n == 0:
         return 1
     return n * fatorial(n - 1)

 def somatorio(n):
     if n == 0:
         return 0
     return n + somatorio(n - 1)
Módulo “funcoes”
                       Lembram de recursividade ?
 def fatorial(n):
     if n == 0:
         return 1
     return n * fatorial(n - 1)

 def somatorio(n):
     if n == 0:
         return 0
     return n + somatorio(n - 1)
Módulo “principal”

# -*- coding: latin-1 -*-
import funcoes

n = int(raw_input('Digite um número: '))
print "fat(%d) = %d" % (n, funcoes.fatorial(n))

n = int(raw_input('Digite um número: '))
print "sum(%d) = %d" % (n, funcoes.somatorio(n))
Módulo “principal”

# -*- coding: latin-1 -*-
import funcoes            import <nome_modulo>

n = int(raw_input('Digite um número: '))
print "fat(%d) = %d" % (n, funcoes.fatorial(n))

n = int(raw_input('Digite um número: '))
print "sum(%d) = %d" % (n, funcoes.somatorio(n))
Módulo “principal”

# -*- coding: latin-1 -*-
import funcoes            import <nome_modulo>

n = int(raw_input('Digite um número: '))
print "fat(%d) = %d" % (n, funcoes.fatorial(n))

n = int(raw_input('Digite um número: '))
print "sum(%d) = %d" % (n, funcoes.somatorio(n))


                            nome_modulo.funcao
Outras formas de
  importação
# -*- coding: latin-1 -*-
from funcoes import *

n = int(raw_input('Digite um número: '))
print "fat(%d) = %d" % (n, fatorial(n))

n = int(raw_input('Digite um número: '))
print "sum(%d) = %d" % (n, somatorio(n))
Outras formas de
  importação
               from <nome_modulo> import <parte|*>

# -*- coding: latin-1 -*-
from funcoes import *

n = int(raw_input('Digite um número: '))
print "fat(%d) = %d" % (n, fatorial(n))

n = int(raw_input('Digite um número: '))
print "sum(%d) = %d" % (n, somatorio(n))
Outras formas de
  importação
               from <nome_modulo> import <parte|*>

# -*- coding: latin-1 -*-
from funcoes import *

n = int(raw_input('Digite um número: '))
print "fat(%d) = %d" % (n, fatorial(n))

n = int(raw_input('Digite um número: '))
print "sum(%d) = %d" % (n, somatorio(n))


                      sem o nome do módulo !
Outras formas de
      importação
• Você pode importar apenas uma função,
  isso diminui o uso de memória pela sua
  aplicação !

    # -*- coding: latin-1 -*-
    from funcoes import fatorial

    n = int(raw_input('Digite um número: '))
    print "fat(%d) = %d" % (n, fatorial(n))
Atenção
• Quando se importa um módulo o seu
  conteúdo é executado;
• Portanto, se no corpo do módulo existirem
  comandos soltos, ou seja, que não estejam
  dentro de uma função, estes comandos
  serão executados sempre que o módulo
  for importado !
Exemplo
• Vamos modificar o nosso módulo “funcoes”,
  execute o módulo “principal” e veja o que acontece:
         # -*- coding: latin-1 -*-

         def fatorial(n):
             if n == 0:
                 return 1;
             return n * fatorial(n - 1)

         def somatorio(n):
             if n == 0:
                 return 0;
             return n + somatorio(n - 1)

         print 'Módulo funcoes carregado !'
Mas ...

• E se eu quiser que o meu módulo tenha
  apenas funções quando for importado, mas
  que faça alguma coisa quando for
  executado diretamente ?
Ponto de Entrada
         “main”
• Aqui está o truque para fazer isso:
    # -*- coding: latin-1 -*-

    def fatorial(n):
        if n == 0:
            return 1;
        return n * fatorial(n - 1)

    def somatorio(n):
        if n == 0:
            return 0;
        return n + somatorio(n - 1)

    if __name__ == "__main__":
        print 'Módulo funcoes carregado !'
Pacotes
• Pacotes são diretórios onde podemos
  agrupar os nossos módulos;
• São uma forma de organização;
• Todo pacote pode ter um módulo chamado
  __init__ que será importado
  automaticamente sempre que alguém
  utilizar o pacote.
Exemplo
• Crie um PyDev package chamado util em
  seu projeto;
• Veja que automaticamente foi criado um
  módulo __init__;
• Movam o módulo funcoes (é só arrastar
  com o mouse) para o pacote util.
Modificando o módulo
      principal
  # -*- coding: latin-1 -*-
  from util.funcoes import *

  n = int(raw_input('Digite um número: '))
  print "fat(%d) = %d" % (n, fatorial(n))

  n = int(raw_input('Digite um número: '))
  print "sum(%d) = %d" % (n, somatorio(n))
Modificando o módulo
      principal
            from <pacote>.<nome_modulo> import <parte|*>

  # -*- coding: latin-1 -*-
  from util.funcoes import *

  n = int(raw_input('Digite um número: '))
  print "fat(%d) = %d" % (n, fatorial(n))

  n = int(raw_input('Digite um número: '))
  print "sum(%d) = %d" % (n, somatorio(n))
E o __init__ ?
• Vamos adicionar algum conteúdo a este
  módulo para ver o seu funcionamento:
        print "Pacote util carregado !"


• Agora, executem novamente o módulo
  principal.
Documentação

• A documentação de funções em Python é
  feita por uma String de múltiplas linhas logo
  em seu início;
• Toda entidade de Python (objetos, etc) têm
  um atributo __doc__ que permite visualizar
  esta documentação.
Exemplo
• No módulo util.funcoes:
 def fatorial(n):
     '''
     Esta função calcula o fatorial de um número
     '''
     if n == 0:
         return 1;
     return n * fatorial(n - 1)

• Módulo principal:
        from util.funcoes import fatorial

        print fatorial.__doc__
Módulos externos
• Infelizmente Python não possui um procedimento
  padrão para instalação de módulos externos;
• Cada plataforma possui a sua estratégia;
• Veremos como fazer a instalação de um módulo
  PIL (Python Imaging Library);
• Este módulo possui funções para manipulação
  avançada de imagens.
Instalando o PIL
    MacOSX - Snow Leopard
•   É a instalação mais complicada !
•   É necessário antes ter instalado o XCode, pacote de
    desenvolvimento da Apple que vem nos DVDs de
    instalação do Mac;
•   É necessário fazer o download da libjpeg e do PIL:
    •   http://ethan.tira-thompson.org/Mac_OS_X_Ports.html
    •   http://www.pythonware.com/products/pil/
Instalando o PIL
MacOSX - Snow Leopard

• Instale a libjpeg (pacote dmg);
• Descompacte o PIL (Imaging-1.1.7.tar.gz);
• Dentro da pasta descompactada digite:
  •   sudo python setup.py build

  •   sudo python setup.py install
Instalando o PIL
           Ubuntu

• No terminal digite:
 • sudo apt-get install python-imaging
• É só isso !
Instalando o PIL
         Windows
• Faça o download do instalador para
  Windows no endereço:
 • http://www.pythonware.com/products/pil/
• Execute o instalador:
 • PIL-1.1.7.win32-py2.6.exe
• É só isso !
Configurando o PyDev
•   Para adicionar módulos externos ao seu projeto PyDev é
    necessário:
•   Clique com o botão direito do mouse sobre o projeto e
    escolha “Properties”;
•   Selecione a sessão “PyDev - PYTHONPATH”;
•   Selecione a aba “External Libraries”;
•   Clique no botão “Add source folder”;
•   Localize o diretório onde o PIL foi instalado:
    •   é sempre bom prestar atenção nos instaladores !
•   Clique no botão “OK”.
Exemplo
      • Crie um módulo chamado testepil:
import Image

im = Image.open(raw_input("Digite o caminho para uma imagem: "))
print im.format, im.size, im.mode
Exemplo
   Criando um thumbnail
import Image

tamanho = (128, 128)

entrada = raw_input("Digite o caminho para uma imagem: ")
im = Image.open(entrada)
im.thumbnail(tamanho)
saida = raw_input("Digite o caminho para o thumbnail: ")
im.save(saida, "JPEG")
Desafio para já

• Modifiquem o gerador de álbuns para:
 • Gerar um thumbnail para cada foto;
 • Exibir estes thumbnails na página do álbum;
• Bônus: O usuário deveria poder escolher o
  tamanho do thumbnail !
# -*- coding: latin-1 -*-
import os
import Image

cabecalho = '''<html>
 <head><title></title></head>
 <body>
 <h1>%s</h1>'''
corpo = '<a href="%s"><img src="%s"/></a>'
rodape = '''</body>
</html>'''
diretorio = raw_input('Qual o diretório das imagens ?')
formato   = raw_input('Qual o formato das imagens ?')
album     = raw_input('Qual o nome do álbum ?')
tamanho   = int(raw_input('Qual o tamanho do thumbnail ?'))
pagina    = cabecalho % album
for arquivo in os.listdir(diretorio):
    if arquivo.endswith(formato):
        #Geração do thumbnail
        arquivoThumb = arquivo.split('.')[0] + "_thumb.jpg"
        im = Image.open(os.path.join(diretorio, arquivo))
        im.thumbnail((tamanho, tamanho))
        im.save(os.path.join(diretorio, arquivoThumb), "JPEG")
        pagina += corpo % (arquivo, arquivoThumb)
pagina += rodape
arquivo = open(os.path.join(diretorio, "album.html"), "w")
arquivo.write(pagina)
arquivo.close()
Escrevendo nas imagens

import Image, ImageFont, ImageDraw

entrada = raw_input("Digite o caminho para uma imagem: ")
im = Image.open(entrada)
f = ImageFont.load_default()
d = ImageDraw.Draw(im)
d.text((0, 0), "Fotos de Bruno", font=f, fill="rgb(255,0,0)")
im.save(entrada.split('.')[0] + "2.jpg", "JPEG")
Orientação a objetos
• Python é uma linguagem orientada a objetos;
• A conceito básico da orientação a objetos
  são as classes;
• A sintaxe para criar uma classe em Python é:
  class NomeDaClasse:
       corpo da classe
Exemplo
class Pessoa:
    def qualSeuNome(self):
        print "Bruno"

p = Pessoa();
p.qualSeuNome()
Exemplo
             Definição da classe

class Pessoa:
    def qualSeuNome(self):
        print "Bruno"

p = Pessoa();
p.qualSeuNome()
Exemplo
             Definição da classe

class Pessoa:
    def qualSeuNome(self):
        print "Bruno"
                                  Método
p = Pessoa();
p.qualSeuNome()
Exemplo
                               Definição da classe

                   class Pessoa:
                       def qualSeuNome(self):
Criação de um objeto       print "Bruno"
                                                    Método
                 p = Pessoa();
                 p.qualSeuNome()
Exemplo
                               Definição da classe

                   class Pessoa:
                       def qualSeuNome(self):
Criação de um objeto       print "Bruno"
                                                    Método
                 p = Pessoa();
                 p.qualSeuNome()


                Chamada de um método
Construtores
• Objetos são criados através de um método especial
  chamado de construtor;
• Toda classe possui pelo menos um construtor que
  será criado caso o programador não defina nenhum;
• O construtor em Python é definido pelo nome
  __init__:
              class Pessoa:
                  def __init__(self, nome):
                      self.nome = nome

                  def qualSeuNome(self):
                      print self.nome
E o self ?
• Self é uma referência para o próprio
  objeto;
• Sempre o primeiro parâmetro de um
  método é self (com exceção de métodos
  de classe - estáticos);
• Parâmetros de classes são definidos
  dinamicamente dentro dos métodos e
  não no corpo das classes.
Polimorfismo ?

• Poli o quê ?
 • Em linguagens tradicionais (Java, C++ e
    C#) é possível definir métodos com o
    mesmo nome e assinaturas diferentes;
• Em Python isto não é possível pois os
  métodos têm parâmetros opcionais.
Exemplo
class Pessoa:
    def __init__(self, nome= "Fulano"):
        self.nome = nome

    def qualSeuNome(self):
        print self.nome

p1 = Pessoa()
p1.qualSeuNome()

p2 = Pessoa("Bruno")
p2.qualSeuNome()
Exemplo
class Pessoa:
    def __init__(self, nome=None):
        if nome:
            self.nome = nome
        else:
            self.nome = "Fulano"

    def qualSeuNome(self):
        print self.nome

p1 = Pessoa()
p1.qualSeuNome()

p2 = Pessoa("Bruno")
p2.qualSeuNome()
Exemplo                  Valor nulo (vazio)
class Pessoa:
    def __init__(self, nome=None):
        if nome:
            self.nome = nome
        else:
            self.nome = "Fulano"

    def qualSeuNome(self):
        print self.nome

p1 = Pessoa()
p1.qualSeuNome()

p2 = Pessoa("Bruno")
p2.qualSeuNome()
Exemplo                    Valor nulo (vazio)
class Pessoa:
    def __init__(self, nome=None):
        if nome:
            self.nome = nome Equivalente a null ou nil
        else:
            self.nome = "Fulano"

    def qualSeuNome(self):
        print self.nome

p1 = Pessoa()
p1.qualSeuNome()

p2 = Pessoa("Bruno")
p2.qualSeuNome()
Exemplo                      Valor nulo (vazio)
                    class Pessoa:
                         def __init__(self, nome=None):
                             if nome:
O if assim testa se o valor      self.nome = nome Equivalente a null ou nil
   é diferente de None       else:
                                 self.nome = "Fulano"

                      def qualSeuNome(self):
                          print self.nome

                  p1 = Pessoa()
                  p1.qualSeuNome()

                  p2 = Pessoa("Bruno")
                  p2.qualSeuNome()
Métodos e Atributos de classe (estáticos)
        class Pessoa:
            qtd = 0

            def __init__(self, nome):
                self.nome = nome
                Pessoa.qtd += 1

            def qualSeuNome(self):
                print self.nome

            @staticmethod
            def quantidadePessoas():
                return Pessoa.qtd

        p1 = Pessoa("Fulano")
        p2 = Pessoa("Bruno")
        p3 = Pessoa("Beltrano")

        print str(Pessoa.quantidadePessoas())
Métodos e Atributos de classe (estáticos)
        class Pessoa:
                          Atributo de classe
            qtd = 0

            def __init__(self, nome):
                self.nome = nome
                Pessoa.qtd += 1

            def qualSeuNome(self):
                print self.nome

            @staticmethod
            def quantidadePessoas():
                return Pessoa.qtd

        p1 = Pessoa("Fulano")
        p2 = Pessoa("Bruno")
        p3 = Pessoa("Beltrano")

        print str(Pessoa.quantidadePessoas())
Métodos e Atributos de classe (estáticos)
        class Pessoa:
                           Atributo de classe
            qtd = 0

            def __init__(self, nome):
                self.nome = nome
                Pessoa.qtd += 1
                                      Acessando o atributo

            def qualSeuNome(self):
                print self.nome

            @staticmethod
            def quantidadePessoas():
                return Pessoa.qtd

        p1 = Pessoa("Fulano")
        p2 = Pessoa("Bruno")
        p3 = Pessoa("Beltrano")

        print str(Pessoa.quantidadePessoas())
Métodos e Atributos de classe (estáticos)
        class Pessoa:
                           Atributo de classe
            qtd = 0

            def __init__(self, nome):
                self.nome = nome
                Pessoa.qtd += 1
                                      Acessando o atributo

            def qualSeuNome(self):
                print self.nome

            @staticmethod
                                  Modificador de método
            def quantidadePessoas():
                return Pessoa.qtd

        p1 = Pessoa("Fulano")
        p2 = Pessoa("Bruno")
        p3 = Pessoa("Beltrano")

        print str(Pessoa.quantidadePessoas())
Métodos e Atributos de classe (estáticos)
        class Pessoa:
                           Atributo de classe
            qtd = 0

            def __init__(self, nome):
                self.nome = nome
                Pessoa.qtd += 1
                                      Acessando o atributo

            def qualSeuNome(self):
                print self.nome

            @staticmethod
                                  Modificador de método
            def quantidadePessoas():
                return Pessoa.qtd
                                        Não tem self
        p1 = Pessoa("Fulano")
        p2 = Pessoa("Bruno")
        p3 = Pessoa("Beltrano")

        print str(Pessoa.quantidadePessoas())
Métodos e Atributos de classe (estáticos)
        class Pessoa:
                           Atributo de classe
            qtd = 0

            def __init__(self, nome):
                self.nome = nome
                Pessoa.qtd += 1
                                      Acessando o atributo

            def qualSeuNome(self):
                print self.nome

            @staticmethod
                                  Modificador de método
            def quantidadePessoas():
                return Pessoa.qtd
                                        Não tem self
        p1 = Pessoa("Fulano")
        p2 = Pessoa("Bruno")
        p3 = Pessoa("Beltrano")     Acessando método estático

        print str(Pessoa.quantidadePessoas())
Herança
• Uma classe pode herdar os métodos e atributos de
  outras;
• A intenção é reusar código;
• Python suporta herança simples e composta;
• A forma geral é a seguinte:
 class NomeClasse(Super1, Super2, Super3):
        corpo da classe
import math
                         Exemplo
class FormaGeometrica:
    def __init__(self, tamanhoLado):
        self.tamanhoLado = tamanhoLado

    def calculaArea(self):
        pass

class Triangulo(FormaGeometrica):
    def calculaArea(self):
        return self.tamanhoLado * self.tamanhoLado * math.sqrt(2) / 4

class Quadrado(FormaGeometrica):
    def calculaArea(self):
        return self.tamanhoLado * self.tamanhoLado

t = Triangulo(4)
q = Quadrado(2)

print str(t.calculaArea())
print str(q.calculaArea())
import math
                         Exemplo
class FormaGeometrica:
    def __init__(self, tamanhoLado):
        self.tamanhoLado = tamanhoLado

    def calculaArea(self):        pass é uma instrução que não faz nada !
        pass                 está aqui pois todo método precisa de um corpo
class Triangulo(FormaGeometrica):
    def calculaArea(self):
        return self.tamanhoLado * self.tamanhoLado * math.sqrt(2) / 4

class Quadrado(FormaGeometrica):
    def calculaArea(self):
        return self.tamanhoLado * self.tamanhoLado

t = Triangulo(4)
q = Quadrado(2)

print str(t.calculaArea())
print str(q.calculaArea())
import math
                         Exemplo
class FormaGeometrica:
    def __init__(self, tamanhoLado):
        self.tamanhoLado = tamanhoLado

    def calculaArea(self):        pass é uma instrução que não faz nada !
        pass                 está aqui pois todo método precisa de um corpo
class Triangulo(FormaGeometrica):
                                    note que não foi definido um construtor
    def calculaArea(self):
        return self.tamanhoLado * self.tamanhoLado * math.sqrt(2) / 4

class Quadrado(FormaGeometrica):
    def calculaArea(self):
        return self.tamanhoLado * self.tamanhoLado

t = Triangulo(4)
q = Quadrado(2)

print str(t.calculaArea())
print str(q.calculaArea())
import math
                         Exemplo
class FormaGeometrica:
    def __init__(self, tamanhoLado):
        self.tamanhoLado = tamanhoLado

    def calculaArea(self):        pass é uma instrução que não faz nada !
        pass                 está aqui pois todo método precisa de um corpo
class Triangulo(FormaGeometrica):
                                    note que não foi definido um construtor
    def calculaArea(self):
        return self.tamanhoLado * self.tamanhoLado * math.sqrt(2) / 4

class Quadrado(FormaGeometrica):
    def calculaArea(self):
        return self.tamanhoLado * self.tamanhoLado

t = Triangulo(4)
                    chamando o construtor da superclasse
q = Quadrado(2)

print str(t.calculaArea())
print str(q.calculaArea())
Erros e Exceções
•   O tratamento de erros em Python é feito através do
    tratamento de exceções;
•   A idéia é a seguinte:
    •   o código que encontra um erro lança uma exceção;
    •   a execução do programa é interrompida no ponto
        onde a exceção foi lançada;
    •   o código continua em um bloco de tratamento de
        exceções, caso exista;
    •   se não existir, o programa será interrompido.
Exemplo
# -*- coding: latin-1 -*-
idade = 0

while True:
    try:
         idade = int(raw_input("Digite a sua idade: "))
         break
    except ValueError:
         print "Você deve digitar um número válido !"

print "A sua idade é %d" % idade
Exemplo
# -*- coding: latin-1 -*-
idade = 0

while True:
    try:
         idade = int(raw_input("Digite a sua idade: "))
         break          só será executado caso não haja uma exceção
    except ValueError:
         print "Você deve digitar um número válido !"

print "A sua idade é %d" % idade
Exemplo
# -*- coding: latin-1 -*-
idade = 0

while True:
    try:
         idade = int(raw_input("Digite a sua idade: "))
         break          só será executado caso não haja uma exceção
    except ValueError:
         print "Você deve digitar um número válido !"

print "A sua idade é %d" % idade
                                               só será executado
                                             caso haja uma exceção
Sugestão
       • Se em um programa você precisar ler mais
           de uma vez um valor inteiro do teclado,
           crie uma função:

# -*- coding: latin-1 -*-
def lerInteiro(mensagem, mensagemErro="Você deve digitar um número válido !"):
    valor = 0
    while True:
        try:
             valor = int(raw_input(mensagem))
             break
        except ValueError:
             print mensagemErro
    return valor

idade = lerInteiro("Digite a sua idade: ")
print "A sua idade é %d" % idade
Qual exceção devo
                  tratar ?
        • Como descobrir o nome da exceção ?
        • É só provocar o seu lançamento !
        • Por exemplo, execute o programa abaixo,
            digite uma letra e veja a sua saída:
           idade = int(raw_input("Digite a sua idade: "))

Traceback (most recent call last):
  File "/Users/brunocatao/Documents/workspace/Aula1/src/excecoes.py", line 2, in
<module>
    idade = int(raw_input("Digite a sua idade: "))
ValueError: invalid literal for int() with base 10: 'a'
Qual exceção devo
                  tratar ?
        • Como descobrir o nome da exceção ?
        • É só provocar o seu lançamento !
        • Por exemplo, execute o programa abaixo,
            digite uma letra e veja a sua saída:
           idade = int(raw_input("Digite a sua idade: "))

Traceback (most recent call last):
  File "/Users/brunocatao/Documents/workspace/Aula1/src/excecoes.py", line 2, in
<module>
    idade = int(raw_input("Digite a sua idade: "))
ValueError: invalid literal for int() with base 10: 'a'


    nome da exceção !

Mais conteúdo relacionado

Mais procurados

Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)Luciano Ramalho
 
Jython no JavaOne Latin America 2011
Jython no JavaOne Latin America 2011Jython no JavaOne Latin America 2011
Jython no JavaOne Latin America 2011Luciano Ramalho
 
Implementação de Aplicações Móveis e Jogos com Python - Aula 5
Implementação de Aplicações Móveis e Jogos com Python - Aula 5Implementação de Aplicações Móveis e Jogos com Python - Aula 5
Implementação de Aplicações Móveis e Jogos com Python - Aula 5Flávio Ribeiro
 
Implementação de Aplicações Móveis e Jogos com Python - Aula 4
Implementação de Aplicações Móveis e Jogos com Python - Aula 4Implementação de Aplicações Móveis e Jogos com Python - Aula 4
Implementação de Aplicações Móveis e Jogos com Python - Aula 4Flávio Ribeiro
 
Palestra python
Palestra pythonPalestra python
Palestra pythonRony Cruch
 
Design de código: princípios e práticas para ter um código sustentável
Design de código: princípios e práticas para ter um código sustentávelDesign de código: princípios e práticas para ter um código sustentável
Design de código: princípios e práticas para ter um código sustentávelAndrews Medina
 
Orientação a objetos em Python (compacto)
Orientação a objetos em Python (compacto)Orientação a objetos em Python (compacto)
Orientação a objetos em Python (compacto)Luciano Ramalho
 
Orientação a Objetos em Python
Orientação a Objetos em PythonOrientação a Objetos em Python
Orientação a Objetos em PythonLuciano Ramalho
 
Implementação de Aplicações Móveis e Jogos com Python - Aula 3
Implementação de Aplicações Móveis e Jogos com Python - Aula 3Implementação de Aplicações Móveis e Jogos com Python - Aula 3
Implementação de Aplicações Móveis e Jogos com Python - Aula 3Flávio Ribeiro
 
Iteráveis e geradores (versão RuPy)
Iteráveis e geradores (versão RuPy)Iteráveis e geradores (versão RuPy)
Iteráveis e geradores (versão RuPy)Luciano Ramalho
 
Desenvolvendo Extensões PECL
Desenvolvendo Extensões PECLDesenvolvendo Extensões PECL
Desenvolvendo Extensões PECLW3P Projetos Web
 
Aula actionscript basico
Aula actionscript basicoAula actionscript basico
Aula actionscript basicoWemerson Silva
 
Programando em python funcoes
Programando em python   funcoesProgramando em python   funcoes
Programando em python funcoessamuelthiago
 

Mais procurados (20)

Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)
 
Doctrine2 Seminário PHP
Doctrine2 Seminário PHPDoctrine2 Seminário PHP
Doctrine2 Seminário PHP
 
Jython no JavaOne Latin America 2011
Jython no JavaOne Latin America 2011Jython no JavaOne Latin America 2011
Jython no JavaOne Latin America 2011
 
Implementação de Aplicações Móveis e Jogos com Python - Aula 5
Implementação de Aplicações Móveis e Jogos com Python - Aula 5Implementação de Aplicações Móveis e Jogos com Python - Aula 5
Implementação de Aplicações Móveis e Jogos com Python - Aula 5
 
Implementação de Aplicações Móveis e Jogos com Python - Aula 4
Implementação de Aplicações Móveis e Jogos com Python - Aula 4Implementação de Aplicações Móveis e Jogos com Python - Aula 4
Implementação de Aplicações Móveis e Jogos com Python - Aula 4
 
Palestra python
Palestra pythonPalestra python
Palestra python
 
PHP 7
PHP 7PHP 7
PHP 7
 
Design de código: princípios e práticas para ter um código sustentável
Design de código: princípios e práticas para ter um código sustentávelDesign de código: princípios e práticas para ter um código sustentável
Design de código: princípios e práticas para ter um código sustentável
 
Orientação a objetos em Python (compacto)
Orientação a objetos em Python (compacto)Orientação a objetos em Python (compacto)
Orientação a objetos em Python (compacto)
 
How stuff works
How stuff worksHow stuff works
How stuff works
 
Orientação a Objetos em Python
Orientação a Objetos em PythonOrientação a Objetos em Python
Orientação a Objetos em Python
 
Dependency injection
Dependency injectionDependency injection
Dependency injection
 
Implementação de Aplicações Móveis e Jogos com Python - Aula 3
Implementação de Aplicações Móveis e Jogos com Python - Aula 3Implementação de Aplicações Móveis e Jogos com Python - Aula 3
Implementação de Aplicações Móveis e Jogos com Python - Aula 3
 
Javascript
JavascriptJavascript
Javascript
 
Cool 3 assembly para linux
Cool 3   assembly para linuxCool 3   assembly para linux
Cool 3 assembly para linux
 
Iteráveis e geradores (versão RuPy)
Iteráveis e geradores (versão RuPy)Iteráveis e geradores (versão RuPy)
Iteráveis e geradores (versão RuPy)
 
Python
PythonPython
Python
 
Desenvolvendo Extensões PECL
Desenvolvendo Extensões PECLDesenvolvendo Extensões PECL
Desenvolvendo Extensões PECL
 
Aula actionscript basico
Aula actionscript basicoAula actionscript basico
Aula actionscript basico
 
Programando em python funcoes
Programando em python   funcoesProgramando em python   funcoes
Programando em python funcoes
 

Destaque

Programando em python listas
Programando em python   listasProgramando em python   listas
Programando em python listassamuelthiago
 
Object.__class__.__dict__ - python object model and friends - with examples
Object.__class__.__dict__ - python object model and friends - with examplesObject.__class__.__dict__ - python object model and friends - with examples
Object.__class__.__dict__ - python object model and friends - with examplesRobert Lujo
 
Introdução à MEAN Stack
Introdução à MEAN StackIntrodução à MEAN Stack
Introdução à MEAN StackBruno Catão
 
Python e django na prática
Python e django na práticaPython e django na prática
Python e django na práticaRafael Cassau
 
Retina e Retinose Pigmentar
Retina e Retinose PigmentarRetina e Retinose Pigmentar
Retina e Retinose PigmentarBruno Catão
 
Introdução a JavaScript
Introdução a JavaScriptIntrodução a JavaScript
Introdução a JavaScriptBruno Catão
 
Desvendando a linguagem JavaScript
Desvendando a linguagem JavaScriptDesvendando a linguagem JavaScript
Desvendando a linguagem JavaScriptRodrigo Branas
 

Destaque (12)

Programando em python listas
Programando em python   listasProgramando em python   listas
Programando em python listas
 
Object.__class__.__dict__ - python object model and friends - with examples
Object.__class__.__dict__ - python object model and friends - with examplesObject.__class__.__dict__ - python object model and friends - with examples
Object.__class__.__dict__ - python object model and friends - with examples
 
Web Offline
Web OfflineWeb Offline
Web Offline
 
Python 07
Python 07Python 07
Python 07
 
Mean Stack
Mean StackMean Stack
Mean Stack
 
Introdução à MEAN Stack
Introdução à MEAN StackIntrodução à MEAN Stack
Introdução à MEAN Stack
 
Python 06
Python 06Python 06
Python 06
 
Angular js
Angular jsAngular js
Angular js
 
Python e django na prática
Python e django na práticaPython e django na prática
Python e django na prática
 
Retina e Retinose Pigmentar
Retina e Retinose PigmentarRetina e Retinose Pigmentar
Retina e Retinose Pigmentar
 
Introdução a JavaScript
Introdução a JavaScriptIntrodução a JavaScript
Introdução a JavaScript
 
Desvendando a linguagem JavaScript
Desvendando a linguagem JavaScriptDesvendando a linguagem JavaScript
Desvendando a linguagem JavaScript
 

Semelhante a Python 03

Programando para web com python - Introdução a Python
Programando para web com python - Introdução a PythonProgramando para web com python - Introdução a Python
Programando para web com python - Introdução a PythonAlvaro Oliveira
 
Código legado - PHP Conference Brasil - 2014
Código legado - PHP Conference Brasil - 2014Código legado - PHP Conference Brasil - 2014
Código legado - PHP Conference Brasil - 2014Michael Castillo Granados
 
Simpósio Unicruz: OpenCV + Python (parte 1)
Simpósio Unicruz: OpenCV + Python (parte 1)Simpósio Unicruz: OpenCV + Python (parte 1)
Simpósio Unicruz: OpenCV + Python (parte 1)Cristiano Rafael Steffens
 
Conceito de funçao e modularizaçao
Conceito de funçao e modularizaçaoConceito de funçao e modularizaçao
Conceito de funçao e modularizaçaossuserc6132d
 
2 funcoes e estrutura de blocos
2   funcoes e estrutura de blocos2   funcoes e estrutura de blocos
2 funcoes e estrutura de blocosRicardo Bolanho
 
mod3-programação-estruturada
mod3-programação-estruturadamod3-programação-estruturada
mod3-programação-estruturadadiogoa21
 
Usando POP com Programação Funcional
Usando POP com Programação FuncionalUsando POP com Programação Funcional
Usando POP com Programação FuncionalTales Andrade
 
Introdução a linguagem c karen lowhany
Introdução a linguagem c   karen lowhanyIntrodução a linguagem c   karen lowhany
Introdução a linguagem c karen lowhanyKaren Costa
 
Minicurso Python
Minicurso PythonMinicurso Python
Minicurso Pythonguestac3de
 
Técnicas para preparação e desenvolvimento de sites em django
Técnicas para preparação e desenvolvimento de sites em djangoTécnicas para preparação e desenvolvimento de sites em django
Técnicas para preparação e desenvolvimento de sites em djangoMario Chaves
 
(2015-01-29/30) [WTA2015] Adaptatividade em Python (Tutorial)
(2015-01-29/30) [WTA2015] Adaptatividade em Python (Tutorial)(2015-01-29/30) [WTA2015] Adaptatividade em Python (Tutorial)
(2015-01-29/30) [WTA2015] Adaptatividade em Python (Tutorial)Danilo J. S. Bellini
 
Coding Dojo e Test Driven Development
Coding Dojo e Test Driven DevelopmentCoding Dojo e Test Driven Development
Coding Dojo e Test Driven Developmentpugpe
 

Semelhante a Python 03 (20)

Programando para web com python - Introdução a Python
Programando para web com python - Introdução a PythonProgramando para web com python - Introdução a Python
Programando para web com python - Introdução a Python
 
Funções em C
Funções em CFunções em C
Funções em C
 
Código legado - PHP Conference Brasil - 2014
Código legado - PHP Conference Brasil - 2014Código legado - PHP Conference Brasil - 2014
Código legado - PHP Conference Brasil - 2014
 
Simpósio Unicruz: OpenCV + Python (parte 1)
Simpósio Unicruz: OpenCV + Python (parte 1)Simpósio Unicruz: OpenCV + Python (parte 1)
Simpósio Unicruz: OpenCV + Python (parte 1)
 
Conceito de funçao e modularizaçao
Conceito de funçao e modularizaçaoConceito de funçao e modularizaçao
Conceito de funçao e modularizaçao
 
Python Emsl2009
Python Emsl2009Python Emsl2009
Python Emsl2009
 
Dev Ext PHP
Dev Ext PHPDev Ext PHP
Dev Ext PHP
 
Aula09 traducaosin110
Aula09 traducaosin110Aula09 traducaosin110
Aula09 traducaosin110
 
Aula python
Aula pythonAula python
Aula python
 
2 funcoes e estrutura de blocos
2   funcoes e estrutura de blocos2   funcoes e estrutura de blocos
2 funcoes e estrutura de blocos
 
aula5_python.pdf
aula5_python.pdfaula5_python.pdf
aula5_python.pdf
 
mod3-programação-estruturada
mod3-programação-estruturadamod3-programação-estruturada
mod3-programação-estruturada
 
Usando POP com Programação Funcional
Usando POP com Programação FuncionalUsando POP com Programação Funcional
Usando POP com Programação Funcional
 
Introdução a linguagem c karen lowhany
Introdução a linguagem c   karen lowhanyIntrodução a linguagem c   karen lowhany
Introdução a linguagem c karen lowhany
 
Minicurso Python
Minicurso PythonMinicurso Python
Minicurso Python
 
Python Para Maemo
Python Para MaemoPython Para Maemo
Python Para Maemo
 
Técnicas para preparação e desenvolvimento de sites em django
Técnicas para preparação e desenvolvimento de sites em djangoTécnicas para preparação e desenvolvimento de sites em django
Técnicas para preparação e desenvolvimento de sites em django
 
(2015-01-29/30) [WTA2015] Adaptatividade em Python (Tutorial)
(2015-01-29/30) [WTA2015] Adaptatividade em Python (Tutorial)(2015-01-29/30) [WTA2015] Adaptatividade em Python (Tutorial)
(2015-01-29/30) [WTA2015] Adaptatividade em Python (Tutorial)
 
Hardware
HardwareHardware
Hardware
 
Coding Dojo e Test Driven Development
Coding Dojo e Test Driven DevelopmentCoding Dojo e Test Driven Development
Coding Dojo e Test Driven Development
 

Mais de Bruno Catão

Introdução às Redes Neurais - Parte 2/2
Introdução às Redes Neurais - Parte 2/2Introdução às Redes Neurais - Parte 2/2
Introdução às Redes Neurais - Parte 2/2Bruno Catão
 
Introdução às Redes Neurais - Parte 1/2
Introdução às Redes Neurais - Parte 1/2Introdução às Redes Neurais - Parte 1/2
Introdução às Redes Neurais - Parte 1/2Bruno Catão
 
React JS - Parte 2
React JS - Parte 2React JS - Parte 2
React JS - Parte 2Bruno Catão
 
React JS - Parte 1
React JS - Parte 1React JS - Parte 1
React JS - Parte 1Bruno Catão
 
Ionic 2/3 + Firebase
Ionic 2/3 + FirebaseIonic 2/3 + Firebase
Ionic 2/3 + FirebaseBruno Catão
 
Unity3d Space Shooter (Parte 1)
Unity3d Space Shooter (Parte 1)Unity3d Space Shooter (Parte 1)
Unity3d Space Shooter (Parte 1)Bruno Catão
 
Introdução ao Framework Grails
Introdução ao Framework GrailsIntrodução ao Framework Grails
Introdução ao Framework GrailsBruno Catão
 
O framework spring
O framework springO framework spring
O framework springBruno Catão
 

Mais de Bruno Catão (12)

Introdução às Redes Neurais - Parte 2/2
Introdução às Redes Neurais - Parte 2/2Introdução às Redes Neurais - Parte 2/2
Introdução às Redes Neurais - Parte 2/2
 
Introdução às Redes Neurais - Parte 1/2
Introdução às Redes Neurais - Parte 1/2Introdução às Redes Neurais - Parte 1/2
Introdução às Redes Neurais - Parte 1/2
 
React JS - Parte 2
React JS - Parte 2React JS - Parte 2
React JS - Parte 2
 
React JS - Parte 1
React JS - Parte 1React JS - Parte 1
React JS - Parte 1
 
Node JS - Parte 4
Node JS - Parte 4Node JS - Parte 4
Node JS - Parte 4
 
Node JS - Parte 3
Node JS - Parte 3Node JS - Parte 3
Node JS - Parte 3
 
Node JS - Parte 2
Node JS - Parte 2Node JS - Parte 2
Node JS - Parte 2
 
Node JS - Parte 1
Node JS - Parte 1Node JS - Parte 1
Node JS - Parte 1
 
Ionic 2/3 + Firebase
Ionic 2/3 + FirebaseIonic 2/3 + Firebase
Ionic 2/3 + Firebase
 
Unity3d Space Shooter (Parte 1)
Unity3d Space Shooter (Parte 1)Unity3d Space Shooter (Parte 1)
Unity3d Space Shooter (Parte 1)
 
Introdução ao Framework Grails
Introdução ao Framework GrailsIntrodução ao Framework Grails
Introdução ao Framework Grails
 
O framework spring
O framework springO framework spring
O framework spring
 

Último

ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx2m Assessoria
 
Programação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfProgramação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfSamaraLunas
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx2m Assessoria
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx2m Assessoria
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx2m Assessoria
 
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docxATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx2m Assessoria
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsDanilo Pinotti
 
Luís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuisKitota
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploDanilo Pinotti
 

Último (9)

ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
 
Programação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfProgramação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdf
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docxATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
Luís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdf
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 

Python 03

  • 1. Python - 3ª Aula Bruno Gama Catão
  • 2. Relembrando ... • Na aula passada vimos: • Como criar funções; • Listas, tuplas, conjuntos e dicionários; • Módulos random, urllib2 e zipfile.
  • 3. Funções def fatorial(n): if n == 0: return 1; return n * fatorial(n - 1) #Chamando a funcao print str(fatorial(5))
  • 4. Listas • Padrão: • legumes = ['Batata', 'Cenoura', 'Repolho'] • Listas compactadas: salarios = [510, 720, 850, 1200] #aumento de 10% salarios = [s * 1.01 for s in salarios]
  • 5. Tuplas #tupla simples telefone = (83, 33102222) print 'Telefone (%d) %d' % telefone #Lista de tuplas telefones = [(83, 33332222), (84, 32215678)] for tel in telefones: print 'Telefone (%d) %d' % tel
  • 6. Conjuntos # Lista de compras compras = ['laranja', 'uva', 'maca', 'uva'] # Verificando quais frutas foram compradas frutas = set(compras) print frutas
  • 7. Dicionários aluno = {"nome" : "Bruno", "curso" : "SI", "media" : 8.2}; print "%s - %.2f" % (aluno["nome"], aluno["media"])
  • 8. Módulo random import random #Sorteando as dezenas dezenas = random.sample(range(1, 61), 6) #Ordenando dezenas.sort() print dezenas
  • 9. Módulo urllib2 import urllib2 url = raw_input('Digite a URL: ') print urllib2.urlopen(url).readlines()
  • 10. Módulo zipfile # -*- coding: latin-1 -*- from zipfile import ZipFile arquivo = raw_input('Digite o nome do arquivo: ') diretorio = raw_input('Digite o diretório de destino: ') zip = ZipFile(arquivo) zip.extractall(diretorio)
  • 11. Resposta ao desafio # -*- coding: latin-1 -*- import os arquivo = open(raw_input('Qual o arquivo do cabeçalho ?')) cabecalho = arquivo.read() arquivo = open(raw_input('Qual o arquivo do corpo ?')) corpo = arquivo.read() arquivo = open(raw_input('Qual o arquivo do rodapé ?')) rodape = arquivo.read() diretorio = raw_input('Qual o diretório das imagens ?') formato = raw_input('Qual o formato das imagens ?') album = raw_input('Qual o nome do álbum ?') pagina = cabecalho % album for arquivo in os.listdir(diretorio): if arquivo.endswith(formato): pagina += corpo % (arquivo, arquivo) pagina += rodape arquivo = open(os.path.join(diretorio, "album.html"), "w") arquivo.write(pagina) arquivo.close()
  • 12. Criando seus próprios módulos • Um módulo em Python é um arquivo .py; • Módulos podem ser organizados em diretórios (pacotes); • Para utilizar mais de um módulo em uma aplicação é necessário importar este outro módulo.
  • 13. Exemplo • Criem um novo projeto PyDev chamado Aula3; • Criem dois módulos: • funcoes; • principal.
  • 14. Módulo “funcoes” def fatorial(n): if n == 0: return 1 return n * fatorial(n - 1) def somatorio(n): if n == 0: return 0 return n + somatorio(n - 1)
  • 15. Módulo “funcoes” Lembram de recursividade ? def fatorial(n): if n == 0: return 1 return n * fatorial(n - 1) def somatorio(n): if n == 0: return 0 return n + somatorio(n - 1)
  • 16. Módulo “principal” # -*- coding: latin-1 -*- import funcoes n = int(raw_input('Digite um número: ')) print "fat(%d) = %d" % (n, funcoes.fatorial(n)) n = int(raw_input('Digite um número: ')) print "sum(%d) = %d" % (n, funcoes.somatorio(n))
  • 17. Módulo “principal” # -*- coding: latin-1 -*- import funcoes import <nome_modulo> n = int(raw_input('Digite um número: ')) print "fat(%d) = %d" % (n, funcoes.fatorial(n)) n = int(raw_input('Digite um número: ')) print "sum(%d) = %d" % (n, funcoes.somatorio(n))
  • 18. Módulo “principal” # -*- coding: latin-1 -*- import funcoes import <nome_modulo> n = int(raw_input('Digite um número: ')) print "fat(%d) = %d" % (n, funcoes.fatorial(n)) n = int(raw_input('Digite um número: ')) print "sum(%d) = %d" % (n, funcoes.somatorio(n)) nome_modulo.funcao
  • 19. Outras formas de importação # -*- coding: latin-1 -*- from funcoes import * n = int(raw_input('Digite um número: ')) print "fat(%d) = %d" % (n, fatorial(n)) n = int(raw_input('Digite um número: ')) print "sum(%d) = %d" % (n, somatorio(n))
  • 20. Outras formas de importação from <nome_modulo> import <parte|*> # -*- coding: latin-1 -*- from funcoes import * n = int(raw_input('Digite um número: ')) print "fat(%d) = %d" % (n, fatorial(n)) n = int(raw_input('Digite um número: ')) print "sum(%d) = %d" % (n, somatorio(n))
  • 21. Outras formas de importação from <nome_modulo> import <parte|*> # -*- coding: latin-1 -*- from funcoes import * n = int(raw_input('Digite um número: ')) print "fat(%d) = %d" % (n, fatorial(n)) n = int(raw_input('Digite um número: ')) print "sum(%d) = %d" % (n, somatorio(n)) sem o nome do módulo !
  • 22. Outras formas de importação • Você pode importar apenas uma função, isso diminui o uso de memória pela sua aplicação ! # -*- coding: latin-1 -*- from funcoes import fatorial n = int(raw_input('Digite um número: ')) print "fat(%d) = %d" % (n, fatorial(n))
  • 23. Atenção • Quando se importa um módulo o seu conteúdo é executado; • Portanto, se no corpo do módulo existirem comandos soltos, ou seja, que não estejam dentro de uma função, estes comandos serão executados sempre que o módulo for importado !
  • 24. Exemplo • Vamos modificar o nosso módulo “funcoes”, execute o módulo “principal” e veja o que acontece: # -*- coding: latin-1 -*- def fatorial(n): if n == 0: return 1; return n * fatorial(n - 1) def somatorio(n): if n == 0: return 0; return n + somatorio(n - 1) print 'Módulo funcoes carregado !'
  • 25. Mas ... • E se eu quiser que o meu módulo tenha apenas funções quando for importado, mas que faça alguma coisa quando for executado diretamente ?
  • 26. Ponto de Entrada “main” • Aqui está o truque para fazer isso: # -*- coding: latin-1 -*- def fatorial(n): if n == 0: return 1; return n * fatorial(n - 1) def somatorio(n): if n == 0: return 0; return n + somatorio(n - 1) if __name__ == "__main__": print 'Módulo funcoes carregado !'
  • 27. Pacotes • Pacotes são diretórios onde podemos agrupar os nossos módulos; • São uma forma de organização; • Todo pacote pode ter um módulo chamado __init__ que será importado automaticamente sempre que alguém utilizar o pacote.
  • 28. Exemplo • Crie um PyDev package chamado util em seu projeto; • Veja que automaticamente foi criado um módulo __init__; • Movam o módulo funcoes (é só arrastar com o mouse) para o pacote util.
  • 29. Modificando o módulo principal # -*- coding: latin-1 -*- from util.funcoes import * n = int(raw_input('Digite um número: ')) print "fat(%d) = %d" % (n, fatorial(n)) n = int(raw_input('Digite um número: ')) print "sum(%d) = %d" % (n, somatorio(n))
  • 30. Modificando o módulo principal from <pacote>.<nome_modulo> import <parte|*> # -*- coding: latin-1 -*- from util.funcoes import * n = int(raw_input('Digite um número: ')) print "fat(%d) = %d" % (n, fatorial(n)) n = int(raw_input('Digite um número: ')) print "sum(%d) = %d" % (n, somatorio(n))
  • 31. E o __init__ ? • Vamos adicionar algum conteúdo a este módulo para ver o seu funcionamento: print "Pacote util carregado !" • Agora, executem novamente o módulo principal.
  • 32. Documentação • A documentação de funções em Python é feita por uma String de múltiplas linhas logo em seu início; • Toda entidade de Python (objetos, etc) têm um atributo __doc__ que permite visualizar esta documentação.
  • 33. Exemplo • No módulo util.funcoes: def fatorial(n): ''' Esta função calcula o fatorial de um número ''' if n == 0: return 1; return n * fatorial(n - 1) • Módulo principal: from util.funcoes import fatorial print fatorial.__doc__
  • 34. Módulos externos • Infelizmente Python não possui um procedimento padrão para instalação de módulos externos; • Cada plataforma possui a sua estratégia; • Veremos como fazer a instalação de um módulo PIL (Python Imaging Library); • Este módulo possui funções para manipulação avançada de imagens.
  • 35. Instalando o PIL MacOSX - Snow Leopard • É a instalação mais complicada ! • É necessário antes ter instalado o XCode, pacote de desenvolvimento da Apple que vem nos DVDs de instalação do Mac; • É necessário fazer o download da libjpeg e do PIL: • http://ethan.tira-thompson.org/Mac_OS_X_Ports.html • http://www.pythonware.com/products/pil/
  • 36. Instalando o PIL MacOSX - Snow Leopard • Instale a libjpeg (pacote dmg); • Descompacte o PIL (Imaging-1.1.7.tar.gz); • Dentro da pasta descompactada digite: • sudo python setup.py build • sudo python setup.py install
  • 37. Instalando o PIL Ubuntu • No terminal digite: • sudo apt-get install python-imaging • É só isso !
  • 38. Instalando o PIL Windows • Faça o download do instalador para Windows no endereço: • http://www.pythonware.com/products/pil/ • Execute o instalador: • PIL-1.1.7.win32-py2.6.exe • É só isso !
  • 39. Configurando o PyDev • Para adicionar módulos externos ao seu projeto PyDev é necessário: • Clique com o botão direito do mouse sobre o projeto e escolha “Properties”; • Selecione a sessão “PyDev - PYTHONPATH”; • Selecione a aba “External Libraries”; • Clique no botão “Add source folder”; • Localize o diretório onde o PIL foi instalado: • é sempre bom prestar atenção nos instaladores ! • Clique no botão “OK”.
  • 40. Exemplo • Crie um módulo chamado testepil: import Image im = Image.open(raw_input("Digite o caminho para uma imagem: ")) print im.format, im.size, im.mode
  • 41. Exemplo Criando um thumbnail import Image tamanho = (128, 128) entrada = raw_input("Digite o caminho para uma imagem: ") im = Image.open(entrada) im.thumbnail(tamanho) saida = raw_input("Digite o caminho para o thumbnail: ") im.save(saida, "JPEG")
  • 42. Desafio para já • Modifiquem o gerador de álbuns para: • Gerar um thumbnail para cada foto; • Exibir estes thumbnails na página do álbum; • Bônus: O usuário deveria poder escolher o tamanho do thumbnail !
  • 43. # -*- coding: latin-1 -*- import os import Image cabecalho = '''<html> <head><title></title></head> <body> <h1>%s</h1>''' corpo = '<a href="%s"><img src="%s"/></a>' rodape = '''</body> </html>'''
  • 44. diretorio = raw_input('Qual o diretório das imagens ?') formato = raw_input('Qual o formato das imagens ?') album = raw_input('Qual o nome do álbum ?') tamanho = int(raw_input('Qual o tamanho do thumbnail ?')) pagina = cabecalho % album for arquivo in os.listdir(diretorio): if arquivo.endswith(formato): #Geração do thumbnail arquivoThumb = arquivo.split('.')[0] + "_thumb.jpg" im = Image.open(os.path.join(diretorio, arquivo)) im.thumbnail((tamanho, tamanho)) im.save(os.path.join(diretorio, arquivoThumb), "JPEG") pagina += corpo % (arquivo, arquivoThumb) pagina += rodape arquivo = open(os.path.join(diretorio, "album.html"), "w") arquivo.write(pagina) arquivo.close()
  • 45. Escrevendo nas imagens import Image, ImageFont, ImageDraw entrada = raw_input("Digite o caminho para uma imagem: ") im = Image.open(entrada) f = ImageFont.load_default() d = ImageDraw.Draw(im) d.text((0, 0), "Fotos de Bruno", font=f, fill="rgb(255,0,0)") im.save(entrada.split('.')[0] + "2.jpg", "JPEG")
  • 46. Orientação a objetos • Python é uma linguagem orientada a objetos; • A conceito básico da orientação a objetos são as classes; • A sintaxe para criar uma classe em Python é: class NomeDaClasse: corpo da classe
  • 47. Exemplo class Pessoa: def qualSeuNome(self): print "Bruno" p = Pessoa(); p.qualSeuNome()
  • 48. Exemplo Definição da classe class Pessoa: def qualSeuNome(self): print "Bruno" p = Pessoa(); p.qualSeuNome()
  • 49. Exemplo Definição da classe class Pessoa: def qualSeuNome(self): print "Bruno" Método p = Pessoa(); p.qualSeuNome()
  • 50. Exemplo Definição da classe class Pessoa: def qualSeuNome(self): Criação de um objeto print "Bruno" Método p = Pessoa(); p.qualSeuNome()
  • 51. Exemplo Definição da classe class Pessoa: def qualSeuNome(self): Criação de um objeto print "Bruno" Método p = Pessoa(); p.qualSeuNome() Chamada de um método
  • 52. Construtores • Objetos são criados através de um método especial chamado de construtor; • Toda classe possui pelo menos um construtor que será criado caso o programador não defina nenhum; • O construtor em Python é definido pelo nome __init__: class Pessoa: def __init__(self, nome): self.nome = nome def qualSeuNome(self): print self.nome
  • 53. E o self ? • Self é uma referência para o próprio objeto; • Sempre o primeiro parâmetro de um método é self (com exceção de métodos de classe - estáticos); • Parâmetros de classes são definidos dinamicamente dentro dos métodos e não no corpo das classes.
  • 54. Polimorfismo ? • Poli o quê ? • Em linguagens tradicionais (Java, C++ e C#) é possível definir métodos com o mesmo nome e assinaturas diferentes; • Em Python isto não é possível pois os métodos têm parâmetros opcionais.
  • 55. Exemplo class Pessoa: def __init__(self, nome= "Fulano"): self.nome = nome def qualSeuNome(self): print self.nome p1 = Pessoa() p1.qualSeuNome() p2 = Pessoa("Bruno") p2.qualSeuNome()
  • 56. Exemplo class Pessoa: def __init__(self, nome=None): if nome: self.nome = nome else: self.nome = "Fulano" def qualSeuNome(self): print self.nome p1 = Pessoa() p1.qualSeuNome() p2 = Pessoa("Bruno") p2.qualSeuNome()
  • 57. Exemplo Valor nulo (vazio) class Pessoa: def __init__(self, nome=None): if nome: self.nome = nome else: self.nome = "Fulano" def qualSeuNome(self): print self.nome p1 = Pessoa() p1.qualSeuNome() p2 = Pessoa("Bruno") p2.qualSeuNome()
  • 58. Exemplo Valor nulo (vazio) class Pessoa: def __init__(self, nome=None): if nome: self.nome = nome Equivalente a null ou nil else: self.nome = "Fulano" def qualSeuNome(self): print self.nome p1 = Pessoa() p1.qualSeuNome() p2 = Pessoa("Bruno") p2.qualSeuNome()
  • 59. Exemplo Valor nulo (vazio) class Pessoa: def __init__(self, nome=None): if nome: O if assim testa se o valor self.nome = nome Equivalente a null ou nil é diferente de None else: self.nome = "Fulano" def qualSeuNome(self): print self.nome p1 = Pessoa() p1.qualSeuNome() p2 = Pessoa("Bruno") p2.qualSeuNome()
  • 60. Métodos e Atributos de classe (estáticos) class Pessoa: qtd = 0 def __init__(self, nome): self.nome = nome Pessoa.qtd += 1 def qualSeuNome(self): print self.nome @staticmethod def quantidadePessoas(): return Pessoa.qtd p1 = Pessoa("Fulano") p2 = Pessoa("Bruno") p3 = Pessoa("Beltrano") print str(Pessoa.quantidadePessoas())
  • 61. Métodos e Atributos de classe (estáticos) class Pessoa: Atributo de classe qtd = 0 def __init__(self, nome): self.nome = nome Pessoa.qtd += 1 def qualSeuNome(self): print self.nome @staticmethod def quantidadePessoas(): return Pessoa.qtd p1 = Pessoa("Fulano") p2 = Pessoa("Bruno") p3 = Pessoa("Beltrano") print str(Pessoa.quantidadePessoas())
  • 62. Métodos e Atributos de classe (estáticos) class Pessoa: Atributo de classe qtd = 0 def __init__(self, nome): self.nome = nome Pessoa.qtd += 1 Acessando o atributo def qualSeuNome(self): print self.nome @staticmethod def quantidadePessoas(): return Pessoa.qtd p1 = Pessoa("Fulano") p2 = Pessoa("Bruno") p3 = Pessoa("Beltrano") print str(Pessoa.quantidadePessoas())
  • 63. Métodos e Atributos de classe (estáticos) class Pessoa: Atributo de classe qtd = 0 def __init__(self, nome): self.nome = nome Pessoa.qtd += 1 Acessando o atributo def qualSeuNome(self): print self.nome @staticmethod Modificador de método def quantidadePessoas(): return Pessoa.qtd p1 = Pessoa("Fulano") p2 = Pessoa("Bruno") p3 = Pessoa("Beltrano") print str(Pessoa.quantidadePessoas())
  • 64. Métodos e Atributos de classe (estáticos) class Pessoa: Atributo de classe qtd = 0 def __init__(self, nome): self.nome = nome Pessoa.qtd += 1 Acessando o atributo def qualSeuNome(self): print self.nome @staticmethod Modificador de método def quantidadePessoas(): return Pessoa.qtd Não tem self p1 = Pessoa("Fulano") p2 = Pessoa("Bruno") p3 = Pessoa("Beltrano") print str(Pessoa.quantidadePessoas())
  • 65. Métodos e Atributos de classe (estáticos) class Pessoa: Atributo de classe qtd = 0 def __init__(self, nome): self.nome = nome Pessoa.qtd += 1 Acessando o atributo def qualSeuNome(self): print self.nome @staticmethod Modificador de método def quantidadePessoas(): return Pessoa.qtd Não tem self p1 = Pessoa("Fulano") p2 = Pessoa("Bruno") p3 = Pessoa("Beltrano") Acessando método estático print str(Pessoa.quantidadePessoas())
  • 66. Herança • Uma classe pode herdar os métodos e atributos de outras; • A intenção é reusar código; • Python suporta herança simples e composta; • A forma geral é a seguinte: class NomeClasse(Super1, Super2, Super3): corpo da classe
  • 67. import math Exemplo class FormaGeometrica: def __init__(self, tamanhoLado): self.tamanhoLado = tamanhoLado def calculaArea(self): pass class Triangulo(FormaGeometrica): def calculaArea(self): return self.tamanhoLado * self.tamanhoLado * math.sqrt(2) / 4 class Quadrado(FormaGeometrica): def calculaArea(self): return self.tamanhoLado * self.tamanhoLado t = Triangulo(4) q = Quadrado(2) print str(t.calculaArea()) print str(q.calculaArea())
  • 68. import math Exemplo class FormaGeometrica: def __init__(self, tamanhoLado): self.tamanhoLado = tamanhoLado def calculaArea(self): pass é uma instrução que não faz nada ! pass está aqui pois todo método precisa de um corpo class Triangulo(FormaGeometrica): def calculaArea(self): return self.tamanhoLado * self.tamanhoLado * math.sqrt(2) / 4 class Quadrado(FormaGeometrica): def calculaArea(self): return self.tamanhoLado * self.tamanhoLado t = Triangulo(4) q = Quadrado(2) print str(t.calculaArea()) print str(q.calculaArea())
  • 69. import math Exemplo class FormaGeometrica: def __init__(self, tamanhoLado): self.tamanhoLado = tamanhoLado def calculaArea(self): pass é uma instrução que não faz nada ! pass está aqui pois todo método precisa de um corpo class Triangulo(FormaGeometrica): note que não foi definido um construtor def calculaArea(self): return self.tamanhoLado * self.tamanhoLado * math.sqrt(2) / 4 class Quadrado(FormaGeometrica): def calculaArea(self): return self.tamanhoLado * self.tamanhoLado t = Triangulo(4) q = Quadrado(2) print str(t.calculaArea()) print str(q.calculaArea())
  • 70. import math Exemplo class FormaGeometrica: def __init__(self, tamanhoLado): self.tamanhoLado = tamanhoLado def calculaArea(self): pass é uma instrução que não faz nada ! pass está aqui pois todo método precisa de um corpo class Triangulo(FormaGeometrica): note que não foi definido um construtor def calculaArea(self): return self.tamanhoLado * self.tamanhoLado * math.sqrt(2) / 4 class Quadrado(FormaGeometrica): def calculaArea(self): return self.tamanhoLado * self.tamanhoLado t = Triangulo(4) chamando o construtor da superclasse q = Quadrado(2) print str(t.calculaArea()) print str(q.calculaArea())
  • 71. Erros e Exceções • O tratamento de erros em Python é feito através do tratamento de exceções; • A idéia é a seguinte: • o código que encontra um erro lança uma exceção; • a execução do programa é interrompida no ponto onde a exceção foi lançada; • o código continua em um bloco de tratamento de exceções, caso exista; • se não existir, o programa será interrompido.
  • 72. Exemplo # -*- coding: latin-1 -*- idade = 0 while True: try: idade = int(raw_input("Digite a sua idade: ")) break except ValueError: print "Você deve digitar um número válido !" print "A sua idade é %d" % idade
  • 73. Exemplo # -*- coding: latin-1 -*- idade = 0 while True: try: idade = int(raw_input("Digite a sua idade: ")) break só será executado caso não haja uma exceção except ValueError: print "Você deve digitar um número válido !" print "A sua idade é %d" % idade
  • 74. Exemplo # -*- coding: latin-1 -*- idade = 0 while True: try: idade = int(raw_input("Digite a sua idade: ")) break só será executado caso não haja uma exceção except ValueError: print "Você deve digitar um número válido !" print "A sua idade é %d" % idade só será executado caso haja uma exceção
  • 75. Sugestão • Se em um programa você precisar ler mais de uma vez um valor inteiro do teclado, crie uma função: # -*- coding: latin-1 -*- def lerInteiro(mensagem, mensagemErro="Você deve digitar um número válido !"): valor = 0 while True: try: valor = int(raw_input(mensagem)) break except ValueError: print mensagemErro return valor idade = lerInteiro("Digite a sua idade: ") print "A sua idade é %d" % idade
  • 76. Qual exceção devo tratar ? • Como descobrir o nome da exceção ? • É só provocar o seu lançamento ! • Por exemplo, execute o programa abaixo, digite uma letra e veja a sua saída: idade = int(raw_input("Digite a sua idade: ")) Traceback (most recent call last): File "/Users/brunocatao/Documents/workspace/Aula1/src/excecoes.py", line 2, in <module> idade = int(raw_input("Digite a sua idade: ")) ValueError: invalid literal for int() with base 10: 'a'
  • 77. Qual exceção devo tratar ? • Como descobrir o nome da exceção ? • É só provocar o seu lançamento ! • Por exemplo, execute o programa abaixo, digite uma letra e veja a sua saída: idade = int(raw_input("Digite a sua idade: ")) Traceback (most recent call last): File "/Users/brunocatao/Documents/workspace/Aula1/src/excecoes.py", line 2, in <module> idade = int(raw_input("Digite a sua idade: ")) ValueError: invalid literal for int() with base 10: 'a' nome da exceção !

Notas do Editor

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n
  43. \n
  44. \n
  45. \n
  46. \n
  47. \n
  48. \n
  49. \n
  50. \n
  51. \n
  52. \n
  53. \n
  54. \n
  55. \n
  56. \n
  57. \n
  58. \n
  59. \n
  60. \n
  61. \n
  62. \n
  63. \n
  64. \n
  65. \n
  66. \n
  67. \n