- Suporte

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