0% acharam este documento útil (0 voto)
11 visualizações167 páginas

Aulas Python 2023

O documento apresenta uma introdução ao Python, incluindo sua origem, vantagens e aplicações. Ele aborda conceitos fundamentais como variáveis, tipos de dados, operadores, funções, e estruturas de controle, além de fornecer exemplos práticos de código. A bibliografia inclui referências para aprofundamento no aprendizado da linguagem.
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
11 visualizações167 páginas

Aulas Python 2023

O documento apresenta uma introdução ao Python, incluindo sua origem, vantagens e aplicações. Ele aborda conceitos fundamentais como variáveis, tipos de dados, operadores, funções, e estruturas de controle, além de fornecer exemplos práticos de código. A bibliografia inclui referências para aprofundamento no aprendizado da linguagem.
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
Você está na página 1/ 167

Python

Professor Marcio Antelio


[email protected]

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. O´Relly, 2011.
Python

◼ Por que este nome ?


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

3
Python

◼ Produtividade de desenvolvimento
 Menor esforço de programação
 Maior velocidade de implementação

4
Python

◼ O que posso fazer ?


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

5
Python

◼ O que posso fazer ?


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

6
Python

◼ Vantagens
 OO
 Open Source
 Independente de plataforma
 Fácil de usar
 Fácil de aprender

7
Interpretador Python

◼ Execução do programa
 Visão do Desenvolvedor
 Visão do Processo

◼ Download
 http://www.python.org
 Versão 3.X

8
Não existe distinção entre o
ambiente de desenvolvimento
e execução.

O compilador está presente


em tempo de execução
Ciclo de
Desenvolvimento
e é parte do sistema que roda
o programa.

Experiência de programação
dinâmica
Fluxo de Dados

Entrada Saída de
Programa
de Dados Dados
Aprendizado Inicial Sobre
Funções

◼ Estrutura básica de uma função


 retorno nomeDaFunção ( argumentos)
◼ Veremos futuramente como criar nossas próprias
funções.
◼ Veremos como importar funções de diferentes
bibliotecas.

11
Interface I/O

Função print (Saída) Função input (Entrada)


Objetos

◼ São estruturas de dados.


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

13
Objetos
◼ Tipos principais
 Numérico
 String
 Lista
 Dicionário

14
Objetos

◼ Tipos principais
 Tuplas
 Arquivos
 Conjuntos
 Boolean

15
Tipo Numérico
◼ Números inteiros.
◼ Números reais.
◼ Números complexos.

16
d = 1234
Números ◼

◼ d=0
Inteiros ◼ d = - 10
◼ d = 1234659786597431235997412949

17
◼ Conhecidos como ponto flutuante
◼ Possui o ponto decimal “.”
◼ Expoente é definido por “e” ou “E” seguido
Números opcionalmente pelo sinal

reais ◼


d = 1.23
d = 1.
◼ d = 1.0

18
Operadores de expressões

◼ Expressões são combinações de


números (ou outros objetos) e
operadores que computam um valor
quando executados pelo Python.
◼ 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.

19
Quando uma expressão
Precedência ◼
envolve mais de um operador,
Python agrupa suas partes de
dos acordo com as regras de
precedência. Estas regras
operadores determinam a ordem com que
estas partes serão
computadas.

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

21
Parênteses

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

22
Misturando tipos numéricos

◼ Expressões podem envolver operandos (objetos) de vários tipos.


◼ Python primeiramente converte operandos para o tipo mais
complicado e então realiza o cálculo com todos os operandos no
mesmo tipo.

23
Misturando tipos numéricos

◼ Ranking dos tipos numéricos em ordem crescente de complexidade


 Inteiro
 Real
 Número Complexo

24
Misturando tipos numéricos

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

25
◼ São criadas quando elas
recebem um valor pela primeira
vez
◼ São substituídas por seus
valores quando usadas em
expressões
Variáveis ◼ Devem ser criadas antes de
serem usadas em expressões
◼ Variáveis estão referenciando
objetos.

