Your SlideShare is downloading. ×
Python 03
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Python 03

716
views

Published on

Continuação do curso de Python:

Continuação do curso de Python:

Published in: Technology

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
716
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
47
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Transcript

    • 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çõesdef fatorial(n): if n == 0: return 1; return n * fatorial(n - 1)#Chamando a funcaoprint 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 simplestelefone = (83, 33102222)print Telefone (%d) %d % telefone#Lista de tuplastelefones = [(83, 33332222), (84, 32215678)]for tel in telefones: print Telefone (%d) %d % tel
    • 6. Conjuntos# Lista de comprascompras = [laranja, uva, maca, uva]# Verificando quais frutas foram compradasfrutas = set(compras)print frutas
    • 7. Dicionáriosaluno = {"nome" : "Bruno", "curso" : "SI", "media" : 8.2};print "%s - %.2f" % (aluno["nome"], aluno["media"])
    • 8. Módulo randomimport random#Sorteando as dezenasdezenas = random.sample(range(1, 61), 6)#Ordenandodezenas.sort()print dezenas
    • 9. Módulo urllib2import urllib2url = raw_input(Digite a URL: )print urllib2.urlopen(url).readlines()
    • 10. Módulo zipfile# -*- coding: latin-1 -*-from zipfile import ZipFilearquivo = 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 osarquivo = 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 % albumfor arquivo in os.listdir(diretorio): if arquivo.endswith(formato): pagina += corpo % (arquivo, arquivo)pagina += rodapearquivo = 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 funcoesn = 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 PILMacOSX - 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 Imageim = Image.open(raw_input("Digite o caminho para uma imagem: "))print im.format, im.size, im.mode
    • 41. Exemplo Criando um thumbnailimport Imagetamanho = (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 osimport Imagecabecalho = <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 % albumfor 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 += rodapearquivo = open(os.path.join(diretorio, "album.html"), "w")arquivo.write(pagina)arquivo.close()
    • 45. Escrevendo nas imagensimport Image, ImageFont, ImageDrawentrada = 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. Exemploclass Pessoa: def qualSeuNome(self): print "Bruno"p = Pessoa();p.qualSeuNome()
    • 48. Exemplo Definição da classeclass Pessoa: def qualSeuNome(self): print "Bruno"p = Pessoa();p.qualSeuNome()
    • 49. Exemplo Definição da classeclass Pessoa: def qualSeuNome(self): print "Bruno" Métodop = 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. Exemploclass Pessoa: def __init__(self, nome= "Fulano"): self.nome = nome def qualSeuNome(self): print self.nomep1 = Pessoa()p1.qualSeuNome()p2 = Pessoa("Bruno")p2.qualSeuNome()
    • 56. Exemploclass Pessoa: def __init__(self, nome=None): if nome: self.nome = nome else: self.nome = "Fulano" def qualSeuNome(self): print self.nomep1 = 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.nomep1 = 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.nomep1 = 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 Exemploclass FormaGeometrica: def __init__(self, tamanhoLado): self.tamanhoLado = tamanhoLado def calculaArea(self): passclass Triangulo(FormaGeometrica): def calculaArea(self): return self.tamanhoLado * self.tamanhoLado * math.sqrt(2) / 4class Quadrado(FormaGeometrica): def calculaArea(self): return self.tamanhoLado * self.tamanhoLadot = Triangulo(4)q = Quadrado(2)print str(t.calculaArea())print str(q.calculaArea())
    • 68. import math Exemploclass 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 corpoclass Triangulo(FormaGeometrica): def calculaArea(self): return self.tamanhoLado * self.tamanhoLado * math.sqrt(2) / 4class Quadrado(FormaGeometrica): def calculaArea(self): return self.tamanhoLado * self.tamanhoLadot = Triangulo(4)q = Quadrado(2)print str(t.calculaArea())print str(q.calculaArea())
    • 69. import math Exemploclass 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 corpoclass Triangulo(FormaGeometrica): note que não foi definido um construtor def calculaArea(self): return self.tamanhoLado * self.tamanhoLado * math.sqrt(2) / 4class Quadrado(FormaGeometrica): def calculaArea(self): return self.tamanhoLado * self.tamanhoLadot = Triangulo(4)q = Quadrado(2)print str(t.calculaArea())print str(q.calculaArea())
    • 70. import math Exemploclass 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 corpoclass Triangulo(FormaGeometrica): note que não foi definido um construtor def calculaArea(self): return self.tamanhoLado * self.tamanhoLado * math.sqrt(2) / 4class Quadrado(FormaGeometrica): def calculaArea(self): return self.tamanhoLado * self.tamanhoLadot = Triangulo(4) chamando o construtor da superclasseq = 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 = 0while 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 = 0while 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 = 0while 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 valoridade = 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 !