Escolar Documentos
Profissional Documentos
Cultura Documentos
O que Python?
Python uma linguagem de programao de altssimo nvel (VHLPL very high level programming language), interpretada, orientada a objetos, de tipagem forte e dinmica 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 importncia do esforo do programador sobre o esforo computacional. Prioriza a legibilidade do cdigo sobre a velocidade ou expressividade.
void Faladora::dizerOi(string* nome){ cout << Ol << nome->c_str() << ! << endl; } int main(void) { Faladora* falador = new Faladora(); falador->dizerOi(new string(Francisco)); }
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); } }
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. possvel que no funcione desta forma, pois o Python pode no estar configurado no PATH do Windows, neste caso necessrio achar o diretrio de instalao 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 distribuies Linux que trazem interface grfica hoje vm com o Python instalado, j que diversos softwares para este sistema operacional so feitos em Python. Desta forma, geralmente no necessrio instalar o Python em distribuies Linux.
Utilizando o interpretador
Utilizando o interpretador
Utilizando o interpretador
Alguns comandos bsicos do interpretador: help() import this E o nosso primeiro comando conhecido em Python: print(Ol mundo!)
Resumo de caractersticas
Case sensitive; Tipagem dinmica e forte; Linguagem pura: 100% orientada a objetos; Cdigo auto-descritivo: simples e de fcil leitura; Programao em alto-nvel: no permite manipulao de ponteiros; No suporta sobrecarga de funes; Visa facilitar o desenvolvimento, foco em produtividade. :)
Sintaxe
if x > y: big = x small = y else: big = y small = x Simples e objetivo! No preciso saber programao para entender este cdigo, basta um conhecimento bsico em ingls!
Variveis
O conceito de varivel em Python representado sempre por um objeto. Na verdade, Python uma linguagem pura, ou seja, tudo em Python um objeto. Toda varivel uma referncia! Variveis armazenam endereos de memria e no valores!
Variveis
Python possui tipagem dinmica e forte; Tipagem dinmica significa que a varivel assume o tipo de acordo com o valor atribudo; Tipagem forte significa que se uma varivel do tipo inteiro, ela deve ser tratada como um inteiro, ou convertida para ser tratada de outra forma; Para mudar o tipo de uma varivel, devemos declarla novamente;
Variveis
Qual o tipo de n1?
n1 = "10" n2 = 19
soma = n1 + n2
Lendo do Teclado
Em Python, a leitura de dados do teclado feita atravs das funes raw_input e input.
nome = raw_input("Digite seu nome: ") idade = input("Digite sua idade: ") print("Digite seu sexo: ") sexo = sys.stdin.readline()
A funo input adivinha o tipo digitado e retorna. CUIDADO! A funo raw_input sempre retorna uma string. Assim funciona, mas voc no precisa disso! ;)
Escrevendo na Tela
Para escrita na tela, utilizamos o comando print. Vale lembrar que o print no uma funo (passar a ser na verso 3.0 do Python). Porm, utilizaremos o print do futuro! Utilizaremos o print como funo.
Escrevendo na Tela
arquivo = open("entrada.txt")
Imprimindo uma linha do arquivo a cada duas linhas da tela. Imprimindo uma palavra por linha
for linha in arquivo: linha = linha.replace("\n", "") palavras = linha.split('\t') for palavra in palavras: print(palavra)
Operadores
Os operadores do Python:
Aritmticos + * / Comparao == != > < >= <= in is Lgicos and or not
Mdulos
Mdulo o agrupamento de comandos para o operador. Numa definio mais informal, mdulo um arquivo de cdigo-fonte Python. Mdulos so arquivos definidos com as extenses .py, .pyc, .pyo, .pyw, dentre outras menos utilizadas. Nossos mdulos tero sempre a extenso .py, pois se trata da extenso para cdigo fonte de execuo em terminal. Em Python possvel definir mais de uma classe por arquivo (mdulo).
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 mtodos 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 maisculo. upper(): Retorna a mesma string com todas as letras em maisculo. lower(): Retorna a mesma string com todas as letras em minsculo.
Strings
Mais mtodos: replace(antigo, novo): Retorna a mesma string com o valor novo em todas as ocorrncias de antigo. split([separador]): Retorna uma lista de strings. Caso o separador no seja especificado, a lista ser dividida por espaos 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 so vetores e matrizes. Dentre as mais avanadas, a mais conhecida a lista. H ainda outras estruturas como rvore, pilha, fila, hash, etc. Vale lembrar que uma string tambm uma estrutura de dados! Estudaremos trs estruturas: List, Tuple e Dict.
alunos = [] alunos.append("Monica") alunos.append("Cascao") alunos.append("Cebolinha") alunos.reverse() for nome in alunos: print nome
Gerando Listas
Python possui formas de gerar listas, veremos duas; Uma das primeiras funes que todos aprendem em Python a funo range, que gera uma lista de inteiros;
Gerando Listas
lista1 = range(1500) lista2 = range(1001, 2000)
Gera uma lista de 0 at 1499.
Gerando Listas
H ainda uma forma avanada de gerar listas a partir de outras listas; Trata-se da tcnica List Comprehension (Compreenso de Listas); A sintaxe de List Comprehension vem da linguagem funcional Haskell; O nome e a sintaxe originam da Matemtica: Compreenso de listas tem sintaxe praticamente igual notao axiomtica de compreenso (Teoria de Conjuntos);
Gerando Listas
Supondo que seu amado professor de algoritmos lhe passou o seguinte exerccio: Elabore um algoritmo que leia um nmero x e imprima todos os mpares entre 0 e x. Bom, nosso primeiro pensamento fazer assim:
Gerando Listas
No estamos programando em Java!
tupla = ("Teste 1", "Teste 2") tupla[0] = "Teste 3" tupla.append("Teste 4")
tupla = ("Teste1", "Teste2", "Teste3") tupla += ("Teste4", "Teste5", "Teste6") tupla2 = ("Teste7", "Teste8", "Teste9") tuplas = tupla + tupla2
Controle de fluxo
if n1 > n2: n1 maior = while i < 5: i += 1
else: n2 maior =
Blocos de cdigo definidos por endentao!
(Blocos de cdigo)
Como todos j perceberam, em Python no utilizamos caracteres ou palavras para delimitar blocos de cdigo. Em C e linguagens derivadas, utilizamos o {}, em Pascal utilizamos begin .. end. Em Python, o que determina o incio e o fim de um bloco endentao.
Prtica
Faa um algoritmo que leia um nmero x e imprima a soma de todos os mpares entre 1 e x; Desafio: faa o algoritmo acima sem usar controle de fluxo.
Orientao a objetos
Python uma linguagem 100% orientada a objetos, significa que tudo em Python um objeto! Veremos nos prximos slides como definir classes, atributos, mtodos e como aplicar em Python diversos conceitos da Orientao a Objetos.
Definindo Classes
class Veiculo(object): pass
Prtica
Defina a classe vazia Tamagoshi.
Definindo Atributos
Existem duas formas de definir atributos de instncia 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
marca e ano so atributos de instncia, se criarmos outro objeto da classe Veiculo estes atributos no existiro na nova instncia.
Prtica
Defina os seguintes atributos na classe Tamagoshi: nome, fome, saude e idade.
Definindo mtodos
Um mtodo um atributo com comportamento; Para no fundir conceitos, vamos apenas trabalhar com mtodos da forma tradicional, ou quase isso; Para definir mtodos e funes em Python utilizamos a palavra reservada def;
Definindo mtodos
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 mtodo andar!
Self?!?!
Quando definimos nosso mtodo, determinamos um parmetro, o self; Quando utilizamos o mtodo, porm, no passamos nenhum parmetro! Quem esse tal de self?
Self?!?!
class Veiculo { public: string* marca; int ano; void setAno(int ano); }; #include "Veiculo.h" void Veiculo::setAno(int ano){ this->ano = ano; }
Self?!?!
public class Veiculo { public String marca = null; public Integer ano = null; public void setAno(Integer ano){ this.ano = ano; } }
Prtica
Defina os seguintes mtodos na classe Tamagoshi: alterarNome, alterarFome, alterarSaude, retornarNome, retornarFome e retornarSaude. Estes mtodos devero acessar os atributos anteriormente declarados; Defina o mtodo retornarHumor, o humor no um atributo, mas sim a soma entre a fome e a sade;
Mtodos estticos
O conceito de mtodo esttico muitas vezes confundido com o conceito de funo em linguagens como Java e C#, que no suportam mtodos globais (funes); O uso de mtodos estticos em Python incomum, mas existe; Para definir um mtodo esttico utilizamos a anotao staticmethod;
Mtodos estticos
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 no tem self?
Prtica
Defina um mtodo esttico obterInstanciaPadrao na classe Tamagoshi.
O que um objeto?
Antes de falarmos sobre instncias, vamos pensar um pouco: o que um objeto?
O que um objeto?
Segundo Fernando Lozano, objeto a representao de uma coisa fsica, tangvel, uma idia ou um conceito. Possui um estado (o que ele sabe) e um comportamento (o que ele capaz de fazer, como ele reage a estmulos externos).
Importante saber!
1. 2. 3. 4. 5. A definio de objeto no um objeto a instncia de uma classe; Objeto tem estado; Objeto tem comportamento; Objeto a abstrao de algo tangvel; Em Python, tudo objeto.
Instanciando objetos
J vimos isso de forma no oficial; Agora veremos oficialmente a sintaxe para instanciar objetos de uma classe!
No tem new!
Instanciando objetos
Quando instanciamos um objeto, acontecem internamente algumas operaes: alocao de memria; definio de referncia (ponteiro); etc. comum a inicializao de atributos quando inicializamos objetos; Em outras linguagens, temos a possibilidade de fazer a implementao do construtor;
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!")
Prtica
Defina um mtodo inicializador na classe Tamagoshi. Este mtodo receber valores de fome, saude e idade e armazenar estes valores nos atributos internos correspondentes; Utilize passagem flexvel de parmetros.
Herana de classes
A herana permite criar um relacionamento entre classes utilizando subclasses. Uma subclasse herda atributos e mtodos de sua superclasse. Utilizar herana pode poupar trabalho se mtodos puderem ser escritos uma vez em uma superclasse em vez de muitas vezes em subclasses separadas.
Herana de classes
Para definirmos herana de classes em Python, utilizamos parnteses; J utilizamos herana! Em Python, existem dois tipos de classe: new style e old style; Classes new style so classes que sempre herdam de alguma classe. Se voc no herda de ningum, voc deve herdar de object (de forma explcita); Este formato de classe passou a ser suportado pelo Python apenas a partir da verso 2.2, quando a linguagem tornou-se 100% orientada a objetos.
Herana de classes
Vamos comear a implementar o diagrama ao lado!
Herana 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
Herana 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! (:
Herana de classes
class Atleta(Pessoa): peso = None aposentado = None def __init__(self, nome, idade, peso): super(Atleta, self).__init__(nome, idade) self.peso = peso self.aposentado = False def aquecer(self): print("Atleta aquecido!") def aposentar(self): self.aposentado = True
Herana de classes
class Corredor(Atleta): def correr(self): print("Corredor correndo!") class Nadador(Atleta): def nadar(self): print("Nadador nadando!") class Ciclista(Atleta): def pedalar(self): print("Ciclista pedalando!")
Herana mltipla
H uma peculiaridade no diagrama de classes: a classe TriAtleta herda de trs outras classes; Muitas pessoas podem pensar: mas isso impossvel! Em Python, assim como em C++, isso possvel sim! Logo, a classe TriAtleta fica bem simples:
MRO
Um conceito fundamental ligado herana mltipla o conceito de MRO (Method Resolution Order Ordem de resoluo de mtodos); Para descobrirmos a ordem de resoluo de mtodos de uma classe, utilizamos a seguinte sintaxe: Classe.__mro__.
print(TriAtleta.__mro__)
(<class '__main__.TriAtleta'>, <class '__main__.Ciclista'>, <class '__main__.Nadador'>, <class '__main__.Corredor'>, <class '__main__.Atleta'>, <class '__main__.Pessoa'>, <type 'object'>)
Prtica
Implemente o diagrama de classes abaixo:
Polimorfismo
Mesmo que Python no suporte sobrecarga de mtodos em uma mesma classe, possvel reimplementar mtodos em uma hierarquia de classes; Vamos reimplementar em todas as subclasses de Atleta o mtodo aquecer.
Polimorfismo
class Corredor(Atleta): def correr(self): print("Corredor correndo!") def aquecer(self): print("Corredor aquecido!") class Nadador(Atleta): def nadar(self): print("Nadador nadando!") def aquecer(self): print("Nadador aquecido!") class Ciclista(Atleta): def pedalar(self): print("Ciclista pedalando!") def aquecer(self): print("Ciclista aquecido!")
Encapsulamento
Em Python, todos os atributos e mtodos so pblicos! Porm existe uma forma de dificultar o acesso aos atributos e mtodos, indicando que acessar aquele atributo diretamente no a operao aconselhada; Basta adicionar dois _ (underline) frente dos atributos e mtodos; Podemos ento definir mtodos de acesso em nossas classes;
Encapsulamento
def retornarNome(self): return self.__nome
Classe Pessoa
def alterarNome(self, nome): self.__nome = nome def retornarIdade(self): return self.__idade def alterarIdade(self, idade): self.__idade = idade
Encapsulamento
def retornarPeso(self): return self.__peso
Classe Atleta
def alterarPeso(self, peso): self.__peso = peso def estaAposentado(self): return self.__aposentado def aposentar(self): self.__aposentado = True
Utilizando properties podemos configurar para internamente o Python chamar automaticamente o mtodo alterarPeso passando 25 como parmetro.
Importante saber!
Properties s funcionam em classes new style; Java tambm tem property! ;)
Prtica
Transforme todos os atributos da classe Tamagoshi em properties.
Lembre-se: nem sempre voc agir assim. Encapsule apenas o que tiver de ser encapsulado.
Excees
Excees
Em Python, assim como em C++ e Java, o conceito de Exceo est ligado orientao a objetos. Uma exceo um objeto, possui estado e comportamento. O tratamento de excees pode ser utilizado para aumentar o nvel de abstrao do cdigo. possvel usar excees tambm para encapsular dados especficos sobre o erro levantado. Vamos aprender como criar, tratar e levantar uma exceo em Python!
Excees
Primeiramente, vamos criar nossas excees. Uma exceo personalizada modelada por uma classe qualquer, que herda da classe BaseException; Nas verses anteriores de Python qualquer classe podia modelar uma exceo. Isso gerava a m prtica de lanar excees modeladas pela classe string;
Excees
Vamos definir nossa primeira exceo. Esta exceo 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!"
Excees
Tudo bem Chico, criamos excees! E como podemos levant-las? Para levantar uma exceo muito simples! Basta utilizar a palavra raise (levantar, em ingls). Vamos usar a exceo PesoError na classe Atleta, no mtodo alterarPeso; Se o peso informado for invlido, levantamos a exceo!
Excees
def alterarPeso(self, peso): if peso > 0 and peso < 400: self.__peso = peso else: raise PesoError("%f nao eh um peso valido!", %(peso))
Excees
Python levanta diversas excees internamente: ValueError, IOError, TypeError; Vamos tratar excees! Para tratar excees em Python utilizamos try except else finally;
Excees
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
Excees
if __name__ == "__main__": print("CADASTRO DE ATLETAS", end="\n\n") 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): ")
Prtica
Analise as possves excees para a classe Tamagoshi; Crie-as, lance-as e trate-as.
E agora?
Leia a documentao; Descubra a sua vertente; Utilize Python na sua vertente!
Referncias
www.python.org www.pythonbrasil.org www.pythonrio.org www.pythoncampus.org www.djangobrasil.org www.plone.org www.tchezope.org