Você está na página 1de 204

Python

Professor Marcio Antelio


marcioantelio.cefet@gmail.com

1
Bibliografia

n  Dawson M. Python Programming for the Absolute


Beginner. 3º ed. Course Technology PTR, 2010.

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

n  Lutz, Mark. Learning Python. 4º ed. O´Relly, 2011.

2
Python

n  Por que este nome ?


¡  Guido Van Rossum
¡  Série de comédia da BBC “Monty Python’s Flying
Circus”

3
Python

n  Qualidade
¡  Sintaxe simples
¡  Segue um conjunto de conceitos principais
¡  Fácil de aprender
¡  Fácil de compreender
¡  Fácil de lembrar

4
Python

n  Produtividade de desenvolvimento


¡  Menor esforço de programação
¡  Maior velocidade de implementação

5
Python

n  Linguagem de script ?


¡  É uma linguagem de programação que é geralmente
aplicado em regras de script
¡  Ferramentas shell
¡  Linguagem de controle de outros componentes
¡  Linguagem simples usada para a codificação de tarefas
rápidas

6
Python

n  Desvantagem ?
¡  Linguagem interpretada
¡  Depende do programa
¡  Maior performance do hardware

7
Python

n  O que posso fazer ?


¡  Programação de sistemas
¡  Interfaces gráficas
¡  Script de internet
¡  Integração de componentes

8
Python

n  O que posso fazer ?


¡  Banco de Dados
¡  Programação científica e numérica
¡  Jogos
¡  Imagens
¡  Robots

9
Python

n  Vantagens
¡  OO
¡  Open Source
¡  Independente de plataforma
¡  Fácil de usar
¡  Fácil de aprender

10
Interpretador Python

n  Execução do programa


¡  Visão do Desenvolvedor
¡  Visão do Processo

n  Download
¡  http://www.python.org
¡  Versões 2.X e 3.X

11
Visão do desenvolvedor

n  Um programa escrito em Python é apenas um


arquivo texto contendo código fonte (script)
n  Por convenção este arquivo possui a extensão
“.py”

12
Visão do desenvolvedor

n  O arquivo “exemplo.py” possui o seguinte script


Python:
¡  print (‘Hello World’)
¡  print (2 ** 100)

13
Visão do desenvolvedor

n  Saída do script


¡  Hello World
¡  1267650600228229401496703205376

14
Visão do Processo

Source Code Byte Code Python Virtual


Machine

exemplo.py exemplo.pyc PVM

15
Ciclo de Desenvolvimento

n  Não existe distinção entre o ambiente de


desenvolvimento e execução.
n  O compilador está presente em tempo de execução
e é parte do sistema que roda o programa.
n  Experiência de programação dinâmica

16
Implementações alternativas

n  IronPython
¡  Linguagem .NET
n  CPython
¡  Linguagem C
n  Jython
¡  Linguagem Java

17
Futuro

n  Projeto Unladen Swallow


¡  Mais rápido do que C em alguns contextos.
n  Projeto PyPy
¡  Implementação rápida e flexível de Python.
n  Projeto Parrot
¡  Máquina virtual comum.

18
Prompt Python

19
Prompt iterativo

n  Começa com informações sobre Python.


n  “>>>” O prompt está esperando que você digite
um comando ou expressão (Entrada).
n  O resultado (Saída) é mostrado na linha seguinte.

20
Prompt Python

21
Prompt Python

n  A sessão iterativa permite imprimir (Saída) o


resultado de uma expressão que você digitou
(Entrada).

n  Estudar a linguagem.

n  Testes.

22
Prompt Python

23
Rodando scripts

n  Escrever o código fonte em arquivos.


n  Estes arquivos são chamado módulos ou scripts.
n  Extensão .py para os arquivos.

24
Rodando scripts

25
Rodando scripts : Prompt
Python

26
Rodando scripts : Prompt DOS

27
Rodando scripts : Prompt DOS

n  Salvando a saída em um arquivo