26
Variáveis e
Expressões
Básicas

27
Divisões

◼ Verdadeira (X / Y)
 Retorna um resultado real

◼ 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.

28
Divisões

29
Funções de Conversão e
Arrendodamento

30
Ferramentas
numéricas

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

31
Bibioteca

math •
Funções trigonométricas
Funções Logarítmicas
• Conversões Angulares
• Representações numéricas
• Funções Especiais
• Funções Hiperbólicas
• Constantes

32
Floor x
Truncamento
Tipo Booleano

True ou
1 ou 0
False
Comparações

35
Comparações

36
Comparações

37
◼ Complementação (ou
Negação, ou Inversão)
 Operação cujo
resultado é
simplesmente o valor
complementar ao que a
Álgebra variável apresenta.
Booleana Como uma variável
booleana pode assumir
um entre dois valores,
caso assuma o valor 1
(True), seu
complemento é 0
(False) e vice-versa.
◼ AND (Multiplicação Lógica)
 Esta operação binária
resulta em 0 (False)
caso pelo menos uma
entrada seja 0 (False)
Álgebra
Booleana ◼ 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)
◼ XOR
 Esta operação
binária resulta em
Álgebra 1(True) caso as
Booleana entradas possuam
valores diferentes,
caso contrário o
resultado é 0(False)
Tabela Verdade

41
Exemplo de
Código

42
Estrutura de um
programa Python
◼ Programas são compostos por módulos.
◼ Módulos possuem comandos.
◼ Comandos possuem expressões.
◼ Expressões criam e processam objetos.
Sintaxe de um
programa Python
◼ A sintaxe é composta por comandos e
expressões.
◼ Expressões modificam objetos.
◼ Comandos codificam a lógica de operações
realizadas no programa.
• Comandos Condicionais

COMANDOS • Comandos de Repetição


