Programando com - suporte.inf.ufes.br · Os operadores básicos de comparação como ==, =, entre...
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
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