28
Rodando scripts : Prompt
Python

29
Rodando scripts

30
Interface IDLE

31
Interface IDLE

32
Objetos

n  São estruturas de dados.


n  Pode conter atributos (variáveis).
n  Pode conter métodos (funções).

33
Objetos

n  Tipos principais


¡  Numbers
¡  String
¡  List
¡  Dictionaries

34
Objetos

n  Tipos principais


¡  Tuples
¡  Files
¡  Sets
¡  Boolean

35
Funções existentes

n  Estrutura básica de uma função


¡  retorno nomeDaFunção ( argumentos)
n  Veremos futuramente como criar nossas própias
funções.
n  Veremos como importar módulos.

36
Tipo Numérico

n  Números inteiros.


n  Números reais.
n  Números complexos.
n  E outros.

37
Inteiros

n  Tamanho ilimitado


n  d = 1234
n  d=0
n  d = - 10
n  d = 1234659786597431235997412949

38
Inteiros

n  Podem ser codificados:


¡  Base 16 (hexadecimal)
Começa com “0x” ou “0X” seguido por uma string de dígitos
n 
(0-9 e A-F)
¡  Base 8 (octal)
LETRA

n  Começa com “0o” ou “0O” seguido pelos dígitos (0-7)


¡  Base 2 (binário)
n  Começa com “0b” ou “0B” seguido pelos dígitos (0-1)

39
Inteiros

n  d = 0o177
n  d = 0x9ff
n  d = 0b101010

40
Números reais

n  Conhecidos como ponto flutuante


n  Possui o ponto decimal “.”
n  Expoente é definido por “e” ou “E” seguido
opcionalmente pelo sinal

41
Números reais

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

42
Números complexos

n  São compostos pela parte real + parte imaginária


n  Parte imaginária é terminada com “j” ou “J”
n  Podem ser construídos chamando a função
complex (real, imag).

43
Números complexos

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

44
Operadores de expressões

n  Expressões são combinações de números


