Conceitos Básicos, Estruturas de Dados e Orientação a objetos Minicurso de Python Francisco A. S. Souza I Jornada Acadêmica de Ciência, Tecnologia e Cultura
Sobre o autor
19 anos :)
Aluno do quarto módulo do curso Técnico de Informática do Cefetes, Uned Cachoeiro de Itapemirim;
O resto é resto ;P
O que é Python?
Python é uma linguagem de programação de altíssimo nível (VHLPL – very high level programming language ), interpretada, orientada a objetos, de tipagem forte e dinâmica criada por Guido van Rossum em 1991.
A linguagem tem um modelo de desenvolvimento aberto mantido pela PSF ( Python Software Foundation ).
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 sobre a velocidade ou expressividade.
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.
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.
Quem usa Python?
Plone, que é uma aplicação do Zope, foi desenvolvido em Python e é utilizado largamente em diversos web sites: Governo Brasileiro, Portal da Câmara dos Deputados, CEFET-Campos, PyCon Brasil, Novell, Free Software Foundation, etc.
Diversas empresas que fabricam distribuições Linux utilizam softwares personalizados feitos em Python: Novell (SuSE e Open SuSE), Canonical (Ubuntu), Red Hat, dentre outras.
A Microsoft também investe fortemente em Python, no desenvolvimento da linguagem para o .NET Framework
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 .
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.
Por que usar Python?
Python é simples e auto-descritiva, algumas linguagens de programação têm sintaxe complexa ou difícil de memorizar.
Vejamos alguns exemplos de código para declarar uma classe ( Faladora ) que tem o método público dizerOi que recebe uma string que representa o nome de alguma pessoa e escreve uma mensagem de boas vindas para esta pessoa na tela. Instanciaremos um objeto falador da classe e chamaremos este método.
Por que usar Python?
PHP:
<?php class Faladora { public function dizerOi($nome){ echo "Olá $nome! <br />" ; } } $falador = new Faladora(); $falador->dizerOi ( “Francisco” ); ?>
Por que usar Python?
C++:
void Faladora::dizerOi(string* nome){ cout << “Olá” << nome->c_str() << “!” << endl; } int main( void ) { Faladora* falador = new Faladora(); falador->dizerOi( new string ( “Francisco” )); } class Faladora { public: void dizerOi(string* nome); };
Por que usar Python?
Java:
package minicurso; public class Faladora { public void dizerOi(String nome) { System. out .println( "Olá “ + nome + "mundo!" ); } public static void main(String[] args) { Faladora falador = new Faladora(); falador.dizerOi( “Francisco” ); } }
A presença de um interpretador interativo (assim como Ruby) também é uma vantagem, pois é interessante para iniciantes utilizarem um “interpretador de comandos”.
Vamos brincar um pouco com o interpretador?
Utilizando o interpretador
Para executar o interpretador no Windows, vá em Iniciar > Executar e digite python.
Vale lembrar que o Python deve estar devidamente instalado.
É possível que não funcione desta forma, pois o Python pode não estar configurado no PATH do Windows, neste caso é necessário achar o diretório de instalação do Python e executar o arquivo python.exe .
Utilizando o interpretador
Utilizando o interpretador
Para executar o interpretador no Linux, abra o terminal e digite “python” .
Todas as distribuições Linux que trazem interface gráfica hoje vêm com o Python instalado, já que diversos softwares para este sistema operacional são feitos em Python. Desta forma, geralmente não é necessário instalar o Python em distribuições Linux.
Utilizando o interpretador
Utilizando o interpretador
Utilizando o interpretador
Alguns comandos básicos do interpretador:
help()
import this
E o nosso primeiro comando conhecido em Python:
print(“Olá mundo!”)
Resumo de características
Case sensitive;
Tipagem dinâmica e forte;
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;
Visa facilitar o desenvolvimento, foco em produtividade. :)
Achou o interpretador feio?
Achou o interpretador feio?
Achou o interpretador feio?
Achou o interpretador feio?
Achou o interpretador feio?
Achou o interpretador feio?
Sintaxe if x > y: big = x small = y else: big = y small = x Simples e objetivo! Não é preciso saber programação para entender este código, basta um conhecimento básico em inglês!
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!
Variáveis
Python possui tipagem dinâmica e forte;
Tipagem dinâmica significa que a variável assume o tipo de acordo com o valor atribuído;
Tipagem forte significa que se uma variável é do tipo inteiro, ela deve ser tratada como um inteiro, ou convertida para ser tratada de outra forma;
Para mudar o tipo de uma variável, devemos declará-la novamente;
Variáveis n1 = "10" n2 = 19 soma = n1 + n2 Qual o tipo de n1? Qual o tipo de n2? O que acontece aqui?
Lendo do Teclado
Em Python, a leitura de dados do teclado é feita através das funções raw_input e input .
nome = raw_input("Digite seu nome: ") idade = input("Digite sua idade: ") print("Digite seu sexo: ") sexo = sys.stdin.readline() Assim funciona, mas você não precisa disso! ;) A função raw_input sempre retorna uma string. A função input “adivinha” o tipo digitado e retorna. CUIDADO !
Escrevendo na Tela
Para escrita na tela, utilizamos o comando print . Vale lembrar que o print não é uma função (passará a ser na versão 3.0 do Python).
Porém, utilizaremos o print do futuro! Utilizaremos o print como função.
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.
Lendo e Escrevendo em Arquivos arquivo = open("entrada.txt") for linha in arquivo: print(linha) for linha in arquivo: linha = linha.replace("
", "") palavras = linha.split(' ') for palavra in palavras: print(palavra) Abrindo o arquivo para leitura Imprimindo uma linha do arquivo a cada duas linhas da tela. Imprimindo uma palavra por linha
Operadores
Os operadores do Python:
is in <= >= Lógicos Comparação Aritméticos < / not > * or != - and == +
Módulos
Módulo é o agrupamento de comandos para o operador. Numa definição mais informal, módulo é um arquivo de código-fonte Python.
Módulos são arquivos definidos com as extensões .py , .pyc , .pyo , .pyw , dentre outras menos utilizadas.
Nossos módulos terão sempre a extensão .py, pois se trata da extensão para código fonte de execução em terminal.
Em Python é possível definir mais de uma classe por arquivo (módulo).
Strings
Conheceremos rapidamente strings em Python e como manipulá-las.
A string em Python é representada pela classe str . Toda string possui estado e comportamento provido pela classe str .
Strings
Conheceremos agora alguns métodos para trabalhar com strings:
__len__ () : Retorna o tamanho da string;
__getslice__ ( inicio , fim ) : Retorna uma substring de inicio até fim .
capitalize () : Retorna a mesma string com a primeira letra em maiúsculo.
upper () : Retorna a mesma string com todas as letras em maiúsculo.
lower () : Retorna a mesma string com todas as letras em minúsculo.
Strings
Mais métodos:
replace ( antigo , novo ) : Retorna a mesma string com o valor novo em todas as ocorrências de antigo .
split ([ separador ]) : Retorna uma lista de strings. Caso o separador não seja especificado, a lista será dividida por espaços em branco.
Strings string = "Este eh apenas um teste com a string" print(string.__len__()) print(string.__getslice__(0, 5)) print(string.upper()) print(string.capitalize()) print(string.lower()) print(string.replace( "eh" , "foi" )) print(string.split())
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 .
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”);
Aviso aos programadores PHP: Em Python não é permitido adicionar novos elementos em uma lista “criando” um índice, é necessário utilizar o método append () para adicionar um novo elemento!
Estruturas de Dados: List
Antes de por a mão na massa, um simples exemplo:
alunos = [] alunos.append( "Monica" ) alunos.append( "Cascao" ) alunos.append( "Cebolinha" ) alunos.reverse() for nome in alunos: print nome
Estruturas de Dados: List
Agora vamos fazer a mesma coisa, de forma diferente:
alunos = [ "Monica" , "Cascao" , "Cebolinha" ] alunos.reverse() tamanho = alunos.__len__() i = 0 while i < tamanho: print(alunos[i]) i += 1
Estruturas de Dados: List
Veremos agora alguns métodos para trabalhar com listas:
append ( elemento ): adiciona elemento ao fim da lista.
count ( elemento ) : retorna um inteiro contendo a quantidade de vezes que elemento aparece na lista.
reverse () : inverte a ordem dos elementos da lista.
remove ( elemento ) : remove da lista o primeiro elemento encontrado.
Estruturas de Dados: List teste = [ "Nome1" , "Nome2" , "Nome3" ] teste.append( "Nome4" ) teste.append( "Nome2" ) print(teste.count( "Nome2" )) teste.reverse() teste.remove( "Nome2" ) print(teste)
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;
Gerando Listas lista1 = range(1500) lista2 = range(1001, 2000) Gera uma lista de 0 até 1499. Gera uma lista de 1001 até 1999.
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);
Gerando Listas
Supondo que seu amado professor de algoritmos lhe passou o seguinte exercício: “Elabore um algoritmo que leia um número x e imprima todos os ímpares entre 0 e x” .
Bom, nosso primeiro pensamento é fazer assim:
x = int(raw_input("Digite um inteiro: ")) numeros = range(x + 1) for z in numeros: if z % 2 == 1: print(z)
Gerando Listas
Não estamos programando em Java!
x = int(raw_input("Digite um inteiro: ")) impares = [z for z in xrange(x + 1) if z % 2 == 1] for n in impares: print(n) z : z pertence a lista e z for ímpar. Matemática
Estruturas de Dados: Tuple
Tuplas são como as listas, a diferença é que tuplas são estruturas de dados imutáveis.
Pode-se dizer que, em Python, uma string é uma tupla de caracteres.
Vamos a um exemplo para melhor compreensão. Veremos primeiro o que não é possível fazer com tuplas.
Estruturas de Dados: Tuple tupla = ( "Teste 1" , "Teste 2" ) tupla[0] = "Teste 3" tupla.append( "Teste 4" ) TypeError: 'tuple' object does not support item assignment AttributeError: 'tuple' object has no attribute 'append'
Estruturas de Dados: Tuple
Vale lembrar que da mesma forma que fazemos com strings, também podemos concatenar tuplas.
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!
Estruturas de Dados: Dict dicionario = {} dicionario[ "teste" ] = "A palavra teste significa que estamos testando" dicionario[ "testado" ] = "A palavra testado significa que algo jah passou por um teste" dicionario[ "testando" ] = "A palavra testando significa que algo estah passando por um teste" pessoas = { "Maria" : "Nome antigo" , "Shyana" : "Nome complicado" }
Estruturas de Dados: Dict
Alguns métodos de manipulação de dicionários:
get ( indice ) : retorna o valor correspondente a indice .
items () : retorna uma lista de tuplas, no formato (índice, valor) .
values () : retorna uma lista com todos os valores do dicionário.
keys () : retorna uma lista com todas as chaves do dicionário.
Controle de fluxo if n1 > n2: maior = n1 else: maior = n2 while i < 5: i += 1 numeros = [21, 5, 10] for numero in numeros: print(numero) Blocos de código definidos por endentação! O for do Python funciona como o foreach do PHP e do Fortran 90, ou o enhanced for do Java, ou seja, é percorrida uma estrutura de dados, pegando elemento por elemento da estrutura.
(Blocos de código)
Como todos já perceberam, em Python não utilizamos caracteres ou palavras para delimitar blocos de código.
Em C e linguagens derivadas, utilizamos o {}, em Pascal utilizamos begin .. end.
Em Python, o que determina o início e o fim de um bloco é endentação .
Prática
Faça um algoritmo que leia um número x e imprima a soma de todos os ímpares entre 1 e x;
Desafio: faça o algoritmo acima sem usar controle de fluxo.
Orientação a Objetos em Python
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.
Definindo Classes class Veiculo(object): pass Palavra class tipicamente utilizada para definir classes! (: Palavra reservada pass , siginifica: passe este bloco.
Prática
Defina a classe vazia “Tamagoshi”.
Definindo Atributos
Existem duas formas de definir atributos de instância em Python;
class Veiculo(object): pass fusca = Veiculo() fusca.marca = "Volkswagen" fusca.ano = 1972 class Veiculo(object): marca = None ano = None gol = Veiculo() gol.marca = "Volkswagen" gol.ano = 2008
Atributo de classe ou de instância?
Um tema que costuma gerar dúvida é sobre atributos de classe e de instância;
Em Java e outras linguagens com tipagem estática e suporte a classes, estes conceitos costumam se misturar;
Mas em Python estes conceitos são atômicos e o entendimento de cada um é simples, por incrível que pareça!
Atributo de classe ou de instância?
Um atributo de classe é um atributo definido na classe;
Um atributo de instância é um atributo definido na instância da classe (objeto);
Todo atributo de classe é refletido nas instâncias;
Atributos de instâncias são únicos e pertencem apenas à uma instância específica;
Atributo de classe ou de instância? class Veiculo(object): pass fusca = Veiculo() fusca.marca = "Volkswagen" fusca.ano = 1972 marca e ano são atributos de instância, se criarmos outro objeto da classe Veiculo estes atributos não existirão na nova instância.
Prática
Defina os seguintes atributos na classe Tamagoshi: nome, fome, saude e idade.
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 ;
Definindo métodos class Veiculo(object): marca = None ano = None def andar( self ): print("O carro esta andando!") gol = Veiculo() gol.marca = "Volkswagen" gol.ano = 2008 gol.andar() Aqui está nosso método andar!
Self?!?!
Quando definimos nosso método, determinamos um parâmetro, o self ;
Quando utilizamos o método, porém, não passamos nenhum parâmetro!
Quem é esse tal de self?
Self?!?! #include "Veiculo.h" void Veiculo::setAno(int ano){ this ->ano = ano; } Quem é esse tal de this ? class Veiculo { public: string* marca; int ano; void setAno(int ano); };
Self?!?! public class Veiculo { public String marca = null; public Integer ano = null; public void setAno(Integer ano){ this .ano = ano; } } Quem é esse tal de this ?
Prática
Defina os seguintes métodos na classe Tamagoshi: alterarNome , alterarFome , alterarSaude , retornarNome , retornarFome e retornarSaude . Estes métodos deverão acessar os atributos anteriormente declarados;
Defina o método retornarHumor , o humor não é um atributo, mas sim a soma entre a fome e a saúde;
Métodos estáticos
O conceito de método estático muitas vezes é confundido com o conceito de função em linguagens como Java e C#, que não suportam “métodos globais” (funções);
O uso de métodos estáticos em Python é incomum, mas existe;
Para definir um método estático utilizamos a anotação staticmethod ;
Métodos estáticos class Veiculo(object): marca = None ano = None def __init__(self, marca = None, ano = None): self.marca = marca self.ano = ano def andar(self): print("O carro esta andando!") @staticmethod def getDefaultInstance(): return Veiculo("", 0) Por que não tem self ?
Prática
Defina um método estático obterInstanciaPadrao na classe Tamagoshi.
O que é um objeto?
Antes de falarmos sobre instâncias, vamos pensar um pouco: o que é um objeto?
O que é um objeto?
Segundo Fernando Lozano, objeto é a representação de uma coisa física, tangível, uma idéia ou um conceito. Possui um estado (o que ele sabe) e um comportamento (o que ele é capaz de fazer, como ele reage a estímulos externos).
Importante saber!
A definição de objeto não é “um objeto é a instância de uma classe”;
Objeto tem estado;
Objeto tem comportamento;
Objeto é a abstração de algo tangível;
Em Python, tudo é objeto.
Instanciando objetos
Já vimos isso de forma “não oficial”;
Agora veremos oficialmente a sintaxe para instanciar objetos de uma classe!
gol = Veiculo() gol.marca = "Volkswagen" gol.ano = 2008 gol.andar() Não tem new !
Instanciando objetos
Quando instanciamos um objeto, acontecem internamente algumas operações: alocação de memória; definição de referência (ponteiro); etc.
É comum a inicialização de atributos quando inicializamos objetos;
Em outras linguagens, temos a possibilidade de fazer a implementação do construtor;
O que é um método construtor?
O que é um método construtor?
É um método especial que constrói o objeto, ou seja, é o método que retorna uma instância de determinada classe;
Em Python, o construtor chama-se __new__ ;
Porém geralmente não se implementa o método construtor em Python!
O que é implementado é o método __init__ . Este método é chamado imediatamente após o construtor.
O que é um método construtor? class Veiculo(object): marca = None ano = None def __init__(self, marca, ano): self.marca = marca self.ano = ano def andar(self): print("O carro esta andando!")
O que é um método construtor? gol = Veiculo(“Volkswagen”, 2008) gol.marca = "Volkswagen" gol.ano = 2008 gol.andar() gol = Veiculo.__new__(Veiculo, “Volkswagen”, 2008) Veiculo.__init__(gol, “Volkswagen”, 2008)
Peculiaridade: Argumentos flexíveis
Argumentos flexíveis, com valor default ou opcionais são argumentos que podem ou não serem passados para um método;
Como Python não possui sobrecarga de métodos e funções, o uso de argumentos flexíveis é extremamente importante para trabalhar de forma similar;
Definir um argumento flexível é fácil!
Peculiaridade: Argumentos flexíveis class Veiculo(object): marca = None ano = None def __init__(self, marca = None, ano = None): self.marca = marca self.ano = ano def andar(self): print("O carro esta andando!")
Prática
Defina um método inicializador na classe Tamagoshi. Este método receberá valores de fome, saude e idade e armazenará estes valores nos atributos internos correspondentes;
Utilize passagem flexível de parâmetros.
Herança de classes
A herança permite criar um relacionamento entre classes utilizando subclasses. Uma subclasse herda atributos e métodos de sua superclasse .
Utilizar herança pode poupar trabalho se métodos puderem ser escritos uma vez em uma superclasse em vez de muitas vezes em subclasses separadas.
Herança de classes
Para definirmos herança de classes em Python, utilizamos parênteses;
Já utilizamos herança!
Em Python, existem dois tipos de classe: new style e old style ;
Classes new style são classes que sempre herdam de alguma classe. Se você não herda de ninguém, você deve herdar de object (de forma explícita);
Este formato de classe passou a ser suportado pelo Python apenas a partir da versão 2.2, quando a linguagem tornou-se 100% orientada a objetos.
Herança de classes
Vamos começar a implementar o diagrama ao lado!
Herança de classes class Pessoa( object ): nome = None idade = None def __init__(self, nome, idade): self.nome = nome self.idade = idade def envelhecer(self): self.idade += 1
Herança de classes
Para implementarmos a classe Atleta, precisaremos chamar explicitamente o construtor da classe Pessoa (superclasse);
Existem duas formas de fazer isso em Python, veremos apenas a forma mais correta! (:
Java prega que você sempre deve acessar atributos através de métodos;
Python prega que você deve acessar atributos através de métodos quando você precisa disso!
Se não há necessidade de acessar um estado através de um comportamento, por que fazer isso?
Logo, todos os atributos são, por padrão, de acesso irrestrito;
Caso seja necessário restringir o acesso a estes atributos, definimos os métodos de acesso e definimos properties que acessarão estes métodos implicitamente!
Encapsulamento Elegante: Properties
Por exemplo: temos o atributo peso em Atleta e todas as vezes que queremos configurar o valor de peso, deve ser feita uma validação para que este peso não seja inferior a 1 ou superior a 400;
Implementamos então o método alterarPeso e desenvolvemos nele a seguinte lógica:
def alterarPeso(self, peso): if peso > 0 and peso < 400: self.__peso = peso
Encapsulamento Elegante: Properties a = Atleta(“Maria”, 19, 50) a.alterarPeso(25) a.peso = 25 Coisa de Java! Utilizando properties podemos configurar para internamente o Python chamar automaticamente o método alterarPeso passando 25 como parâmetro.
Transforme todos os atributos da classe Tamagoshi em properties .
Lembre-se: nem sempre você agirá assim. Encapsule apenas o que tiver de ser encapsulado.
Exceções
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!
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;
Exceções
Vamos definir nossa primeira exceção. Esta exceção se chamará PesoError;
class PesoError(BaseException): def __init__(self, mensagem = None): if mensagem is not None: self.message = mensagem else: self.message = "Erro no peso!"
Exceções
Tudo bem Chico, criamos exceções! E como podemos levantá-las?
Para levantar uma exceção é muito simples! Basta utilizar a palavra raise (levantar, em inglês).
Vamos usar a exceção PesoError na classe Atleta, no método alterarPeso ;
Se o peso informado for inválido, levantamos a exceção!
Exceções def alterarPeso(self, peso): if peso > 0 and peso < 400: self.__peso = peso else: raise PesoError("%f nao eh um peso valido!", %(peso))
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 ;
Exceções def lerIdade(): while True: try: idade = int(raw_input("Digite sua idade (apenas numeros inteiros): ")) except ValueError as e: print("Digite apenas numeros inteiros!") continue else: return idade def lerPeso(): while True: try: peso = float(raw_input("Digite seu peso (apenas numeros reais): ")) except ValueError as e: print("Digite apenas numeros reais, utilizando ponto para separar as casas!") else: return peso
Exceções if __name__ == "__main__": print("CADASTRO DE ATLETAS", end="
") nome = raw_input("Digite seu nome (aperte enter para finalizar): ") while nome != "": idade = lerIdade() peso = lerPeso() try: at = Atleta(nome, idade, peso) except PesoError as e: print(e.message) nome = raw_input("Digite seu nome (aperte enter para finalizar): ")
Prática
Analise as possíves exceções para a classe Tamagoshi;
Minicurso de Python apresentado durante a I Jornada more
Minicurso de Python apresentado durante a I Jornada Acadêmica de Ciência, Tecnologia e Cultura do Centro Federal de Educação Tecnológica do Espírito Santo. less
0 comments
Post a comment