• Comandos de Desvio
Comando
Condicional - IF
◼ Este comando seleciona ações a serem
realizadas a partir de uma determinada
condição.
◼ Este comando pode conter outros comandos,
inclusive outros if `s
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.”) 47
Delimitadores de Bloco:
Regras de indentação
x=1
If x :
y=2
If y:
print(“bloco 2”)
print(“bloco 1”)
print(“bloco 0”)
IF/ELSE

If ( not 1) :
print('true')
else :
print('false')
IF/ELIF/ELSE

If (teste 1) :
Bloco 1
elif (teste 2): # Comando opcional
Bloco 2
else : # Comando opcional
Bloco 3
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 ...')
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
52
Tipo String
◼ Coleção ordenada de caracteres usados para
armazenar e representar informação baseada
em texto.
◼ Serve para codificar símbolos, palavras, urls,
caminhos de arquivo …
◼ São objetos imutáveis.
Tipo String
◼ Strings com aspas simples ou duplas são as
mesmas
 >>> “aluno”, ‘aluno’
('aluno', 'aluno')

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


("knight's", 'knight"s')
Tipo String
◼ Concatenação
 Operador + (Explícita)
◼ >>> title = "Sentido" + ' Da ' + " Vida"
◼ >>> title
◼ 'Sentido Da Vida'
 Implícita
◼ >>> title = "Sentido" ' Da ' " Vida"
◼ >>> title
◼ 'Sentido Da Vida'
Tipo String
◼ Repetição
 Operador *

s ='spam'
s=s*2
print(s)
◼ 'spamspam'
Tipo String
◼ 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 (\)
◼ >>> 'knight\'s',
"knight\"s"
◼ ("knight's", 'knight"s')
Sequencias
de Escape s= 'a\nb\tc‘
print(s)
◼ a

◼ b c
◼ Aspas triplas
 Também chamado
Tipo 
de “block string”
É uma conveniência
String sintática para
codificar textos em
várias linhas.
Tipo String
◼ Aspas triplas
frase=""" Estou aprendendo
a programar
Python"""
 ' Estou aprendendo\na programar\nPython'
◼ Comprimento da string
Funções s="abcdefghij"
Pré- tam = len(s)
Definidas print(tam)
 10
◼ Remover espaços em
branco
Funções s=" parado "
Específicas print(s.strip())
 'parado‘
◼ Substituições na String
s="bala“
Funções s.replace('a','o')
Específicas print(s)
 'bolo'
Começa com uma
substring
• s="paralelepípedo“
• s.startswith('pa')
Funções • True
Específicas Termina com uma
substring
• s="paralelepípedo“
• s.endswith('do')
• True
◼ Verificar se a String é um
número inteiro
s="8080"
teste =s.isdigit()
Funções print(teste)
Específicas  True
s="98e"
teste2 =s.isdigit()
print(teste2)
 False
◼ Todas as letras maiúsculas ou
minúsculas.
nome="Super Python"
Funções print(nome.upper())
Específicas  'SUPER PYTHON'
print(nome.lower())
 'super python'
◼ String vazia
 s=“”
 Qual função usar ??

Funções ◼ Primeira letra maiúscula


Específicas s="bom aluno"
print(s.capitalize())
 'Bom aluno‘
• Comandos Condicionais

COMANDOS • Comandos de Repetição


• Comandos de Desvio
Comando de Repetição - WHILE

Este comando irá executar


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

69
Comando de Repetição - WHILE

O teste sempre é
avaliado antes de um
O loop pode ser infinito
novo loop ser iniciado,
caso o teste nunca seja
portanto caso na primeira
falso.
vez ele seja falso, o loop
nunca será executado.

70
WHILE- Sintaxe

while (teste) : # Teste de loop


bloco 0 # Loop

71
WHILE- Sintaxe

while (teste) : # Teste de loop


bloco 0 # Loop
else: # Comando opcional executado quando o teste for falso
bloco 1

72
WHILE - Exemplos

while True:
print('Adeus')

while 1:
print('Adeus')

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

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

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

74
Laço 10: 9 < 10 ? n=9 01…9 n=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.

75
Comandos de Desvio – Formato
Geral

while (teste 1) :
bloco 1
if (teste 2): continue
if (teste 3): break
else :
bloco 2

76
Pass

⚫ É 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')

77
Break

⚫ Saída imediata do loop .


⚫ 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'):
print("Fim do Programa")
break
idade=input('Entre com uma idade')
print('Nome:', nome,'Idade: ', idade )

78
Continue

#Pula para o próximo laço (loop)


numero = 0
while numero < 10:
if (numero % 2 == 0):
continue
print("Número: ", numero)
numero +=1

79
Loop Else -Exemplo do programa para
identificar se um número > 2 é primo

numero = int(input("Entre com o possível número 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:
print('Primo')

80
Comando For

É um iterador de sequência genérica.

Uma sequência ordenada do objeto é percorrida a cada laço.

81
Sintaxe

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

82
for variável in objeto :
instruções
if (teste): break
Sintaxe if (teste):continue
else:
instruções
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

84
Laço 4 x=6,soma=6+6 12
Exemplos – Multiplicando os itens de
uma lista
prod = 1
for item in range(1,5):
prod * = item
print(prod)

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

85
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='P' P

Laço 2 letra='A' PA

Laço 3 letra='Z' PAZ

86
Tipo Conjunto

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

87
Tipo Conjunto

x=set('abcde')
y=set('bdxyz')
print(x)
◼ {'a', 'c', 'b', 'e', 'd'}
print(y)
◼ {'y', 'x', 'b', 'd', 'z'}
'e' in x #pertence
◼ True

88
Métodos do Tipo
Conjunto
s1 = {1,2,3,4}
s1.add(5)
print(s1)
◼ {1, 2, 3, 4, 5}

s1.remove(1)
print(s1)
◼ {2, 3, 4, 5}
Tipo Conjunto
x - y #diferença
◼ {'a', 'c', 'e'}
x | y #união
◼ {'a', 'c', 'b', 'e', 'd', 'y', 'x', 'z'}

x & y #interseção
◼ {'b', 'd'}
Tipo Conjunto
x ^y #Diferença simétrica
{'a', 'c', 'e', 'y', 'x', 'z'}
x > y, x < y #SuperConjunto, SubConjunto
◼ (False, False)
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

92
Métodos 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
Tipo Lista
◼ É um objeto que representa uma coleção de
objetos.
◼ Nesta coleção a ordem dos objetos é importante.
◼ São objetos mutáveis.
◼ Objetos são indexados.
◼ Variação do tamanho da lista
◼ A lista pode conter outros objetos complexos
como uma própria lista.
Tipo Lista
l = [] # lista vazia
l = [1,2,3,4] # 4 itens, índice: 0...3
print(l)
◼ [1, 2, 3, 4]

l=['89'] # 1 item, índice: 0


print(l)
◼ ['89']
Tipo Lista

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


l = list('123456789') # itens iteráveis
print(l)
◼ ['1', '2', '3', '4', '5', '6', '7', '8', '9']

96
Tipo Lista
l= list(range(-5,5)) # sucessivos inteiros
print(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
Operações básicas
◼ 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']
98
Operações básicas
◼ Repetição
print( ['NI'] * 4)
 ['NI', 'NI', 'NI', 'NI']
print(['NI',8,['A',3]] * 2)
 ['NI', 8, ['A', 3], 'NI', 8, ['A', 3]]
Operações básicas
3 in [1,2,3]
◼ True
Indexação
l=['time','Time','TIME'] # a partir do zero
l[1] # acessando o item na posição 1
◼ 'Time'
l[-1] # Contagem negativa (direita)
◼ 'TIME'
l[-2]
◼ 'Time'
l[-3]
◼ 'time'
◼ A fatia resultante é uma
nova lista contendo os
elementos cujas
posições vão do primeiro

Fatias índice ao segundo, não


incluindo o último
elemento. Se omitirmos
um dos índices na fatia,
assume-se início ou fim
da lista.
Fatias
l=['time','Time','TIME']
l[1:2]
◼ ['Time']
l[1:]
◼ ['Time', 'TIME']
l[:2]
◼ ['time', 'Time']
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=''" 104


Matrizes
◼ São listas de listas
◼ Arrays multidimensionais
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
Tipo Lista
◼ Modificando uma lista
L = ['spam','Spam','SPAM']
L[1]='eggs'
 ['spam', 'eggs', 'SPAM']
L[0:2]=['eat','more']
 ['eat', 'more', 'SPAM']
Métodos
L=[1,2]
L.extend([3,4,5])
◼ [1, 2, 3, 4, 5]
Métodos L.pop()
◼ 5

◼ [1, 2, 3, 4]
L.reverse()
Métodos ◼ [4, 3, 2, 1]
L.remove('eggs') #Deleta pelo valor
◼ ['spam','eggs','ham']
Métodos L.pop(1) #Deleta pela posição
◼ ['spam','ham']
L=['spam','eggs','ham']
L.index('eggs') #Índice do objeto
Métodos ◼ 1
L.insert(1, 'toast')# Insere na posição
◼ ['spam','toast','eggs','ham']
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

113
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

114
Laço 4 x=4,soma=4+6 10
Exemplos – Acessando a String como
se fosse uma lista
frase='uva!'
i=0
while i < len(frase):
if(frase[i]=="a" or frase[i]=="A"):
print(i)
SAÍDA
i=i+1

Laço 1 elemento='u'

Laço 2 elemento='v'

Laço 3 elemento='a' 2
115
Itens são armazenados e
resgatados através de
chaves.

São conhecidos como


arrays associativos ou
hash.
Tipo
Dicionário
Podem conter qualquer
tipo de objeto.

Mapeamento de chaves
para valores.

116
Valor único.

Acesso ao valor
Chaves somente pela
chave.

Pode ser qualquer


objeto imutável
(String,
números,tuplas …)

117
Operações básicas

D = {'spam':2,'ham':1,'eggs':3} #Construindo
D['spam'] #Acessando um valor pela chave
◼ 2
D #A ordem não importa
◼ {'eggs': 3, 'ham': 1, 'spam': 2}

118
Operações básicas

len(D) # Tamanho do dicionário


◼ 3

if('ham' in D) #Verificando se existe chave


◼ True

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


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

119
Ações

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

120
Ações

D.pop('eggs') #Deletando uma entrada


print(D)
◼ {'ham': ['grill', 'bake', 'fry'], 'spam': 2}
D['brunch']='bacon‘ #Adicionando
print(D)
◼ {'brunch': 'bacon', 'ham': ['grill', 'bake', 'fry'], 'spam': 2}

121
Métodos

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

122
Métodos

print(D.get('spam')) #Recuperando o valor pela chave


◼ 2
print(D.get('toast')) #Chave não existe
◼ None

123
Dicionário – Métodos

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

124
Dicionário – Métodos

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

125
Dicionário – Métodos

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


◼ 5
print(D)
◼ {'toast': 6, 'ham': 1, 'spam': 0, 'eggs': 3}

126
Estrutura de Dados

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

127
Estrutura de Dados

print(pessoa['nome'])
◼ 'Fulano'
print(pessoa['emprego'][1])
◼ 'advogado'
print(pessoa['endereco']['estado'])
◼ 'RJ'

128
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

129
Funções

◼ 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.

◼ Apresentam um valor como resultado.

◼ Especifica argumentos que são parâmetros de entrada da


função.

130
Por que usar funções ???

◼ Maximizar o reuso do código.


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

131
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

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

133
prod 16
Polimorfismo

◼ É um comportamento dependente de tipo.

◼ Uma operação depende dos objetos operados.

◼ Uma função pode apresentar vários objetivos dependendo


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

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

135
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} )

136
Escopo

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

⚫ Python procura o nome das variáveis em seu namespace.

⚫ Visibilidade do nome em seu código.

⚫ 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.

137
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.

138
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.

139
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

140
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

141
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

142
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

todas_globais()
print(x) # imprime o valor 3

143
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

144
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()

145
Funções Aninhadas

def f1( ) : # funcão pai


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

f1()

146
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 estado

return teste_filho( )

teste(0) # retorna o valor 1

147
Argumentos

São 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.

148
Passagem de argumentos
por valor

def f(a):
a = 99

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

149
Exemplo sem a chamada de
função

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

>>> 1

150
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]

151
Exemplo sem a chamada de
função

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

>>> ['spam',2]

152
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]
153
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

154
Funcao(valor)

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

f(1,2,3)

>>> 1 2 3

155
Funcao(nome=valor)

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

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

>>> 1 2 3

156
funcao(nome = valor padrão)

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

f(2,4)

>>> 2 4 3

157
funcao(nome = valor padrão)

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

f(2,4)

>>> 2 4 3

158
Recursividade

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

Ela deve apresentar dois casos:


Caso base e o caso recursivo

159
Recursividade

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

Se não for o caso base:


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

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

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

print(fat(5))

162
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.

163
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

164
# importando a biblioteca random para
ser chamada no programa
import random
# Retorna float x, 0.0 <= x < 1.0
print(random.random())
>>> 0.7974410192661805

Módulo # Retorna float x, 1.0 <= x < 10.0


print(random.uniform(1, 10))
Random >>> 6.263809049294528
# Retorna inteiro n, 0 <= n <=9
print(random.randint(0,9))
>>> 9

165
# Retorna um inteiro determinado pelo
range
print(random.randrange(0, 101, 2))
>>> 30
# Retorna um elemento de uma sequência
Módulo não vazia
print(random.choice("abcdefghij"))
Random >>> c
print(random.choice(range(0,1000)))
>>> 266
print(random.choice([1,2,3,4,5,6,7]))
>>> 4

166
Obrigado !

Você também pode gostar