Programando com João Víctor Rocon Maia, Engenharia de Computação UFES http://www.inf.ufes.br/~jvrmaia, [email protected] Python? - Python é uma linguagem de programação de alto nível, interpretada, orientada a objetos, de tipagem dinâmica e forte; - Desenvolvida por Guido van Rossum em 1989; - Prioriza a legibilidade do código sobre a velocidade ou expressividade; - Combinação de sintaxe concisa e clara com uma vasta biblioteca rica e poderosa; - O nome tem origem no grupo humorístico britânico Monty Python, embora muitas pessoas façam a associação com o réptil do mesmo nome; - A filosofia da linguagem gira ao redor de um poema, para ler basta ir no terminal e seguir os seguintes passos: a. $ python b. >>> import this Programando com Tipos de dados Tipo de dado Descrição Exemplo de sintaxe str, unicode Uma cadeia de caracteres imutável “texto” list Lista heterogênea mutável [ 4, “abacate”, True] tuple Tupla imutável ( 4, “quatro” ) set, frozenset Conjunto não ordenado, não contém elementos duplicados set([4, “quatro”]) frozenset([4, “quatro”]) dict Conjunto associativo {“um”:1, “dois”:2 } int Número de precisão fixa, é transparente e é convertido para long caso precise 42 4253254354354L float Ponto flutuante 3.14 complex Número complexo 3+2j bool Booleano True ou False Programando com Palavras reservadas and del from not while as elif global or with assert else if pass yield break except import print class exec in raise continue finally is return def for lambda Programando com try Operadores, interpretador e identação Os operadores básicos de comparação como ==, <, >=, entre outros são usados em todos os tipos de dados. Comaparações do tipo a<b<c possuem o mesmo significado básico que na matemática. O interpretador interativo é uma característica diferencial da linguagem, exemplo: >>> 1+1 2 >>> >>> a = 1+1 >>> print a 2 Identação correta: def eh_par(x): if x%2==0: print “eh par” else: print “nao eh par” Identação errada: def eh_par(x): if x%2==0: print “eh par” else: print “nao eh par” Programando com Módulos e frameworks Django: framework para desenvolvimento ágil de aplicações web Pylons: framework para desenvolvimento de aplicações web Matplotlib: biblioteca de manipulação de gráficos 2D Python Image Library: biblioteca de manipulação de imagens digitais PyOpenGL: suporte multiplataforma ao OpenGL Pygame: conjunto de módulos para o desenvolvimento de jogos, incluindo gráficos SDL Pyro: framework para desenvolvimento de sistemas distribuídos ZODB: sistema de persistência de banco de dados orientados a objetos Plone: sistema de gerenciamento de conteúdo Visual Python: framework 3D de alto nível SQLObject: traduz estruturas relacionais para objetos Python e manipula o banco de Dados de forma transparente Numarray: módulo para manipulação de vetores e computação científica. PyGTK: interface para a biblioteca GTK PyQT: interface para a biblioteca QT WxPython: interface para a biblioteca wxWidgets Programando com Executando códigos em Python Código hello.py: #!/usr/bin/env python if __name__ == '__main__': print “Hello World!” Primeira maneira: $ python hello.py Hello World! $ Segunda maneira: $ chmod a+x hello.py $ ./hello.py Hello World! $ Programando com Estrutura condicional: if a=2 b=3 c=4 if a == b: print “a eh igual a b” elif a == c: print “a eh igual a c” else: print “a eh diferente de b e c” Resultado: a eh diferente de b e c Programando com Laço condicional: while i=0 while i < 5: print i i += 1 Resultado: 0 1 2 3 4 Programando com Laço iterativo: for for i in range(4): print i Resultado: 0 1 2 3 4 lst = [ (1,1), (2,2), (3,3) ] for x,y in lst: print x,y Resultado: 11 22 33 for i in range(10,15): print i for i in range(10,20,2): print i Resultado: 10 11 12 13 14 Resultado: 12 14 16 18 Programando com Manipulação de string >>> str = "0123456789" >>> print str[0:4] 0123 >>> print str[:4] 0123 >>>print str[4:] 456789 >>> print str[-2:] 89 >>> print str[0:10:2] 02468 >>> print str[::-1] 9876543210 >>> len(“abc”) 3 >>> str1 = “abc” >>> str2 = “def” >>> str1+str2 'abcdef' >>> frase = "o bira eh o mascote do suporte" >>> bira = "bira" >>> frase.find(bira) 2 >>> str = “a b c d” >>> str.split(“ “) ['a', 'b', 'c', 'd'] >>> a = "abbbbabbbba" >>> a.replace("b"," ") 'a a a' Programando com Tuplas >>> t1 = ( "joao", 23, "ufes" ) >>> t2 = ( "maria", 22, "uvv" ) >>> print t1[0] joao >>> print t2[0:2] ('maria', 22) >>> print t1[2],t2[2] ufes uvv Programando com Dicionários >>> dict = { } >>> dict[1] = "primeiro" >>> dict["j"] = "segundo" >>> dict[2.3] = "terceiro" >>> dict.keys() [1, 'j', 2.2999999999999998] >>> dict.values() ['primeiro', 'segundo', 'terceiro'] >>> dict[1] 'primeiro' >>> dict.has_key("abacate") False Programando com Manipulação de lista >>> lista = [4, 3, 5, 7, 0, 1, 2] >>> lista.append(9) >>> print lista [4, 3, 5, 7, 0, 1, 2, 9] >>> lista.insert(0,-1) >>> print lista [-1, 4, 3, 5, 7, 0, 1, 2, 9] >>> lista.remove(1) >>> print lista [-1, 4, 3, 5, 7, 0, 2, 9] >>> lista.pop(3) 5 >>> print lista [-1, 4, 3, 7, 0, 2, 9] Programando com Leitura na entrada padrão Código le_imprime.py: input = raw_input(“Digite algo: “) print input Código le_inteiro.py: inteiro = int(raw_input(“Digite um inteiro: “) print inteiro Código varios.py entrada = raw_input(“Digite os parâmetros: “) a = int(entrada.split(“ “)[0]) n = int(entrada.split(“ “)[1]) print a+b Programando com Manipulações matemáticas >>> import math >>> math.pi 3.1415926535897931 >>> math.sin(math.pi/2) 1.0 >>> math.sqrt(4) 2.0 Outras funções: cos, ceil, exp, factorial, log, pow, trunc, ... Programando com Formatação na saída padrão >>> print "%d" % math.pi 3 >>> print "sin(pi/4) =",math.sin(math.sin(math.pi/4)) sin(pi/4) = 0.64963693908 >>> a = 20 >>> b = 30 >>> print "a = %d, b = %d" % (a,b) a = 20, b = 30 Programando com Funções def verifica_sinal(x): if x < 0: print “negativo” elif x > 0: print “positivo” else: print “zero” >>> verifica_sinal(1) positivo Programando com Orientação a objeto class A: a = 1 # atributo publico class B(A): # classe B está herdando A _c = 3 # atributo considerado privado def __init__(self): # método especial que pode ser considerado "construtor" print self.a print self._c a = A() print isinstance(a, B) # ''Objeto a'' é uma instância da ''classe B''? Falso. a = B() # Instancía o ''objeto a'' na ''classe B'' e imprime os atributos da classe. print isinstance(a, B) # ''Objeto a'' é uma instância da ''classe B''?Verdadeiro. b = B() # Instancía o ''objeto b'' na ''classe B'' e imprime os atributos da classe. print isinstance(b, B) # ''Objeto b'' é uma instância da ''classe B''? Verdadeiro. b = A() # Instancía o ''objeto b'' na ''classe A''. print isinstance(b, A) # ''Objeto b'' é uma instância da ''classe A''? Verdadeiro. Programando com Encapsulamento class A: a = 1 # atributo publico _b = 2 # atributo de uso privado __c = 3 # atributo de uso privado, tem o nome modificado para _A__c a = A() print a.a # imprime 1 print a._b # válido, mas desencorajado print a.__c # inválido, atributo inexistente print a._A__c # válido, mas *fortemente* desencorajado Programando com Polimorfismo – parte 1 class Pessoa: def __init__(self, nome ='', idade=0): self.nome = nome self.idade = idade def getIdade(self): return self.idade class PessoaCPF(Pessoa): def __init__(self, CPF, nome='', idade=0): Pessoa.__init__(self, nome, idade) self.CPF = CPF Programando com Polimorfismo – parte 2 # Expondo o método __init__ a = Pessoa() Pessoa.__init__(a, 'Leonardo', 22) b = PessoaCPF('122.333.332-1', nome='', idade=0) print a.nome # imprime Leonardo print a.idade # imprime 22 print b.CPF # imprime 122.333.332-1 Programando com Polimorfismo – parte 3 # Não expondo o método __init__ a = Pessoa('Leonardo', 22) b = PessoaCPF('122.333.332-1', a) print a.nome # imprime Leonardo print a.idade # imprime 22 print b.CPF # imprime 122.333.332-1 Programando com Usando a função main É recomendável que use da seguinte maneira: #!/usr/env/bin python def main(): # código #… # código … if __name__ == '__main__': main() Programando com Lendo dados do arquivo – parte 1 Arquivo teste.txt: a casa foi destruida pelo fogo Arquivo readfile1.py file = open("teste.txt","r") print file.read() file.close() Resultado: a casa foi destruida pelo fogo <Enter> Programando com Lendo dados do arquivo – parte 2 Arquivo teste.txt: a casa foi destruida pelo fogo Arquivo readfile2.py file = open("teste.txt","r") for line in file: print line, Resultado: file.close() a casa foi destruida pelo fogo Programando com Escrevendo em arquivo – parte 1 Arquivo writefile1.py outputfile = open("teste2.txt","w") outputfile.write("Escrevi?\n") outputfile.close() Resultado: $ cat teste2.txt Escrevi? $ Programando com Escrevendo em arquivo – parte 2 Arquivo writefile2.py try: f = open("teste3.txt","w") f.write("Escrevi!\n") finally: f.close() Resultado: $ cat teste3.txt Escrevi! $ Programando com numpy – parte 1 from numpy import * a = array([1,2,3,4,5]) print a b = zeros(4) print b c = ones(4) print c d = array([[1,2],[3,4]]) print d f = zeros( (4,3) ) print f Resultado: [1 2 3 4 5] [ 0. 0. 0. 0.] [ 1. 1. 1. 1.] [[1 2] [3 4]] [[ 0. [ 0. [ 0. [ 0. 0. 0. 0. 0. 0.] 0.] 0.] 0.]] Programando com numpy – parte 2 # inner product >>> a = array([1,2,3]) >>> b = array([3,2,1]) >>> print dot(a,b) 10 # outer product >>> print outer(a,b) [[3 2 1] [6 4 2] [9 6 3]] Programando com numpy – parte 3 >>> a = random.ranf(5) >>> print a [ 0.25517296 0.02707505 0.7028978 0.81105992 0.4393672 ] >>> print sqrt(a) [ 0.50514647 0.16454497 0.83839 0.90058865 0.6628478 ] >>> print a**2 [ 0.06511324 0.00073306 0.49406532 0.6578182 0.19304354] >>> print exp(a) [ 1.29068484 1.02744491 2.01959662 2.25029186 1.55172498] >>> print log(a) [-1.36581369 -3.60914278 -0.35254377 -0.20941334 -0.82241976] >>> print log2(a) [-1.97045264 -5.20689239 -0.50861316 -0.30211958 -1.18650091] Programando com numpy – parte 4 >>> a = array([3,5,1,6,0]) >>> print a [3 5 1 6 0] >>> print a.argsort() [4 2 0 1 3] >>> a.sort() >>> print a [0 1 3 5 6] Programando com os import os if os.path.isdir("/tmp"): print "/tmp is a directory" else: print "/tmp is not a directory" subprocess.call(["ls","-l"]) curdir = os.getcwd() lst = os.listdir(curdir) print lst Programando com platform import platform profile = [ platform.architecture(), platform.dist(), platform.libc_ver(), platform.machine(), platform.node(), platform.platform(), platform.python_build(), platform.python_compiler(), platform.python_version(), platform.system(), platform.uname(), platform.version(), ] for item in profile: print item Programando com Verificador de conexão import socket import re import sys def check_server(address, port): # create a TCP socket s = socket.socket() print "Attempting to connect to %s on port %s" % (address, port) try: s.connect((address, port)) print "Connected to %s on port %s" % (address, port) return True except socket.error, e: print "Connection to %s on port %s failed: %s" % (address, port, e) return False def main(): from optparse import OptionParser parser = OptionParser() parser.add_option("-a","--address",dest="address", default='localhost', help="ADDRESS for server", metavar="ADDRESS") parser.add_option("-p","--port",dest="port", type="int", default=80, help="PORT for server", metavar="PORT") (options, args) = parser.parse_args() print 'options: %s, args: %s' % (options, args) check = check_server(options.address, options.port) print 'check_server returned %s' % check sys.exit(not check) if __name__ == '__main__': main() Programando com regex import re re_str = "[0-9]" str = "a casa tinha abc 123 abc1323243" for match in re.findall(re_str,str): print match re_str = re.compile("[0-9]") str = "a casa tinha abc 123 abc1323243" for match in re_str.findall(str): print match Programando com Perguntas? Programando com Obrigado! Programando com