ALGORITMOS E ESTRUTURA DE DADOS I E II RESUMO PYTHON
1. CARACTERSTICAS GERAIS
Interpretada.
Orientada a Objetos.
Suporte a outros paradigmas: Estrutural e Funcional.
Fcil integrao com outras linguagens.
Tipagem dinmica: no h declarao de variveis.
Endentao para definir bloco aps ":".
print("O valor de a: ")
if a == 0:
b=1
print("zero")
else:
b=2
print(a)
print("O valor de b: ")
print(b)
2. A LINGUAGEM
2.1 Comentrios
Aps o caractere # at o final da linha, tudo considerado um comentrio e ignorado, exceto
pelos comentrios funcionais.
Definindo a codificao do arquivo fonte (comentrio funcional)
o # coding: <encodingname>
Para trabalhar com caracteres em portugus:
o #-- coding: latin-1
2.2 Endentao
Em Python, os blocos de cdigo so delimitados pelo uso de endentao. No precisa ser
consistente em todo o arquivo, s no bloco de cdigo, mas uma boa prtica ser consistente no
projeto todo. Cuidado ao misturar tabulao e espaos: pode ocasionar problemas.
2.3 Variveis
A tipagem dinmica.
o Uma varivel no tem tipo fixo, ela tem o tipo do objeto que ela contm (aponta).
No precisam ser declaradas.
Variveis so criadas quando atribudas pela primeira vez.
o Variveis devem ser atribudas antes de serem referenciadas.
Tudo no python como se fosse uma varivel (referncia).
o Funes, classes, mdulos, etc.
2.4 Tipos de Dados
Variveis Numricas
o So imutveis.
num_int = 13
RESUMO_PYTHON_2.doc Prof. D. V. Kozak fev-17 1/9
Algoritmos e Estrutura de Dados I e II RESUMO PYTHON
num_int_long = 13L
num_real = 13.0
Strings
o Imutveis.
o Criao.
texto1 = "abcdefghij"
texto2 = "outro texto"
texto3 = """este texto
tem varias
linhas"""
o Acesso a elementos pelo ndice.
texto1 = "abcdefghij"
print(texto1[2]) # Imprime "c"
print("GSB" [1]) # Imprime "S"
o Principais Mtodos:
split, count, index, join, lower, upper, replace.
Tuplas
o Imutveis.
o Formadas por elementos de qualquer tipo.
o Delimitadas (opcionalmente) por parnteses: ( e ).
o Criao.
tupla=(a,) # Sem virgula entende como string.
tupla= 'a','b','c','d'
o Acesso a elementos pelo ndice.
print(tupla[2]) # imprime 'c'
print(tupla[1:3]) # imprime "('b','c')"
Vantagem: mais eficiente do que listas.
Listas
o Mutveis, mas menos eficientes do que tuplas.
o Formadas por elementos de qualquer tipo.
o Criao.
lista=[10 ,2 ,3 , "texto" ,20]
o Acesso a elementos pelo ndice.
print(lista[2]) # imprime "3"
print(lista[0:4]) # imprime "[10, 2, 3, 'texto']"
o Principais Mtodos:
append, count, index, insert, pop, remove, reverse, sort.
Dicionrios
o Formados por pares de chave-valor.
o Delimitados por chaves. { e }.
d = {"chave": "valor", "linguagem": "python"}
o Principais Mtodos.
copy, get, has_key, items, keys, update, values.
o Usando iteradores (otimizado para for).
# Imprime: "chave linguagem "
for c in [Link]():
print(c,end=" ")
RESUMO_PYTHON_2.doc Prof. D. V. Kozak fev-17 2/9
Algoritmos e Estrutura de Dados I e II RESUMO PYTHON
print()
# Imprime: " valor python "
for v in [Link]():
print(v,end=" ")
print()
# Imprime: "chave = valor; linguagem = python;"
for c, v in [Link] ():
print(c ,"=" ,v,end="; ")
2.5 Operaes
2.5.1 Matemticas
Principais operadores, descrio e exemplos abaixo.
Operador Descrio Exemplo Resultado
+ Soma 2+5 7
- Subtrao 7-3 4
* Multiplicao 2*5 10
/ Diviso 17 / 5 3.4
// Diviso inteira 17 // 5 3
** Potenciao 2**4 16
% Mdulo (resto da diviso) 17 % 5 2
Prioridade dos operadores e exemplos abaixo.
Prioridade Operador Exemplo Resultado
1 (), funes 2+5*3 17
2 ** 2 * 3**2 18
3 *, /, //, % 4*5%2 0
4 +, - 21 - 15 / 3 15
Nota. No caso de mesma prioridade, resolve-se da esquerda para a direita
2.5.2 Relacionais e Lgicas
Ambas as operaes relacionais e lgicas resultam em verdadeiro (True) ou falso (False).
Principais operadores, descrio e exemplos abaixo.
Operador Descrio Exemplo Resultado
> Maior 3>4 False
>= Maior ou igual 5 >= 5 True
< Menor 3<5 True
<= Menor ou igual 2 <= 1 False
== Igual 3 == 4 False
!= Diferente 3 != 2 True
RESUMO_PYTHON_2.doc Prof. D. V. Kozak fev-17 3/9
Algoritmos e Estrutura de Dados I e II RESUMO PYTHON
Operador Descrio Exemplo Resultado
No
A Not A
not True False not True False
False True
A B A and B
False False False
and True and False False
False True False
True False False
True True True
Ou
A B A or B
False False False
or True or False True
False True True
True False True
True True True
Prioridade dos operadores e exemplos abaixo.
Prioridade Operador Exemplo Resultado
0 Matemtico 1+7<2+5 False
1 Relacional not False and True True
2 and 1<2 or 2<3 and 4<1 True
3 or False or False or False or True True
4 not 19%3 > 4 or 19%3==0 True
Notas.
(a) No caso de mesma prioridade, resolve-se da esquerda para a direita.
(b) Operadores relacionais so binrios: no existe 1<2<3! Escreve-se 1<2 and 2<3.
2.5.3 Literais
A mais simples e usada a concatenao de strings atravs do sinal +. Exemplo abaixo.
s1 = "Ol"
s2 = "Mundo"
n = 10
s3 = "Alunos"
s4 = s1 + ", " + s2 + "!"
s5= str(n)+ " " + s3 + "." # str converte nmero para string.
print(s4) # Imprime: "Ol, Mundo!"
print(s5) # Imprime: "10 Alunos."
RESUMO_PYTHON_2.doc Prof. D. V. Kozak fev-17 4/9
Algoritmos e Estrutura de Dados I e II RESUMO PYTHON
2.6 Entrada e Sada Bsica
A funo input() l dados na entrada padro.
# Le string.
nome = input("Digite o seu nome: ")
# Le inteiro
inteiro = int(input("Um numero inteiro: "))
# Le real
real = float(input("Um numero real: "))
A funo print() imprime na sada padro.
# Imprime texto e strings.
print("Texto")
s="String"
print(s)
# Imprime inteiro e real formatados.
n = 12
r = 1.2347
print("n=%4d; r=%.3f"%(n,r)) # Imprime: n= 12; r= 1.235.
2.7 Controle de Fluxo
2.7.1 Estrutura de Seleo Controle de Fluxo
Estrutura
if exp: if exp:
#comandos #comandos
else: elif exp:
#comando #comandos
else:
#comandos
Exemplos.
if d==1: if x<10:
a=1 y=1
else: elif x<100:
a=2 y=2
else:
y=3
Os seguintes valores so considerados falsos.
o None.
o False.
o Valor 0 de vrios tipos: 0, 0.0, 0L, 0j.
o Seqncias vazias: , (), [].
o Mapeamentos vazios.
o Instncias de objetos que definam __nonzero__() que retorne valor False ou 0.
o Instncia de objetos que definem __len__() retornando 0.
2.7.2 Estrutura de Repetio
Estrutura
for var in seq: while exp:
#comandos #comandos
RESUMO_PYTHON_2.doc Prof. D. V. Kozak fev-17 5/9
Algoritmos e Estrutura de Dados I e II RESUMO PYTHON
Exemplos.
for num in range(200): from time import time
print(num) start = time()
while time() - start < 3.0:
print (esperando 3 segundos...)
Python fornece a clusula else para os laos.
o Ser executada quando a condio do lao for falsa.
for elemento in lista:
if elemento==parada:
break # Sai do for.
print(elemento)
else:
print("Lao chegou ao fim.")
o No exemplo acima, a mensagem Lao chegou ao fim s impressa caso no existir um
elemento que seja igual a parada.
2.8 Funces
Regra LGB
o Referncias buscam 3 escopos: local, global, built-in.
o Atribuies criam ou modificam nomes locais por default.
o Pode forar argumentos a serem globais utilizando global.
o Exemplo.
x = 99
def func(y):
z = x+y # x no atribudo, ento global.
return z
func(1) # Imprime 100.
possvel definir argumentos defaults que no precisam ser passados
def func(a, b, c=10, d=100):
print(a, b, c, d)
>>> func(1,2)
1 2 10 100
>>> func(1,2,3,4)
1 2 3 4
Nmero varivel de argumentos
o Argumentos so passados para a funo na forma de uma lista.
def arg_sem_nome (* args):
for arg in args :
print(" arg :" , arg)
arg_sem_nome("a","b",123)
# Imprime:
# arg : a
# arg : b
# arg : 123
o Argumentos so passados para a funo na forma de um dicionrio, o nome do argumento
a chave
def arg_com_nome (** kargs):
for nome, valor in [Link] ():
print(nome , "=" , valor)
arg_com_nome(a=1,b=2,teste=123)
RESUMO_PYTHON_2.doc Prof. D. V. Kozak fev-17 6/9
Algoritmos e Estrutura de Dados I e II RESUMO PYTHON
# Imprime:
# a = 1
# b = 2
# teste = 123
2.9 Mdulos
Mdulos so funes definidas em arquivos separados.
Itens so importados utilizando from ou import.
from module import function
function()
import module
[Link]()
Mdulos so namespaces. So como escopo de definio de objetos. Dessa forma, um mesmo
identificador pode ser utilizado em mdulos diferentes, evitando conflitos de nome.
o Podem ser utilizados para organizar nomes de variveis.
[Link] = [Link] - [Link]
2.10 Classes
Definio genrica.
class A:
atributo1 = 'atributo1 da classe A'
atributo2 = 'atributo2 da classe A
def __init__(self, val_ini=1):
""" Construtor da classe A"""
self.atributo_de_instacia = val_ini
def metodo(self):
print(self.atributo_de_instacia)
print(A.atributo1)
Exemplo
import datetime # Para usar funes que manipulam data/tempo.
class Pessoa (object):
def __init__ (self,nome,nascimento):
self._nome = nome
self._nascimento = nascimento
def idade (self):
delta = [Link]()-self._nascimento
return [Link]/365
def __str__ ( self ): #Define com ser a saida de print(objPessoa)
return %s, %d anos%(self._nome, [Link]())
Atributos de Classe.
o So atributos que esto na classe, no na instncia.
o So compartilhados entre todas as instncias (economia de memria).
o Os valores so instanciados/atribudos ao ler a definio de classe.
o teis para casos como Jogos, onde uma imagem deve ser compartilhada por todos os
personagens idnticos, economizando memria
RESUMO_PYTHON_2.doc Prof. D. V. Kozak fev-17 7/9
Algoritmos e Estrutura de Dados I e II RESUMO PYTHON
o Exemplo
class C(object):
l = [0]
c1=C()
c2=C()
[Link](1)
[Link](2)
# A lista l acessvel a todos os objetos, alm da classe.
print(c1.l) # imprime[0, 1, 2]
print(c2.l) # imprime[0, 1, 2]
print(C.l) # imprime[0, 1, 2].
Atributos Pblicos e Privados.
o Nomenclatura define atributos/mtodos pblicos, protegidos e privados (modificadores de
acesso definidos de forma informal).
Privados: nomes que se iniciam com __ (underscore duplo).
Protegidos: nomes que se iniciam com _ (underscore simples).
Pblicos: os outros nomes possveis sem underscore na frente.
o Convenciona-se que atributos/mtodos privados so de uso interno da classe, apesar de
poderem ser utilizados pelo mundo externo e classes derivadas.
o Convenciona-se que atributos/mtodos protegidos so de uso interno da classe e das
classes derivadas, apesar de poderem ser utilizados pelo mundo externo.
o Convenciona-se que atributos/mtodos pblicos podem ser utilizados por qualquer classe e
pelo mundo externo.
2.11 Tratamento de Excees.
Tratamento simplificado de excees (erros).
o Programa 1.
class MyExcep(Exception):
pass # Comportamento padro: imprimir Exception e abortar programa.
N=3
D=4
if D==0:
raise MyExcep("Diviso por zero.")
print("N/D=",N/D)
# Sada desse programa:
# N/D= 0.75
o Programa 2.
class MyExcep(Exception):
pass # Comportamento padro: imprimir Exception e abortar programa.
N=3
D=0
if D==0:
raise MyExcep("Diviso por zero.")
print("N/D=",N/D)
# Sada desse programa (ambiente jGRASP):
# Traceback (most recent call last):
# File "[Link]", line 7, in <module>
# raise MyExcep("Diviso por zero.")
# __main__.MyExcep: Diviso por zero.
RESUMO_PYTHON_2.doc Prof. D. V. Kozak fev-17 8/9
Algoritmos e Estrutura de Dados I e II RESUMO PYTHON
3. EXEMPLO
Uma classe que manipula um ponto.
4. EXERCCIOS
1) Escrever a classe Retangulo de lados a e b em python. Os #main
r=Retangulo(2,3)
mtodos devero ser: construtor, rea, permetro e __str__,
print(r)
esse ltimo tal que realize a impresso na forma #Resultado do print(r):
a=?; b=?; per=?; area=?. Utilizar um cliente para teste que crie # a=2; b=3; per=10; area=6
um objeto retngulo com valores para seus lados e imprima seu
permetro e sua rea. Tal programa de teste pode ser o ao lado.
2) Escrever a classe Complexo de parte real a e parte imaginria b. Os mtodos devero ser:
construtor (a, b padro nulos), soma, subtrao e multiplicao, os trs ltimos implementados
como operadores (mtodos __add__, __sub__ e __mul__, respectivamente). Definir tambm o
mtodo __str__. Escrever cliente para teste que execute essas trs operaes sobre dois
nmeros complexos dados, c1 e c2. Parte desse cdigo pode ser o abaixo.
class Complexo: #main
def __init__(self,a=0,b=0): c1=Complexo(2,3)
self._a=a c2=Complexo(1,-1)
self._b=b c=c1+c2
def __add__(self,c): print("c=",c)
s=Complexo()
s._a=c._a+self._a
s._b=c._b+self._b
return s <completar>
3) Escreva em Python uma classe Conta que contenha o nome do cliente, o numero da conta, o
saldo, seu salrio mensal e o limite de saque. Estes valores devero ser informados no construtor,
sendo que o limite no poder ser maior que o valor do salrio mensal do cliente (corrigir
automaticamente). Faa um mtodo deposito e um mtodo retira. O mtodo retira ir devolver true
ou false dependendo se o cliente pode retirar (saque deve ser menor que o menor entre limite e
saldo). Faa um mtodo saldo que retorne o saldo do cliente, e outro que imprima todos os dados
do cliente. Crie um programa de teste que use todos os mtodos da classe.
RESUMO_PYTHON_2.doc Prof. D. V. Kozak fev-17 9/9