Вы находитесь на странице: 1из 216

Python

Professor Marcio Antelio


marcioantelio.cefet@gmail.com

1
Bibliografia

Dawson M. Python Programming for the Absolute


Beginner. 3 ed. Course Technology PTR, 2010.

Barry P. Head First Python.1 ed. O'Relly, 2010.

Lutz, Mark. Learning Python. 4 ed. ORelly, 2011.

2
Python

Por que este nome ?


Guido Van Rossum
Srie de comdia da BBC Monty Pythons Flying
Circus

3
Python

Qualidade
Sintaxe simples
Segue um conjunto de conceitos principais
Fcil de aprender
Fcil de compreender
Fcil de lembrar

4
Python

Produtividade de desenvolvimento
Menor esforo de programao
Maior velocidade de implementao

5
Python

Linguagem de script ?
uma linguagem de programao que geralmente
aplicado em regras de script
Ferramentas shell
Linguagem de controle de outros componentes
Linguagem simples usada para a codificao de tarefas
rpidas

6
Python

Desvantagem ?
Linguagem interpretada
Depende do programa
Maior performance do hardware

7
Python

O que posso fazer ?


Programao de sistemas
Interfaces grficas
Script de internet
Integrao de componentes

8
Python

O que posso fazer ?


Banco de Dados
Programao cientfica e numrica
Jogos
Imagens
Robots

9
Python

Vantagens
OO
Open Source
Independente de plataforma
Fcil de usar
Fcil de aprender

10
Interpretador Python

Execuo do programa
Viso do Desenvolvedor
Viso do Processo

Download
http://www.python.org
Verses 2.X e 3.X

11
Viso do desenvolvedor

Um programa escrito em Python apenas um


arquivo texto contendo cdigo fonte (script)
Por conveno este arquivo possui a extenso
.py

12
Viso do desenvolvedor

O arquivo exemplo.py possui o seguinte script


Python:
print (Hello World)
print (2 ** 100)

13
Viso do desenvolvedor

Sada do script
Hello World
1267650600228229401496703205376

14
Viso do Processo

Source Code Byte Code Python Virtual


Machine

exemplo.py exemplo.pyc PVM

15
Ciclo de Desenvolvimento

No existe distino entre o ambiente de


desenvolvimento e execuo.
O compilador est presente em tempo de execuo
e parte do sistema que roda o programa.
Experincia de programao dinmica

16
Implementaes alternativas

IronPython
Linguagem .NET
CPython
Linguagem C
Jython
Linguagem Java

17
Futuro

Projeto Unladen Swallow


Mais rpido do que C em alguns contextos.
Projeto PyPy
Implementao rpida e flexvel de Python.
Projeto Parrot
Mquina virtual comum.

18
Rodando Programas

19
Prompt Python

20
Prompt iterativo

Comea com informaes sobre Python.


>>> O prompt est esperando que voc digite
um comando ou expresso (Entrada).
O resultado (Sada) mostrado na linha seguinte.

21
Prompt Python

22
Prompt Python

A sesso iterativa permite imprimir (Sada) o


resultado de uma expresso que voc digitou
(Entrada).

Estudar a linguagem.

Testes.

23
Prompt Python

24
Rodando scripts

Escrever o cdigo fonte em arquivos.


Estes arquivos so chamado mdulos ou scripts.
Extenso .py para os arquivos.

25
Rodando scripts

26
Rodando scripts : Prompt
Python

27
Rodando scripts : Prompt DOS

28
Rodando scripts : Prompt DOS
Salvando a sada em um arquivo

29
Rodando scripts : Prompt
Python

30
Rodando scripts
no Windows Explorer

31
Interface IDLE

32
Interface IDLE

33
Tipos de objetos Python

34
Objetos

So estruturas de dados.
Pode conter atributos (variveis).
Pode conter mtodos (funes).

35
Objetos

Tipos principais
Numbers
String
List
Dictionaries

36
Objetos

Tipos principais
Tuples
Files
Sets
Boolean

37
Funes existentes

Estrutura bsica de uma funo


retorno nomeDaFuno ( argumentos)
Veremos futuramente como criar nossas prpias
funes.
Veremos como importar mdulos.

38
Tipo Numrico

39
Tipo Numrico

Nmeros inteiros.
Nmeros reais.
Nmeros complexos.
E outros.

40
Inteiros

Tamanho ilimitado
d = 1234
d=0
d = - 10
d = 1234659786597431235997412949

41
Inteiros

Podem ser codificados:


Base 16 (hexadecimal)
Comea com 0x ou 0X seguido por uma string de dgitos
(0-9 e A-F)
Base 8 (octal) LETRA
Comea com 0o ou 0O seguido pelos dgitos (0-7)
Base 2 (binrio)
Comea com 0b ou 0B seguido pelos dgitos (0-1)

42
Inteiros

d = 0o177
d = 0x9ff
d = 0b101010