(ou outros objetos) e operadores que
computam um valor quando executados
pelo Python.
n  Para realizar a expressão (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.

45
Precedência dos operadores

n  Quando uma expressão envolve mais de um


operador, Python agrupa suas partes de acordo
com as regras de precedência. Estas regras
determinam a ordem com que estas partes serão
computadas.

46
47
Precedência dos operadores

n  X +Y*Z
n  Primeiramente Python realiza a multiplicação de Y e
Z, para depois somar com X.
n  Isto porque “*” tem uma precedência maior do que
“+”.

48
Parênteses

n  (X + Y) *Z
n  Python sempre avalia primeiro expressões em
parênteses.
n  Assim o operador + é aplicado aos objetos X e Y
primeiro, o operador * é aplicado ao objeto Z e ao
objeto resultante da soma.

49
Misturando tipos numéricos

n  Expressões podem envolver operandos (objetos) de


vários tipos.
n  Python primeiramente converte operandos para o
tipo mais complicado e então realiza o cálculo com
todos os operandos no mesmo tipo.

50
Misturando tipos numéricos

n  Ranking dos tipos numéricos em ordem crescente


de complexidade
¡  Inteiro
¡  Real
¡  Número Complexo

51
Misturando tipos numéricos

n  soma = 4 + 3.14


n  Primeiramente o valor inteiro (4) é convertido para
ponto flutuante (4.0). Depois é realizado a soma de
números reais.
n  soma = 7.14

52
Conversões de tipos numéricos

n  >>> int( 3.1415 )


3

n  >>> float( 3 )


3.0

53
Váriaveis

n  São criadas quando elas recebem um valor pela


primeira vez
n  São substituídas por seus valores quando usadas
em expressões
n  Devem ser criadas antes de serem usadas em
expressões
n  Variáveis estão referenciando objetos.

54
Váriaveis e Expressões básicas

55
Comparações

n  Resultam em valores booleanos


¡  True
¡  False

56
Comparações

57
Comparações

58
Divisões

n  Verdadeira (X / Y)
¡  Retorna um resultado real

n  Floor (X // Y)
¡  Retorna o valor mais próximo e abaixo do resultado
truncado , retornando inteiro caso os operandos sejam
inteiros ou real caso algum operando seja real.

59
Divisões

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

60
Números Complexos

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

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

n >>> (2+1j)*3
(6 + 3j)
61
Bases numéricas

n 0x01, 0x10, 0xff


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

62
Bases numéricas

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


(‘0o100’,’0x40’,’0b1000000’)

n  >>> int(‘64’), int(‘100’,8), int(‘40’,16), int(‘1000000’,


2)
(64,64,64,64)

63
Ferramentas numéricas

n  Outras funções pré-definidas


¡  Funções que estão disponíveis quando executamos o
interpretador
n  Bibliotecas numéricas
¡  Módulos criados para atender diferentes áreas

64
Bibioteca math

65
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
66
Mais funções pré-definidas

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


n 

(16,16)

abs(-42.0),sum( (1,2,3,4 ))
n 

(42.0,10)

n min(3,1,2,4), max(3,1,2,4)
(1,4)
67
Mais funções pré-definidas

68
Tipo Booleano

n  True ou False


n  1 ou 0

69
Tipo Booleano

70
Álgebra Booleana

n  Complementação (ou Negação, ou Inversão)


¡  Operação cujo resultado é simplesmente o valor
complementar ao que a variável apresenta. Como uma
variável booleana pode assumir um entre dois valores,
caso assuma o valor 1 (true), seu complemento é 0
(false) e vice-versa.

71
Álgebra Booleana

n  AND (Multiplicação Lógica)


¡  Esta operação binária resulta em 0 (false) caso pelo
menos uma entrada seja 0 (false)

n  OR (Adição Lógica)


¡  Esta operação binária resulta em 1(true) se pelo menos
uma das variáveis de entrada for 1(true)

72
Álgebra Booleana

n  XOR
¡  Esta operação binária resulta em 1(true) caso as
entradas possuam valores diferentes, caso contrário o
resultado é 0(false)

73
Tabela Verdade

74
Exemplo de código

75
Tipo String

n  Coleção ordenada de caracteres usados para


armazenar e representar informação baseada em
texto.
n  Serve para codificar símbolos, palavras, urls,
caminhos de arquivo …
n  São objetos imutáveis.

76
Tipo String

n  Strings com aspas simples ou duplas são as


mesmas
¡  >>> “aluno”, ‘aluno’
('aluno', 'aluno')

¡  >>> “knight’s”, ‘knight”s’


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

77
Tipo String

n  Concatenação
¡  Operador + (Explícita)
n  >>> title = "Sentido" + ' Da ' + " Vida"
n  >>> title
n  'Sentido Da Vida'
¡  Implícita
n  >>> title = "Sentido" ' Da ' " Vida"
n  >>> title
n  'Sentido Da Vida'

78
Tipo String

n  Repetição
¡  Operador *
n  >>> s * 2
n  'spamspam'

79
Tipo String

n  Sequências de Escape


¡  Estas sequências nos permite colocar byte codes na
string que são difíceis de representar no teclado
¡  Começam com a barra invertida (\)

80
Sequencias de Escape

n  >>> 'knight\'s', "knight\"s"


n  ("knight's", 'knight"s')

n  >>> s= 'a\nb\tc‘


n  >>> print(s)
n  a
n  b c

81
Tipo String

n  Aspas triplas


¡  Também chamado de “block string”
¡  É uma conveniência sintática para codificar textos em
várias linhas.

82
Tipo String

n  Aspas triplas


¡  >>> frase=""" Getúlio Vargas
¡  foi presidente do
¡  Brasil"""
¡  >>> frase
¡  ' Getúlio Vargas\nfoi presidente do\nBrasil'

83
Funções Específicas

n  Comprimento da string


¡  >>> s="abcdefghij"
¡  >>> len(s)
¡  10

84
Funções Específicas

n  Remover espaços em branco


¡  >>> s=" parado "
¡  >>> s.strip()
¡  'parado‘

85
Funções Específicas

n  Substituições na String


¡  >>> s="bala“
¡  >>> s.replace('a','o')
¡  'bolo'

86
Funções Específicas

n  Começa com uma substring


¡  >>> s="paralelepípedo“
¡  >>> s.startswith('pa')
¡  True
n  Termina com uma substring
¡  >>> s="paralelepípedo“
¡  >>> s.endswith('do')
¡  True

87
Funções Específicas

n  Verificar se a String é um número inteiro


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

88
Funções Específicas

n  Todas as letras maiúsculas ou minúsculas.


¡  >>> nome="Getúlio Vargas"
¡  >>> nome.upper()
¡  'GETÚLIO VARGAS'
¡  >>> nome.lower()
¡  'getúlio vargas'

89
Funções Específicas

n  String vazia


¡  s=“”
¡  Qual função usar ??

n  Primeira letra maiúscula


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

90
Tipo Conjunto

n  Coleção não ordenada de objetos únicos e


imutáveis que suportam operações
correspondentes a Teoria dos Conjuntos
n  Por definição, um item aparece apenas uma vez no
conjunto, não importando quantas vezes ele foi
adicionado no conjunto.

91
Tipo Conjunto

n  >>> x=set('abcde')


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

n  >>> x - y #diferença


n  {'a', 'c', 'e'}
n  >>> x | y #união
n  {'a', 'c', 'b', 'e', 'd', 'y', 'x', 'z'}
n  >>> x & y #interseção
n  {'b', 'd'}

93
Tipo Conjunto

n  >>> x ^y #Diferença simétrica


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

94
Métodos do tipo conjunto

n  >>> s1 = {1,2,3,4}


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

95
Métodos do tipo conjunto

n  >>> s1.union({6,7})


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

96
Tipo Lista

n  É um objeto que representa uma coleção de


objetos.
n  Nesta coleção a ordem dos objetos é importante.
n  São objetos mutáveis.
n  Objetos são indexados.

97
Tipo Lista

n  Variação do tamanho da lista


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

98
Tipo Lista

n  >>> l = [] # lista vazia


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

99
Tipo Lista

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


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

100
Tipo Lista

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


n  >>> l
n  [-5, -4, -3, -2, -1, 0, 1, 2, 3, 4]
n  >>> l[0] # índice 0 da lista
n  -5
n  >>> l[9] # último índice da lista
n  4
n  >>> l[len(l)-1] # ???
n  4
101
Tipo Lista–Operações básicas

n  Concatenação – Somente pode envolver o


mesmo tipo de sequência.
¡  >>> [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']
102
Tipo Lista–Operações básicas

n  Repetição
¡  >>> ['NI'] * 4
¡  ['NI', 'NI', 'NI', 'NI']
¡  >>> ['NI',8,['A',3]] * 2
¡  ['NI', 8, ['A', 3], 'NI', 8, ['A', 3]]

103
Tipo Lista–Operações básicas

n  >>> 3 in [1,2,3]


n  True

104
Tipo Lista – Indexação

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


n  >>> l[1] # acessando o item na posição 1
n  'Time'
n  >>> l[-1] # Contagem negativa (direita)
n  'TIME'
n  >>> l[-2]
n  'Time'
n  >>> l[-3]
n  'time'
105
Tipo Lista – Fatias (Slice)

n  A fatia resultante é uma nova lista contendo os


elementos cujas posições vão do primeiro índice ao
segundo, não incluindo o último elemento. Se
omitirmos um dos índices na fatia, assume-se início
ou fim da lista.

106
Tipo Lista – Fatias (Slice)

n  >>> l=['time','Time','TIME']


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

107
Tipo Lista – Matrizes

n  São listas de listas


n  Arrays multidimensionais

108
Tipo Lista – Matrizes

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


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

n  Modificando uma lista


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

110
Tipo Lista - Métodos

S<e

111
Tipo Lista - Métodos

n  >>> L=[1,2]


n  >>> L.extend([3,4,5])
n  >>> L
n  [1, 2, 3, 4, 5]
n  >>> L.pop()
n  5
n  >>> L
n  [1, 2, 3, 4]
112
Tipo Lista - Métodos

n  >>> L.reverse()


n  >>> L
n  [4, 3, 2, 1]
n  >>> list(reversed(L))
n  [1, 2, 3, 4]
n  >>>

113
Tipo Lista – Estrutura de pilha

>>>lista=[ ]
>>>lista.append(1)
>>>lista.append(2)
>>>lista
[1,2]
>>>lista.pop()
2
>>>lista.pop()
1
114
>>>lista
Tipo Lista - Métodos

n  >>> L=['spam','eggs','ham']


n  >>> L.index('eggs') #Índice do objeto
n  1
n  >>> L.insert(1, 'toast')# Insere na posição
n  >>> L
n  ['spam','toast','eggs','ham']

115
Tipo Lista - Métodos

n  >>> L.remove('eggs') #Deleta pelo valor


n  >>> L
n  ['spam','eggs','ham']
n  >>> L.pop(1) #Deleta pela posição
n  'toast'
n  >>> L
n  ['spam','ham']

116
Tipo Lista - Métodos

n  >>> L
n  ['spam','eat','more','please']
n  >>> del L[0] # deleta um item
n  >>> L
n  ['eat','more','please']
n  >>> del L[1:] # deleta uma seção
n  >>>L
n  ['eat']
117
Esvaziando uma lista

n  >>> L=['Already','got','one']


n  >>>L[1:]=[ ]
n  >>>L
n  ['Already']
n  >>>L[0]=[ ]
n  >>>L
n  [[]]

118
Tipo Dicionário

n  Itens são armazenados e resgatados através de


chaves.
n  São conhecidos como arrays associativos ou hash.
n  Podem conter qualquer tipo de objeto.
n  Mapeamento de chaves para valores.

119
Tipo Dicionário - Chaves

n  Valor único.


n  Acesso ao valor somente pela chave.
n  Pode ser qualquer objeto imutável
(String, números,tuplas …)

120
Dicionário – Operações básicas
n  >>> D = {'spam':2,'ham':1,'eggs':3}
#Construindo
n  >>> D['spam'] #Acessando um valor pela chave
n  2
n  >>> D #A ordem não importa
n  {'eggs': 3, 'ham': 1, 'spam': 2}

121
Dicionário – Operações básicas
n  >>> len(D) # Tamanho do dicionário
n  3

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


n  True

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


n  ['eggs', 'ham', 'spam']

122
Dicionário – Ações

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

123
Dicionário – Ações e Métodos

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


n  >>> D
n  {'ham': ['grill', 'bake', 'fry'], 'spam': 2}
n  >>> D['brunch']='bacon‘ #Adicionando
n  >>> D
n  {'brunch': 'bacon', 'ham': ['grill', 'bake', 'fry'], 'spam': 2}

124
Dicionário – Métodos

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

125
Dicionário – Métodos

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


pela chave
n 2
n >>> print(D.get('toast')) #Chave não existe
n None

126
Dicionário – Métodos

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

127
Dicionário – Métodos

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

128
Dicionário – Métodos

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


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

129
Dicionário – Estrutura de Dados

n  >>> matriz={}


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

130
Dicionário – Estrutura de Dados

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

131
Dicionário – Estrutura de Dados

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

132
COMANDOS

Comandos Condicionais
Comandos de Repetição
Comandos de Desvio

133
Estrutura de um programa Python

n  Programas são compostos por módulos.


n  Módulos possuem comandos.
n  Comandos possuem expressões.
n  Expressões criam e processam objetos.

134
Sintaxe de um programa Python

n  A sintaxe é composta por comandos e


expressões.
n  Expressões modificam objetos.
n  Comandos codificam a lógica de operações
realizadas no programa.

135
Comando Condicional - IF

n  Este comando seleciona ações a serem


realizadas a partir de uma determinada
condição.
n  Este comando pode conter outros
comandos, inclusive outros if `s

136
IF – Regras de Sintaxe
“;" separa instruções na mesma linha
x=8; y=5
TESTE, o '()'é opcional

“:” é obrigatório para


delimitar o fim do teste
If ( x > y ) :
print(“O valor de x =”, x, “ é maior !”)
y=0
As instruções indentadas formam um bloco !!!

print(“Fim do programa.”)
137
Delimitadores de Bloco: Regras de
indentação
x=1
If x :
y=2
If y:
print(“bloco 2”)
print(“bloco 1”)
print(“bloco 0”)

138
Comando Condicional – IF/ELIF/ELSE

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

139
Comando Condicional – IF/ELIF/ELSE

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

140
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 não temos ...')
141
Comando Ternário

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
142
Comando de Repetição - WHILE

l  Este comando irá executar repetidamente


(loop) um bloco de instruções indentadas
enquanto seu teste (condição) permanecer
verdadeiro.
l  O loop é executado até o teste ser falso.
Neste caso o controle finaliza o comando
while e passa para a próxima instrução.

143
Comando de Repetição - WHILE

l  O loop pode ser infinito caso o teste nunca


seja falso.

l  O teste sempre é avaliado antes de um


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

144
WHILE- Formato Geral

while (teste) : # Teste de loop


bloco 0 # Loop
else: # Comando opcional
bloco 1

145
WHILE- Formato Geral

while (teste) : # Teste de loop


bloco 0 # Loop

146
WHILE - Exemplos

while True:
print('Adeus')



while 1:
print('Adeus')

147
Exemplo – Fatiando uma String

frase='Adeus!'
while frase:
print(frase)
frase=frase[1:] SAÍDA

Laço 1 Adeus! frase='deus!'

Laço 2 deus! frase='eus!'

Laço 6 ! frase='' 148


Exemplo – Imprimindo os números de
0a9
n=0 ; max=10
while (n < max) :
print(n, end=' ') # saída na mesma linha
n+=1
SAÍDA

Laço 1: 0 < 10 ? n=0 0 n=1

Laço 2: 1 < 10 ? n=1 01 n=2

n=11 149
Laço 10: 9 < 10 ? n=10 0 1 … 10
Comandos de Desvio Break/Continue/
Pass
l  Pass: comando vazio.

l  Continue: pula novamente para o teste.

l  Break: Encerra o loop.

l  Loop else: é executado apenas se o loop é


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

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

151
Pass

l  É utilizado quando a sintaxe exige uma


expressão ou comando mas por enquanto
você não irá defini-la.

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

152
Continue

l  Pulo imediato para o teste de um novo loop.


l  Imprimindo os números divisíveis por 2

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

153
Break

l  Saída imediata do loop .


l  Entre com um nome e idade de uma pessoa
até o usuário 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 )
154
Loop Else -Exemplo do programa para
identificar se um número > 2 é primo
l  Saída imediata do loop .
numero = int(input("Entre com o possível 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:
155
print('Primo')
Comando For

É um iterador de sequência genérica.

A cada laço e passa por uma sequência


ordenada do objeto.

156
Formato geral

for variável in objeto : Relaciona itens de


instruções um objeto ao objetivo

else: A cada laço


o objetivo é associado
instruções a um item

Caso um break
não seja executado

157
Formato completo

for variável in objeto :


instruções
If (teste): break
If (teste):continue
else:
instruções

158
Exemplos – Acessando os elementos

for x in [“flamengo”,”vasco”,”fluminense”]:
print (x, end=” ”)
SAÍDA

Laço 1 x=lista[0] flamengo

Laço 2 x=lista[1] flamengo vasco

Laço 3 x=lista[2] flamengo vasco fluminense

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

Laço 1 x=1;soma=0+1

Laço 2 x=2;soma=1+2

Laço 3 x=3;soma=3+3
SAÍDA

160
Laço 4 x=4,soma=4+6 10
Exemplos – Somando os números
pares de uma lista de 1 a 7
soma = 0
for x in range(0,7,2) :
soma = soma + x
print(soma)

Laço 1 x=0;soma=0+0

Laço 2 x=2;soma=0+2

Laço 3 x=4;soma=2+4
SAÍDA

161
Laço 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)

Laço 1 item=1;prod=1*1

Laço 2 item=2;prod=1*2

Laço 3 item=3;prod=3*2
SAÍDA

162
Laço 4 item=4,prod=4*6 24
Exemplos – Iterando em uma String

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

SAÍDA

Laço 1 letra=frase[0] P

Laço 2 letra=frase[1] PA

Laço 3 letra=frase[2] PAZ

163
Exemplos – Iterando em um dicionário

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

SAÍDA

Laço 1 key='a' a=> 1

Laço 2 key='c' c=> 3

Laço 3 key='b' b=> 2

164
Exemplos – Iterando em um conjunto

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

SAÍDA

Laço 1 elemento='a' a

Laço 2 elemento='c' ac

Laço 3 elemento='b' acb

165
Exemplos – Acessando a posição de
um elemento
frase='uva!'
i=0
while i < len(frase):
if(frase[i]=="a" or frase[i]=="A"):
print(i)
i=i+1 SAÍDA

Laço 1 elemento='u'

Laço 2 elemento='v'

Laço 3 elemento='a' 2
166
Funções
n  Funções são dispositivos que agrupam um
conjunto de comandos para que os mesmos
possam ser executados mais de uma vez
em um programa.

n  Apresentam um valor como resultado.

n  Especifica argumentos que são parâmetros


de entrada da função.

167
Por que usar funções ???

n  Maximizar o reuso do código.


n  Minimizar a redundância.
n  Dividir o programa em partes bem definidas.

168
Funções - Comando def

Este comando cria um objeto função e define


um nome a este objeto

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


<comandos>
return <valor> OPCIONAL

169
Funções - Exemplo

# definindo a função
def multiplica (x,y)
return x*y

X 8
#chamando a função
prod = multiplica(8,2)
Y 2
print(prod)

prod 16 170
Polimorfismo

n  É um comportamento dependente de tipo.

n  Uma operação depende dos objetos


operados.

n  Uma função pode apresentar vários


objetivos dependendo dos tipos de objetos e
as operações feitas.

171
Polimorfismo - Exemplo

# definindo a função
def multiplica (x,y)
return x*y

#chamando a função com argumentos


diferentes
prod = multiplica(8,2)
replicacao=multiplica('OI',2)
zeros=multiplica([0],2)
172
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} )
173
Escopo

l  Lugar onde as variáveis são definidas e acessadas.

l  Python procura o nome das variáveis em seu


namespace.

l  Visibilidade do nome em seu código.

l  O trecho de código onde você define um nome para


a variável determina o namespace que ela estará e
consequentemente o escopo de visibilidade.

174
Regras de Escopo

Se uma variável é definida dentro de uma def, ela é


local para esta função.

Se uma variável é definida para um def aninhado, ela


é não local para as funções aninhadas
modificarem seu valor.

Se uma variável é definida fora de todos os defs, ela


é global para o arquivo (módulo) inteiro.

175
Regras de Escopo

Cada módulo é um escopo global para a variável


definida no topo do arquivo. Estas variáveis globais
se tornam atributos do módulo objeto para o mundo
externo e são apenas variáveis dentro do módulo.

Cada chamada a uma função cria um novo escopo


local.

Variáveis definidas dentro de uma função por padrão


são locais a menos que sejam declaradas globais
ou não locais.
176
Resolução de Nomes: LEGB

A procura pela referência de um nome segue a ordem


dos 4 escopos:
1.  Local
2.  Não local
3.  Global
4.  Built-in

177
Exemplo de Escopos

#Código do arquivo (módulo) escopo.py


#escopo global : x é uma variável global
x=99

def func(y):
# escopo local : z e y são variáveis locais
z = x + y # acessando X global
return z

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


178
Escopo Global

#Código do arquivo (módulo) escopo.py


#escopo global : x é uma variável global
x=99

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

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

#Código do arquivo (módulo) escopo.py


#escopo global : x é uma variável global
y,z=1,2

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

print(x) # imprime o valor 3

180
Acessando variáveis globais de outros módulos

# módulo primeiro.py
x= 99

# módulo segundo.py
import primeiro
print(primeiro.x)
primeiro.x=88

181
Funções Aninhadas

x= 99 # variável global nunca usada

def f1( ) : # funcão pai


x=88 # variável local
def f2( ) : # função filha (aninhada)
print(x)
f2()

>>> f1()

182
Funções Aninhadas

def f1( ) : # funcão pai


x= 99
def f2( ) : # função filha (aninhada)
def f3( ):
print (x)
f3()
f2()

>>> f1()

183
Variáveis não locais

def teste(inicio):
estado = inicio # definição de uma variável local
def teste_filho ( ):
nonlocal estado #para poder modificar o valor
estado +=1
print(estado)

return teste_filho( )

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

184
Argumentos

Sao objetos enviados as funções como entradas.

Passagem de objetos imutáveis é feita por valor.


Exemplo: objetos inteiros, reais e strings.

Passagem de objetos mutáveis é feita por referência.


Exemplo: listas, conjuntos e dicionários.

185
Passagem de argumentos por valor

def f(a):
a = 99

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

>>> 88

186
Exemplo sem a chamada de função

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

>>> 1

187
Passagem de argumentos por referência

def troca (b):


b[0]='spam' # objeto compartilhado (mutável)

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

>>> ['spam',2]

188
Exemplo sem a chamada de função

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

>>> ['spam',2]

189
Evitando mudanças nos argumentos imutáveis

def copia( a ):
a = a[ : ] # copia a própria lista
a[0]=5
a[1]=5

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

>>>[1,2]

190
Modos de Passagem de Argumentos

Existem várias combinações de argumentos.

Alguns exemplos:

funcao(valor): Argumento definido pela posição


funcao (nome=valor): Argumento definido pelo nome

191
Funcao(valor)

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

f(1,2,3)

>>> 1 2 3

192
Funcao(nome=valor)

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

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

>>> 1 2 3

193
funcao(nome = valor padrão)

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

f(2,4)

>>> 2 4 3

194
funcao(nome = valor padrão)

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

f(2,4)

>>> 2 4 3

195
Recursividade

Uma função é recursiva quando chama ela mesma.

Ela deve apresentar dois casos:


Caso base e o caso recursivo

196
Recursividade

Caso base: É a solução do problema para o caso


mais simples.

Se não for o caso base:


l  Quebre o problema em problemas menores.
l  Carregue uma nova cópia da função para
trabalhar com os casos menores (chamada
recursiva)
l  Convergir para o caso base
l  Função faz uma chamada para ela mesma
dentro do retorno da função.

197
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! …

198
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)

199
print(fat(5))
Números Pseudo-Aleatórios

Criação de uma função f(x) que gera uma sequência


de números a partir do valor inicial x.

X é chamado de semente para gerar a sequência de


números.

F(x) é chamado de gerador de sequência.

200
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

201
Módulo 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

202
Módulo Random

# Retorna um inteiro determinado pelo range


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

# Retorna um elemento de uma sequência não vazia


print(random.choice("abcdefghij"))
>>> c
print(random.choice(range(0,1000)))
>>> 266
print(random.choice([1,2,3,4,5,6,7]))
>>> 4
OBRIGADO!

Você também pode gostar