Programando com - suporte.inf.ufes.br · Os operadores básicos de comparação como ==, =, entre...

38
Programando com João Víctor Rocon Maia, Engenharia de Computação UFES http://www.inf.ufes.br/~jvrmaia, [email protected]

Transcript of Programando com - suporte.inf.ufes.br · Os operadores básicos de comparação como ==, =, entre...

Programando com

João Víctor Rocon Maia, Engenharia de Computação UFES http://www.inf.ufes.br/~jvrmaia, [email protected]

Programando com

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 dadosTipo 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

424253254354354L

float Ponto flutuante 3.14

complex Número complexo 3+2j

bool Booleano True ou False

Programando com

and del from not whileas elif global or with

Palavras reservadas

assert else if pass yieldbreak except import printclass

exec in raisecontinue finally is returndef for lambda

try

Programando com

Operadores, interpretador e identação

Os operadores básicos de comparação como ==, <, >=, entre outros são usados em todosos 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+12>>>>>> a = 1+1>>> print a2

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 webPylons: framework para desenvolvimento de aplicações webMatplotlib: biblioteca de manipulação de gráficos 2DPython Image Library: biblioteca de manipulação de imagens digitaisPyOpenGL: suporte multiplataforma ao OpenGLPygame: conjunto de módulos para o desenvolvimento de jogos, incluindo gráficos SDLPyro: framework para desenvolvimento de sistemas distribuídosZODB: sistema de persistência de banco de dados orientados a objetosPlone: sistema de gerenciamento de conteúdoVisual Python: framework 3D de alto nívelSQLObject: traduz estruturas relacionais para objetos Python e manipula o banco deDados de forma transparenteNumarray: módulo para manipulação de vetores e computação científica.PyGTK: interface para a biblioteca GTKPyQT: interface para a biblioteca QTWxPython: 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.pyHello World!$

Segunda maneira:$ chmod a+x hello.py$ ./hello.pyHello World!$

Programando com

Estrutura condicional: if

a = 2b = 3c = 4if 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 = 0while i < 5: print i i += 1

Resultado:01234

Laço iterativo: for

for i in range(4):print i

Resultado:01234

lst = [ (1,1), (2,2), (3,3) ]for x,y in lst: print x,y

Resultado:1 12 23 3

for i in range(10,15):print i

Resultado:1011121314

for i in range(10,20,2):print i

Resultado:12141618

Programando com

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

>>> 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

Dicionários

Programando com

>>> 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]

Manipulação de lista

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.pyentrada = 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.pi3.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.pi3>>> 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

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.

Orientação a objeto

Programando com

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 1print a._b # válido, mas desencorajadoprint a.__c # inválido, atributo inexistenteprint a._A__c # válido, mas *fortemente* desencorajado

Encapsulamento

Programando com

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

Polimorfismo – parte 1

# 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 Leonardoprint a.idade # imprime 22print b.CPF # imprime 122.333.332-1

Polimorfismo – parte 2

Programando com

# Não expondo o método __init__ a = Pessoa('Leonardo', 22)b = PessoaCPF('122.333.332-1', a) print a.nome # imprime Leonardoprint a.idade # imprime 22print b.CPF # imprime 122.333.332-1

Polimorfismo – parte 3

Programando com

É recomendável que use da seguinte maneira:#!/usr/env/bin python

def main():# código# …

# código …

if __name__ == '__main__':main()

Usando a função main

Programando com

Programando com

Lendo dados do arquivo – parte 1Arquivo teste.txt:a casafoi destruida pelofogo Arquivo readfile1.py

file = open("teste.txt","r")print file.read()file.close() Resultado:

a casafoi destruida pelofogo<Enter>

Programando com

Lendo dados do arquivo – parte 2Arquivo teste.txt:a casafoi destruida pelofogo Arquivo readfile2.py

file = open("teste.txt","r")for line in file:

print line,file.close()

Resultado:a casafoi destruida pelofogo

Programando com

Escrevendo em arquivo – parte 1

Arquivo writefile1.pyoutputfile = open("teste2.txt","w")outputfile.write("Escrevi?\n")outputfile.close()

Resultado:$ cat teste2.txt Escrevi?$

Programando com

Escrevendo em arquivo – parte 2

Arquivo writefile2.pytry:

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 ab = zeros(4)print bc = ones(4)print cd = array([[1,2],[3,4]])print df = 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

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

platform

Programando com

import socketimport reimport 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()

Verificador de conexão

Programando com

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

regex

Programando com

Programando com

Perguntas?

Programando com

Obrigado!