43
Nmeros reais

Conhecidos como ponto flutuante


Possui o ponto decimal .
Expoente definido por e ou E seguido
opcionalmente pelo sinal

44
Nmeros reais

d = 1.23
d = 1.
d = 1.0
d = 3.14e-10
d = 4E210
d = 4.0e+210

45
Nmeros complexos

So compostos pela parte real + parte imaginria


Parte imaginria terminada com j ou J
Podem ser construdos chamando a funo
complex (real, imag).

46
Nmeros complexos

d= 3+4j
d= 3.0 + 4.0j
d= 3J
d = complex(1, -2) (1 - 2j)
d = complex(1,) (1 + 0j)
d = complex(1) (1 + 0j)

47
Operadores de expresses

Expresses so combinaes de nmeros


(ou outros objetos) e operadores que
computam um valor quando executados
pelo Python.
Para realizar a expresso (x + y), Python
aplica o operador + aos valores dos
objetos x e y. O resultado a soma de x e y,
ou seja, outro objeto.

48
Precedncia dos operadores

Quando uma expresso envolve mais de um


operador, Python agrupa suas partes de acordo
com as regras de precedncia. Estas regras
determinam a ordem com que estas partes sero
computadas.

49
50
Precedncia dos operadores

X +Y*Z
Primeiramente Python realiza a multiplicao de Y e
Z, para depois somar com X.
Isto porque * tem uma precedncia maior do que
+.

51
Parnteses

(X + Y) *Z
Python sempre avalia primeiro expresses em
parnteses.
Assim o operador + aplicado aos objetos X e Y
primeiro, o operador * aplicado ao objeto Z e ao
objeto resultante da soma.

52
Misturando tipos numricos

Expresses podem envolver operandos (objetos)


de vrios tipos.
Python primeiramente converte operandos para o
tipo mais complicado e ento realiza o clculo com
todos os operandos no mesmo tipo.

53
Misturando tipos numricos

Ranking dos tipos numricos em ordem crescente


de complexidade
Inteiro
Real
Nmero Complexo

54
Misturando tipos numricos

soma = 4 + 3.14
Primeiramente o valor inteiro (4) convertido para
ponto flutuante (4.0). Depois realizado a soma de
nmeros reais.
soma = 7.14

55
Converses de tipos numricos
>>> int( 3.1415 )
3

>>> float( 3 )
3.0

56
Vriaveis

So criadas quando elas recebem um valor pela


primeira vez
So substitudas por seus valores quando usadas
em expresses
Devem ser criadas antes de serem usadas em
expresses
Variveis esto referenciando objetos.

57
Vriaveis e Expresses bsicas

58
Comparaes

Resultam em valores booleanos


True
False

59
Comparaes

60
Comparaes

61
Divises

Verdadeira (X / Y)
Retorna um resultado real

