Vous êtes sur la page 1sur 9

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 d.keys():
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 d.values():
print(v,end=" ")
print()
# Imprime: "chave = valor; linguagem = python;"
for c, v in d.items ():
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 kargs.items ():
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
module.function()
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.
mod1.umValor = mod1.umValor - mod2.umValor
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 = datetime.date.today()-self._nascimento
return delta.days/365
def __str__ ( self ): #Define com ser a saida de print(objPessoa)
return %s, %d anos%(self._nome, self.idade())
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()
c1.l.append(1)
c2.l.append(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 "Divisao.py", 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