Minicurso Python - Apresentado no JOLIM 2012
Upcoming SlideShare
Loading in...5
×
 

Minicurso Python - Apresentado no JOLIM 2012

on

  • 547 views

 

Statistics

Views

Total Views
547
Views on SlideShare
547
Embed Views
0

Actions

Likes
0
Downloads
36
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Minicurso Python - Apresentado no JOLIM 2012 Minicurso Python - Apresentado no JOLIM 2012 Presentation Transcript

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