Floor (X // Y)
Retorna o valor mais prximo e abaixo do resultado
truncado , retornando inteiro caso os operandos sejam
inteiros ou real caso algum operando seja real.

62
Divises

>>> 10 / 4
2.5
>>> 10 // 4
2
>>> 10 / 4.0
2.5
>>> 10 // 4.0
2.0

63
Nmeros Complexos

>>> 1j * 1J
(-1 + 0j)

>>> 2 + 1j * 3
(2 + 3j)

>>> (2+1j)*3
(6 + 3j)
64
Bases numricas

0x01, 0x10, 0xff


(1,16,255)
>>> 0b1, 0b10000, 0b11111111
(1, 16, 255)
>>> 0o1, 0o20, 0o377
(1, 16, 255)

65
Bases numricas

>>> oct(64), hex(64), bin(64)


(0o100,0x40,0b1000000)

>>> int(64), int(100,8), int(40,16),


int(1000000,2)
(64,64,64,64)

66
Ferramentas numricas

Outras funes pr-definidas


Funes que esto disponveis quando executamos o
interpretador
Bibliotecas numricas
Mdulos criados para atender diferentes reas

67
Bibioteca math

68
Bibioteca math
Floor x Truncamento

>>> import math


>>> math.floor(2.5)
2
>>> math.floor(-2.5)
-3
>>> math.trunc(2.5)
2
>>> math.trunc(-2.5)
-2
69
Mais funes pr-definidas

>>> pow(2,4), 2**4


(16,16)

abs(-42.0),sum( (1,2,3,4 ))
(42.0,10)

min(3,1,2,4), max(3,1,2,4)
(1,4)
70
Mais funes pr-definidas

71
Tipo Booleano

72
Tipo Booleano

True ou False
1 ou 0

73
Tipo Booleano

74
lgebra Booleana

Complementao (ou Negao, ou Inverso)


Operao cujo resultado simplesmente o valor
complementar ao que a varivel apresenta. Como uma
varivel booleana pode assumir um entre dois valores,
caso assuma o valor 1 (true), seu complemento 0
(false) e vice-versa.

75
lgebra Booleana

AND (Multiplicao Lgica)


Esta operao binria resulta em 0 (false) caso pelo
menos uma entrada seja 0 (false)

OR (Adio Lgica)
Esta operao binria resulta em 1(true) se pelo
menos uma das variveis de entrada for 1(true)

76
lgebra Booleana

XOR
Esta operao binria resulta em 1(true) caso as
entradas possuam valores diferentes, caso contrrio o
resultado 0(false)

77
Tabela Verdade

78
Exemplo de cdigo

79
Tipo String

80
Tipo String

Coleo ordenada de caracteres usados para


armazenar e representar informao baseada em
texto.
Serve para codificar smbolos, palavras, urls,
caminhos de arquivo
So objetos imutveis.

81
Tipo String

Strings com aspas simples ou duplas so as


mesmas
>>> aluno, aluno
('aluno', 'aluno')

>>> knights, knights


("knight's", 'knight"s')

82
Tipo String

Concatenao
Operador + (Explcita)
>>> title = "Sentido" + ' Da ' + " Vida"
>>> title
'Sentido Da Vida'
Implcita
>>> title = "Sentido" ' Da ' " Vida"
>>> title
'Sentido Da Vida'

83
Tipo String

Repetio
Operador *
>>> s * 2
'spamspam'

84
Tipo String

Sequncias de Escape
Estas sequncias nos permite colocar byte codes na
string que so difceis de representar no teclado
Comeam com a barra invertida (\)

85
Sequencias de Escape

>>> 'knight\'s', "knight\"s"


("knight's", 'knight"s')

>>> s= 'a\nb\tc
>>> print(s)
a
b c

86
Tipo String

Aspas triplas
Tambm chamado de block string
uma convenincia sinttica para codificar textos em
vrias linhas.

87
Tipo String

Aspas triplas
>>> frase=""" Getlio Vargas
foi presidente do
Brasil"""
>>> frase
' Getlio Vargas\nfoi presidente do\nBrasil'

88
Funes Especficas

Comprimento da string
>>> s="abcdefghij"
>>> len(s)
10

89
Funes Especficas

Remover espaos em branco


>>> s=" parado "
>>> s.strip()
'parado

90
Funes Especficas

Substituies na String
>>> s="bala
>>> s.replace('a','o')
'bolo'

91
Funes Especficas

Comea com uma substring


>>> s="paraleleppedo
>>> s.startswith('pa')
True
Termina com uma substring
>>> s="paraleleppedo
>>> s.endswith('do')
True

92
Funes Especficas

Verificar se a String um nmero inteiro


>>> s="8080"
>>> s.isdigit()
True
>>> s="98e"
>>> s.isdigit()
False

93
Funes Especficas

Todas as letras maisculas ou minsculas.


>>> nome="Getlio Vargas"
>>> nome.upper()
'GETLIO VARGAS'
>>> nome.lower()
'getlio vargas'

94
Funes Especficas

String vazia
s=
Qual funo usar ??

Primeira letra maiscula


>>> s="bom aluno"
>>> s.capitalize()
'Bom aluno

95
Tipo Conjunto

96
Tipo Conjunto

Coleo no ordenada de objetos nicos e


imutveis que suportam operaes
correspondentes a Teoria dos Conjuntos
Por definio, um item aparece apenas uma vez no
conjunto, no importando quantas vezes ele foi
adicionado no conjunto.

97
Tipo Conjunto

>>> x=set('abcde')
>>> y=set('bdxyz')
>>> x
{'a', 'c', 'b', 'e', 'd'}
>>> y
{'y', 'x', 'b', 'd', 'z'}
>>> 'e' in x #pertence
True
98
Tipo Conjunto

>>> x - y #diferena
{'a', 'c', 'e'}
>>> x | y #unio
{'a', 'c', 'b', 'e', 'd', 'y', 'x', 'z'}
>>> x & y #interseo
{'b', 'd'}

99
Tipo Conjunto

>>> x ^y #Diferena simtrica


{'a', 'c', 'e', 'y', 'x', 'z'}
>>> x > y, x < y #SuperConjunto, SubConjunto
(False, False)

100
Mtodos do tipo conjunto

>>> s1 = {1,2,3,4}
>>> s1.add(5)
>>> s1
{1, 2, 3, 4, 5}
>>> s1.remove(1)
>>> s1
{2, 3, 4, 5}

101
Mtodos do tipo conjunto

>>> s1.union({6,7})
{2, 3, 4, 5, 6, 7}
>>> s1.intersection({1,3,5})
{3, 5}
>>> s1.issubset(range(-5,5))
False

102
Tipo Lista

103
Tipo Lista

um objeto que representa uma coleo de


objetos.
Nesta coleo a ordem dos objetos importante.
So objetos mutveis.
Objetos so indexados.

104
Tipo Lista

Variao do tamanho da lista


A lista pode conter objetos complexos como por
exemplo outras listas.

105
Tipo Lista

>>> l = [] # lista vazia


>>> l = [1,2,3,4] # 4 itens, ndice: 0...3
>>> l
[1, 2, 3, 4]
>>> l=['89'] # 1 item, ndice: 0
>>> l
['89']

106
Tipo Lista

>>> l=['abc',['def','ghi']] # lista de listas


>>> l
['abc', ['def', 'ghi']]
>>> l = list('123456789') # itens iterveis
>>> l
['1', '2', '3', '4', '5', '6', '7', '8', '9']

107
Tipo Lista

>>> l= list(range(-5,5)) # sucessivos inteiros


>>> l
[-5, -4, -3, -2, -1, 0, 1, 2, 3, 4]
>>> l[0] # ndice 0 da lista
-5
>>> l[9] # ltimo ndice da lista
4
>>> l[len(l)-1] # ???
4
108
Tipo ListaOperaes bsicas

Concatenao Somente pode envolver o


mesmo tipo de sequncia.
>>> [1,2,3] + [4,5,6]
[1, 2, 3, 4, 5, 6]
>>> [1,2,3] + [4,5,6]
[1, 2, 3, 4, 5, 6]
>>> str([1,2]) + "3,4"
'[1, 2]3,4'
>>> [1,2] + list("34")
[1, 2, '3', '4']
109
Tipo ListaOperaes bsicas

Repetio
>>> ['NI'] * 4
['NI', 'NI', 'NI', 'NI']
>>> ['NI',8,['A',3]] * 2
['NI', 8, ['A', 3], 'NI', 8, ['A', 3]]

110
Tipo ListaOperaes bsicas

>>> 3 in [1,2,3]
True

111
Tipo Lista Indexao

>>> l=['time','Time','TIME'] # a partir do zero


>>> l[1] # acessando o item na posio 1
'Time'
>>> l[-1] # Contagem negativa (direita)
'TIME'
>>> l[-2]
'Time'
>>> l[-3]
'time'
112
Tipo Lista Fatias (Slice)

A fatia resultante uma nova lista contendo os


elementos cujas posies vo do primeiro ndice ao
segundo, no incluindo o ltimo elemento. Se
omitirmos um dos ndices na fatia, assume-se incio
ou fim da lista.

113
Tipo Lista Fatias (Slice)

>>> l=['time','Time','TIME']
>>> l[1:2]
['Time']
>>> l[1:]
['Time', 'TIME']
>>> l[:2]
['time', 'Time']

114
Tipo Lista Matrizes

So listas de listas
Arrays multidimensionais

115
Tipo Lista Matrizes

>>> matriz = [ [1,2,3],[4,5,6],[7,8,9] ]


>>> matriz[1] # acessando a linha 1
[4, 5, 6]
>>> matriz[1][1] # elemento da linha1,
coluna 1
5
>>> matriz[2][0]
7
116
Tipo Lista

Modificando uma lista


>>> L = ['spam','Spam','SPAM']
>>> L[1]='eggs'
>>> L
['spam', 'eggs', 'SPAM']
>>> L[0:2]=['eat','more']
>>> L
['eat', 'more', 'SPAM']

117
Tipo Lista - Mtodos

S<e

118
Tipo Lista - Mtodos

>>> L=[1,2]
>>> L.extend([3,4,5])
>>> L
[1, 2, 3, 4, 5]
>>> L.pop()
5
>>> L
[1, 2, 3, 4]
119
Tipo Lista - Mtodos

>>> L.reverse()
>>> L
[4, 3, 2, 1]
>>> list(reversed(L))
[1, 2, 3, 4]
>>>

120
Tipo Lista Estrutura de pilha

>>>lista=[ ]
>>>lista.append(1)
>>>lista.append(2)
>>>lista
[1,2]
>>>lista.pop()
2
>>>lista.pop()
1
121
>>>lista
Tipo lista - Mtodos

>>> L=['spam','eggs','ham']
>>> L.index('eggs') #ndice do objeto
1
>>> L.insert(1, 'toast')# Insere na posio
>>> L
['spam','toast','eggs','ham']

122
Tipo lista - Mtodos
>>> L.remove('eggs') #Deleta pelo valor
>>> L
['spam','eggs','ham']
>>> L.pop(1) #Deleta pela posio
'toast'
>>> L
['spam','ham']

123
Tipo lista - Mtodos
>>> L
['spam','eat','more','please']
>>> del L[0] # deleta um item
>>> L
['eat','more','please']
>>> del L[1:] # deleta uma seo
>>>L
['eat']
124
Esvaziando uma lista
>>> L=['Already','got','one']
>>>L[1:]=[ ]
>>>L
['Already']
>>>L[0]=[ ]
>>>L
[[]]

125
Tipo Dicionrio

126
Tipo Dicionrio

Itens so armazenados e resgatados atravs de


chaves.
So conhecidos como arrays associativos ou hash.
Podem conter qualquer tipo de objeto.
Mapeamento de chaves para valores.

127
Chave valor

'Opcao1' x-salada
'Opcao2' egg-x-salada
'Opcao3' egg-x-bacon

128
Tipo Dicionrio - Chaves

Valor nico.
Acesso ao valor somente pela chave.
Pode ser qualquer objeto imutvel
(String, nmeros,tuplas )

129
Dicionrio Operaes bsicas
>>> D = {'spam':2,'ham':1,'eggs':3}
#Construindo
>>> D['spam'] #Acessando um valor pela chave
2
>>> D #A ordem no importa
{'eggs': 3, 'ham': 1, 'spam': 2}

130
Dicionrio Operaes bsicas
>>> len(D) # Tamanho do dicionrio
3

>>> 'ham' in D #Verificando se existe chave


True

>>> list(D.keys()) # Criando uma lista


['eggs', 'ham', 'spam']

131
Dicionrio Aes

>>> D
{'eggs': 3, 'ham': 1, 'spam': 2}
>>> D['ham']=['grill','bake','fry'] #Entrada
>>> D
{'eggs': 3, 'ham': ['grill', 'bake', 'fry'], 'spam':
2}

132
Dicionrio Aes e Mtodos

>>> del D['eggs'] #Deletando uma entrada


>>> D
{'ham': ['grill', 'bake', 'fry'], 'spam': 2}
>>> D['brunch']='bacon #Adicionando
>>> D
{'brunch': 'bacon', 'ham': ['grill', 'bake', 'fry'],
'spam': 2}
133
Dicionrio Mtodos

>>> D = {'spam':2,'ham':1,'eggs':3}
>>> list(D.values()) # Listando os valores
[3, 1, 2]
>>> list(D.items()) #Listando as tuplas
[('eggs', 3), ('ham', 1), ('spam', 2)]

134
Dicionrio Mtodos

>>> D.get('spam') #Recuperando o valor


pela chave
2
>>> print(D.get('toast')) #Chave no existe
None

135
Dicionrio Mtodos

>>> D
{'eggs': 3, 'ham': 1, 'spam': 2}
>>> D2={'toast':4, 'muffin':5}
>>> D.update(D2) #Atualizando
>>> D
{'toast': 4, 'muffin': 5, 'eggs': 3, 'ham': 1,
'spam': 2}

136
Dicionrio Mtodos

>>> D3={'spam':0,'toast':6}
>>> D.update(D3) # Atualizando
>>> D
{'toast': 6, 'ham': 1, 'spam': 0, 'muffin': 5,
'eggs': 3}

137
Dicionrio Mtodos

>>> D.pop('muffin') #Retorna o valor e deleta


o item
5
>>> D
{'toast': 6, 'ham': 1, 'spam': 0, 'eggs': 3}

138
Dicionrio Estrutura de Dados

>>> matriz={}
>>> matriz[(1,2,3)]=88
>>> matriz[(4,5,6)]=99
>>> x=1;y=2;z=3 # ; separador de comandos
>>> matriz[(x,y,z)]
88
>>> matriz
{(4, 5, 6): 99, (1, 2, 3): 88}

139
Dicionrio Estrutura de Dados

>>> pessoa={
'nome':'Fulano',
'idade':32,
'emprego': ['analista','advogado'],
'endereco':{'pais':'Brasil','estado':'RJ',
'cep':8053}
}

140
Dicionrio Estrutura de Dados

>>> pessoa['nome']
'Fulano'
>>> pessoa['emprego'][1]
'advogado'
>>> pessoa['endereco']['estado']
'RJ'

141
COMANDOS

Comandos Condicionais
Comandos de Repetio
Comandos de Desvio

142
Estrutura de um programa Python

Programas so compostos por mdulos.

Mdulos possuem comandos.

Comandos possuem expresses.

Expresses criam e processam objetos.

143
Sintaxe de um programa Python

A sintaxe composta por comandos e


expresses.

Expresses modificam objetos.

Comandos codificam a lgica de operaes


realizadas no programa.

144
Comando Condicional - IF

Este comando seleciona aes a serem


realizadas a partir de uma determinada
condio.

Este comando pode conter outros


comandos, inclusive outros if `s

145
IF Regras de Sintaxe
;" separa instrues na mesma linha
x=8; y=5
TESTE, o '()' opcional

: obrigatrio para
delimitar o fim do teste
If ( x > y ) :
print(O valor de x =, x, maior !)
y=0
As instrues indentadas formam um bloco !!!

print(Fim do programa.)
146
Delimitadores de Bloco: Regras de
indentao
x=1
If x :
y=2
If y:
print(bloco 2)
print(bloco 1)
print(bloco 0)

147
Comando Condicional IF/ELIF/ELSE

If (teste 1) :
Bloco 1
elif (teste 2): # Comando opcional
Bloco 2
else : # Comando opcional
Bloco 3

148
Comando Condicional IF/ELIF/ELSE

If ( not 1) :
print('true')
else :
print('false')

149
Comando Condicional IF/ELIF/ELSE

pedido='egg-x-salada'
if(pedido=='x-salada'):
print('R$ 3,00')
elif(pedido=='egg-x-salada'):
print('R$ 4,00')
elif(pedido=='x-tudo'):
print('R$ 5,00')
else:
print('No momento no temos ...')
150
Comando Ternrio

If x: a = y if x else z
a=y
else:
a=z

d=5;f=6 d=5;f=6
if(d > f): x=d if (d>f) else f
x=d
else:
x=f
151
Comando de Repetio - WHILE

Este comando ir executar repetidamente


(loop) um bloco de instrues indentadas
enquanto seu teste (condio) permanecer
verdadeiro.

O loop executado at o teste ser falso.


Neste caso o controle finaliza o comando
while e passa para a prxima instruo.

152
Comando de Repetio - WHILE

O loop pode ser infinito caso o teste nunca


seja falso.

O teste sempre avaliado antes de um


novo loop ser iniciado, portanto caso na
primeira vez ele seja falso, o loop nunca
ser executado.

153
WHILE- Formato Geral

while (teste) : # Teste de loop


bloco 0 # Loop
else: # Comando opcional
bloco 1

154
WHILE- Formato Geral

while (teste) : # Teste de loop


bloco 0 # Loop

155
WHILE - Exemplos

while True:
print('Adeus')

while 1:
print('Adeus')

156
Exemplo Fatiando uma String

frase='Adeus!'
while frase:
print(frase)
frase=frase[1:] SADA

Lao 1 Adeus! frase='deus!'

Lao 2 deus! frase='eus!'

Lao 6 ! frase='' 157


Exemplo Imprimindo os nmeros de
0a9
n=0 ; max=10
while (n < max) :
print(n, end=' ') # sada na mesma linha
n+=1
SADA

Lao 1: 0 < 10 ? n=0 0 n=1

Lao 2: 1 < 10 ? n=1 01 n=2

n=11 158
Lao 10: 9 < 10 ? n=10 0 1 10
Comandos de Desvio
Break/Continue/Pass

Pass: comando vazio.

Continue: pula novamente para o teste.

Break: Encerra o loop.

Loop else: executado apenas se o loop


finalizado normalmente, ou seja, sem um
break ser chamado.
159
While Formato Geral

while (teste 1) :
bloco 1
If (teste 2): break
If (teste 3): break
else :
bloco 2

160
Pass

utilizado quando a sintaxe exige uma


expresso ou comando mas por enquanto
voc no ir defini-la.

while 1:
pass #TODO: print('Adeus')

161
Continue

Pulo imediato para o teste de um novo


loop.

Imprimindo os nmeros divisveis por 2


x=11
while x:
x=x-1
If( x%2 != 0): continue
print(x, end=' ')

162
Break

Sada imediata do loop .

Entre com um nome e idade de uma pessoa


at o usurio digitar stop"

while True:
nome=input('Entre com um nome ?')
if(nome =='stop'): break
idade=input('Entre com uma idade')
print('Nome:', nome,'Idade: ', idade )
163
Loop Else -Exemplo do programa para
identificar se um nmero > 2 primo

Sada imediata do loop .


numero = int(input("Entre com o possvel numero primo maior
que 2: "))
fator = numero // 2
print(fator)
while (fator > 1):
if(numero % fator == 0):
print(numero, 'e divisivel por ', fator)
break
fator -=1
else:
164
print('Primo')
Comando For

um iterador de sequncia genrica.

A cada lao e passa por uma sequncia


ordenada do objeto.

165
Formato geral

for varivel in objeto : Relaciona itens de


instrues um objeto ao objetivo

else: A cada lao


o objetivo associado
instrues a um item

Caso um break
no seja executado

166
Formato completo

for varivel in objeto :


instrues
If (teste): break
If (teste):continue
else:
instrues

167
Exemplos Acessando os elementos

for x in [flamengo,vasco,fluminense]:
print (x, end= )
SADA

Lao 1 x=lista[0] flamengo

Lao 2 x=lista[1] flamengo vasco

Lao 3 x=lista[2] flamengo vasco fluminense

168
Exemplos Somando os itens de uma
lista
soma = 0
for x in [1,2,3,4] :
soma = soma + x
print(soma)

Lao 1 x=1;soma=0+1

Lao 2 x=2;soma=1+2

Lao 3 x=3;soma=3+3
SADA

169
Lao 4 x=4,soma=4+6 10
Exemplos Somando os nmeros
pares de uma lista de 1 a 7
soma = 0
for x in range(0,7,2) :
soma = soma + x
print(soma)

Lao 1 x=0;soma=0+0

Lao 2 x=2;soma=0+2

Lao 3 x=4;soma=2+4
SADA

170
Lao 4 x=6,soma=6+6 12
Exemplos Multiplicando os itens de
uma lista
produto = 1
for item in range(1,5):
prod * = item
print(soma)

Lao 1 item=1;prod=1*1

Lao 2 item=2;prod=1*2

Lao 3 item=3;prod=3*2
SADA

171
Lao 4 item=4,prod=4*6 24
Exemplos Iterando em uma String

frase = 'PAZ'
for letra in frase :
print(letra, end = ' ')

SADA

Lao 1 letra=frase[0] P

Lao 2 letra=frase[1] PA

Lao 3 letra=frase[2] PAZ

172
Exemplos Iterando em um dicionrio

d = {'a':1,'b':2,'c':3}
for key in d:
print(key,'=>',d[key])

SADA

Lao 1 key='a' a=> 1

Lao 2 key='c' c=> 3

Lao 3 key='b' b=> 2

173
Exemplos Iterando em um conjunto

c = {'a','b','c'}
for elemento in c:
print(elemento, end=' ')

SADA

Lao 1 elemento='a' a

Lao 2 elemento='c' ac

Lao 3 elemento='b' acb

174
Exemplos Acessando a posio de
um elemento
frase='uva!'
i=0
while i < len(frase):
if(frase[i]=="a" or frase[i]=="A"):
print(i)
i=i+1 SADA

Lao 1 elemento='u'

Lao 2 elemento='v'

Lao 3 elemento='a' 2
175
Funes

176
Funes

Funes so dispositivos que agrupam um


conjunto de comandos para que os mesmos
possam ser executados mais de uma vez
em um programa.

Apresentam um valor como resultado.

Especifica argumentos que so parmetros


de entrada da funo.

177
Por que usar funes ???

Maximizar o reuso do cdigo.

Minimizar a redundncia.

Dividir o programa em partes bem definidas.

178
Funes - Comando def

Este comando cria um objeto funo e define


um nome a este objeto

def <nome> (arg1,arg2,arg3,...,argn):


<comandos>
return <valor> OPCIONAL

179
Funes - Exemplo

# definindo a funo
def multiplica (x,y)
return x*y

X 8
#chamando a funo
prod = multiplica(8,2)
print(prod) Y 2

180
prod 16
Polimorfismo

um comportamento dependente de tipo.

Uma operao depende dos objetos


operados.

Uma funo pode apresentar vrios


objetivos dependendo dos tipos de objetos
e as operaes feitas.

181
Polimorfismo - Exemplo

# definindo a funo
def multiplica (x,y)
return x*y

#chamando a funo com argumentos


diferentes
prod = multiplica(8,2)
replicacao=multiplica('OI',2)
zeros=multiplica([0],2)
182
Polimorfismo - Exemplo

def intersecao (seq1,seq2):


res=[ ]
for x in seq1:
if x in seq2:
res.append(x)
return res

print(intersecao(SPAM , SCAM) )
print(intersecao( [1,2,3 ], {1,4} )
183
Escopo

184
Escopo

Lugar onde as variveis so definidas e acessadas.

Python procura o nome das variveis em seu


namespace.

Visibilidade do nome em seu cdigo.

O trecho de cdigo onde voc define um nome


para a varivel determina o namespace que ela
estar e consequentemente o escopo de
visibilidade.
185
Regras de Escopo

Se uma varivel definida dentro de uma def, ela


local para esta funo.

Se uma varivel definida para um def aninhado, ela


no local para as funes aninhadas
modificarem seu valor.

Se uma varivel definida fora de todos os defs, ela


global para o arquivo (mdulo) inteiro.

186
Regras de Escopo

Cada mdulo um escopo global para a varivel


definida no topo do arquivo. Estas variveis globais
se tornam atributos do mdulo objeto para o mundo
externo e so apenas variveis dentro do mdulo.

Cada chamada a uma funo cria um novo escopo


local.

Variveis definidas dentro de uma funo por padro


so locais a menos que sejam declaradas globais
ou no locais.
187
Resoluo de Nomes: LEGB

A procura pela referncia de um nome segue a ordem


dos 4 escopos:
1. Local
2. No local
3. Global
4. Built-in

188
Exemplo de Escopos

#Cdigo do arquivo (mdulo) escopo.py


#escopo global : x uma varivel global
x=99

def func(y):
# escopo local : z e y so variveis locais
z = x + y # acessando X global
return z

print(func(1)) # imprime o valor 100


189
Escopo Global

#Cdigo do arquivo (mdulo) escopo.py


#escopo global : x uma varivel global
x=99

def func( ):
global x # acessando X global
x=88

func()
print(x) # imprime o valor 88
190
Escopo Global

#Cdigo do arquivo (mdulo) escopo.py


#escopo global : x uma varivel global
y,z=1,2

def todas_globais( ):
global x # acessando X global
x=y+z

print(x) # imprime o valor 3

191
Acessando variveis globais de outros mdulos

# mdulo primeiro.py
x= 99

# mdulo segundo.py
import primeiro
print(primeiro.x)
primeiro.x=88

192
Funes Aninhadas

x= 99 # varivel global nunca usada

def f1( ) : # funco pai


x=88 # varivel local
def f2( ) : # funo filha (aninhada)
print(x)
f2()

>>> f1()

193
Funes Aninhadas

def f1( ) : # funco pai


x= 99
def f2( ) : # funo filha (aninhada)
def f3( ):
print (x)
f3()
f2()

>>> f1()

194
Variveis no locais

def teste(inicio):
estado = inicio # definio de uma varivel local
def teste_filho ( ):
nonlocal estado #para poder modificar o valor
estado +=1
print(estado)

return teste_filho( )

>>> teste(0) # retorna o valor 1

195
Argumentos

196
Argumentos

Sao objetos enviados as funes como entradas.

Passagem de objetos imutveis feita por valor.


Exemplo: objetos inteiros, reais e strings.

Passagem de objetos mutveis feita por referncia.


Exemplo: listas, conjuntos e dicionrios.

197
Passagem de argumentos por valor

def f(a):
a = 99

b=88
f(b)
print(b) # o valor de b no muda

>>> 88

198
Exemplo sem a chamada de funo

x=1
a=x
a=2
print(x)

>>> 1

199
Passagem de argumentos por referncia

def troca (b):


b[0]='spam' # objeto compartilhado (mutvel)

l=[1,2]
troca(l)
print(l)

>>> ['spam',2]

200
Exemplo sem a chamada de funo

L=[1,2]
b=l
b[0]='spam'
print(l)

>>> ['spam',2]

201
Evitando mudanas nos argumentos imutveis

def copia( a ):
a = a[ : ] # copia a prpria lista
a[0]=5
a[1]=5

L=[1,2]
copia(L)
print(L)

>>>[1,2]

202
Modos de Passagem de Argumentos

Existem vrias combinaes de argumentos.

Alguns exemplos:

funcao(valor): Argumento definido pela posio


funcao (nome=valor): Argumento definido pelo nome

203
Funcao(valor)

def f(a,b,c):
print(a,b,c)

f(1,2,3)

>>> 1 2 3

204
Funcao(nome=valor)

def f(a,b,c):
print(a,b,c)

f(c=3,b=2,a=1)

>>> 1 2 3

205
funcao(nome = valor padro)

def f(a=1,b=2,c=3):
print(a,b,c)

f(2,4)

>>> 2 4 3

206
funcao(nome = valor padro)

def f(a=1,b=2,c=3):
print(a,b,c)

f(2,4)

>>> 2 4 3

207
Recursividade

208
Recursividade

Uma funo recursiva quando chama ela mesma.

Ela deve apresentar dois casos:


Caso base e o caso recursivo

209
Recursividade

Caso base: a soluo do problema para o caso


mais simples.

Se no for o caso base:



Quebre o problema em problemas menores.

Carregue uma nova cpia da funo para
trabalhar com os casos menores (chamada
recursiva)

Convergir para o caso base

Funo faz uma chamada para ela mesma
dentro do retorno da funo.

210
Recursividade

Exemplo: fatorial
n! = n * ( n 1 ) * ( n 2 ) * * 1
Caso base (1! = 0! = 1)

Caso recursivo: ( n! = n * ( n 1 )! )
5! = 5 * 4!
4! = 4 * 3!
3! = 3 * 2!

211
Recursividade

def fat (n):

if (n==0 or n==1): # caso base


return 1
else: # caso recursivo n*(n-1)!
return n * fat(n-1)

212
print(fat(5))
Nmeros Pseudo-Aleatrios

Criao de uma funo f(x) que gera uma sequncia


de nmeros a partir do valor inicial x.

X chamado de semente para gerar a sequncia de


nmeros.

F(x) chamado de gerador de sequncia.

213
Exemplo

def aleat(semente):
semente = semente * 1103515245 + 12345
return int((semente / 65536) % 32768)

for i in range(0,10):
print(aleat(i),end='')

>>> 0 16838 908 17747 1817 18655 2726 19564 3634


20472

214
Mdulo Random

# Retorna um inteiro determinado pelo range


print(random.randrange(0, 101, 2))
>>> 30

# Retorna um elemento de uma sequncia


no vazia
print(random.choice("abcdefghij"))
>>> c
215
print(random.choice(range(0,1000)))
Mdulo Random
# importando a biblioteca random para ser
chamada no programa
import random
# Retorna float x, 0.0 <= x < 1.0
print(random.random())
>>> 0.7974410192661805
# Retorna float x, 1.0 <= x < 10.0
print(random.uniform(1, 10))
>>> 6.263809049294528
# Retorna inteiro n, 0 <= n <=9
print(random.randint(0,9))
>>> 9

216