2. Um pouco de revisão
Python é uma linguagem com foco na simplicidade;
Python é case sensitive;
As linhas em Python não terminam com ‘;’
Os blocos são definidos pela indentação;
Os tipos das variáveis são definidos quando um valor é
atribuído a elas.
3. Exemplo
O que este programa faz ?
# -*- coding: latin-1 -*-
qtdAlunos = int(raw_input('A turma possui quantos alunos ?'))
total = 0.0
#Para cada um dos alunos, perguntar a nota
for i in range(qtdAlunos):
total += float(raw_input('Digite a nota %d:' % (i + 1)))
#Calcula a média
media = total / qtdAlunos
#Exibe o resultado
print 'A média da turma foi: %.1f' % media
4. Lembretes 1
Python é uma linguagem fortemente tipada !
A função raw_input sempre retorna Strings;
É necessário converter os Strings para os tipos corretos,
para isto existem as funções:
int(str) - Converte um String em um inteiro;
float(str) - Converte um String em um valor de
ponto flutuante.
5. Lembretes 2
Python suporta operadores unários, da mesma forma
que C, C++, Java e C#:
a += 1 a = a + 1
a -= 4 a = a - 4
a *= 3 a = a * 3
a /= 2 a = a / 2
6. Desafio da Aula Passada
# -*- coding: latin-1 -*-
nomes = []
while True:
nome = raw_input("Digite um nome, ou 'sair' para encerrar: ")
if nome == 'sair': break
nomes.append(nome)
#Ordenando os nomes digitados
nomes.sort()
print 'Nomes digitados: '
for i, nome in enumerate(nomes):
print str(i + 1) + ' - ' + nome
#Gravando os nomes em um arquivo
arquivo = open('nomes.txt', 'w')
arquivo.writelines(nomes)
arquivo.close()
7. Lembrete
Não é possível concatenar números com Strings;
Portanto, é necessário antes converter os números para
Strings;
Isto é feito utilizando a função str(valor_numérico).
8. Trabalhando com o
Sistema Operacional
Existem alguns módulos que permitem trabalhar
diretamente com o sistema operacional:
os;
shutil.
9. Módulo OS
Principais funções: getlogin( );
chmod(path, mode); listdir(path);
execl(path, args); remove(file);
name; rmdir(path);
getenv(key); rmdirs(path);
putenv(key, value); system(command).
11. Exemplo 1
# -*- coding: latin-1 -*-
import os
print 'Sistema operacional: ' + os.name
raw_input('Pressione ENTER para executar o bloco de notas')
os.system('C:WINDOWSNOTEPAD.EXE')
12. Exemplo 2
# -*- coding: latin-1 -*-
import os
diretorio = raw_input('Digite um diretório: ')
print 'Arquivos do diretório ' + diretorio
for arquivo in os.listdir(diretorio):
print arquivo
13. Exemplo 3
Neste exemplo construiremos uma aplicação simples
que constrói páginas HTML com álbuns de fotografias;
Os álbuns serão construídos automaticamente a partir
dos arquivos de imagens contidos em um diretório.
14. # -*- coding: latin-1 -*-
import os
cabecalho = '''<html>
<head><title></title></head>
<body>
<h1>%s</h1>
<ul>'''
corpo = '<li><a href="%s">%s</a></li>'
rodape = '''</ul>
</body>
</html>'''
diretorio = raw_input('Qual o diretório das imagens ?')
formato = raw_input('Qual o formato das imagens ?')
album = raw_input('Qual o nome do álbum ?')
pagina = cabecalho % album
for arquivo in os.listdir(diretorio):
if arquivo.endswith(formato):
pagina += corpo % (arquivo, arquivo)
pagina += rodape
arquivo = open(os.path.join(diretorio, "album.html"), "w")
arquivo.write(pagina)
arquivo.close()
15. Desafio
Estenda o exemplo anterior para que os modelos de
cabeçalho, corpo e rodapé na realidade estejam
guardados em arquivos.
16. Criando suas próprias
funções
# -*- coding: latin-1 -*-
#definindo a função ‘maior’
def maior(a, b):
if a > b:
print "%d é maior que %d" % (a, b)
elif b > a:
print "%d é maior que %d" % (b, a)
else:
print "%d e %d são iguais" % (a, b)
#utilizando a função ‘maior’
maior(5, 8)
17. Retornando valores
def somatorio(n):
soma = 0
for i in range(n + 1):
soma += i
return soma
print str(somatorio(10))
19. Valores Padrão de
Argumentos
# -*- coding: latin-1 -*-
def perguntaSimNao(pergunta, tentativas = 2):
while True:
resposta = raw_input(pergunta)
if resposta in ('sim', 'não'):
return resposta
tentativas -= 1
if tentativas <= 0:
print 'Número de tentativas excedido !'
return 'Erro'
print 'Você deve responder sim ou não'
perguntaSimNao('Você gosta de pizza ?')
perguntaSimNao('Tem certeza ?', 4)
20. Observação
Os parâmetros com valores padrão são opcionais;
Se não forem informados eles automaticamente
assumirão seus valores padrão.
21. Valores de Argumento por
Palavra-Chave
def calculaIR(salario, baseIsencao=1200, taxaJuros=0.125):
if salario <= baseIsencao:
return salario
return salario + (salario - baseIsencao) * taxaJuros
print str(calculaIR(3500))
print str(calculaIR(3500, taxaJuros=0.275))
22. Argumentos Arbitrários
def somatorio(*valores):
soma = 0
for i in valores:
soma += i
return soma
print str(somatorio(2))
print str(somatorio(1, 3, 5, 7, 9))
23. Argumentos Arbitrários
Atenção, uma lista de argumentos (*) apenas pode vir
como o último argumento de uma função:
# -*- coding: latin-1 -*-
def exibeNomes(saudacao, *nomes):
for nome in nomes:
print saudacao + " " + nome
print exibeNomes('Olá', 'João', 'Maria', 'Pedro')
25. Relembrando um pouco
Listas
Declaração: lista=[] ou lista=[‘a’,2,3]
Adição de elemento: lista.append(valor)
Adição de lista: listaC = listaA + listaB
Ordenando os elementos: lista.sort()
Invertendo os elementos: lista.reverse()
Acessando/modificando um elemento: lista[2]
Sublistas: lista[1:3] ou lista[:3] ou lista[1:]
26. Listas Comprimidas
É possível definir listas complexas de uma maneira
bastante simples, as listas comprimidas;
Ex:
# -*- coding: latin-1 -*-
nomes = ['maria', 'joão', 'ana', 'josé']
mulheres = [n for n in nomes if n.endswith('a')]
print mulheres
27. Listas Comprimidas
Forma Geral
Forma 1:
[expressão for variáveis in lista]
Forma 2:
[expressão for variáveis in lista if condição]
Exemplo:
# -*- coding: latin-1 -*-
salarios = [1000, 1500, 750, 510]
# aumentar os salários em 10%
salarios = [s * 1.01 for s in salarios]
# exibindo os novos salários
print salarios
28. Tuplas
Tuplas são seqüências de valores que não podem ser
alterados;
Os elementos de uma tupla podem ser acessados da
mesma forma que em uma lista, pelo operador [];
Para definir tuplas em Python utiliza-se parêntesis:
#tupla simples
telefone = (83, 33102222)
print 'Telefone (%d) %d' % telefone
#Lista de tuplas
telefones = [(83, 33332222), (84, 32215678)]
for tel in telefones:
print 'Telefone (%d) %d' % tel
29. Conjuntos
Vamos lembrar um pouco de matemática;
Conjuntos são coleções que não permitem elementos
duplicados;
Operações de conjuntos:
União;
Diferença;
Interseção.
30. Conjuntos em Python
Os conjuntos sempre são criados a partir de uma lista;
Para isto, utiliza-se a função set(lista):
# Lista de compras
compras = ['laranja', 'uva', 'maca', 'uva']
# Verificando quais frutas foram compradas
frutas = set(compras)
print frutas
34. Dicionários
Apagando:
del d[“nome”]
d.clear( )
Testando:
d.has_key(“idade”)
Obtendo as chaves:
d.keys( )
35. Método items
Os dicionários possuem um método chamado items;
Este método retorna uma lista de tuplas (chave, valor)
para os elementos armazenados do dicionário.
aluno = {"nome" : "Bruno", "curso" : "SI", "media" : 8.2}
for valor in aluno.items():
print valor
36. Listas de Dicionários
Listas de dicionários podem ser utilizadas para armazenar
informações complexas de forma estruturada:
# -*- coding: latin-1 -*-
# Dicionário com todos os alunos da faculdade
alunos = [{"nome" : "Bruno", "curso" : "SI", "media" : 8.2},
{"nome" : "Maria", "curso" : "Direito", "media" : 9.5},
{"nome" : "Pedro", "curso" : "Fisio", "media" : 6.0}]
# Exibir apenas os alunos de Sistemas de Informação
for aluno in [a for a in alunos if a["curso"] == "SI"]:
print "%s - %.2f" % (aluno["nome"], aluno["media"])
38. Módulo random
Módulo que trabalha com valores aleatórios;
Funções principais:
choice(lista);
sample(lista, quantidade);
random( )
randrange(valorMaximo)
39. Exemplo - Sorteio
import random
concorrentes = []
print 'Digite os nomes dos concorrentes ou sair para encerrar'
while True:
nome = raw_input('Digite o nome: ')
if nome == 'sair': break
concorrentes.append(nome)
print 'O sorteado foi ' + random.choice(concorrentes)
40. # -*- coding: latin-1 -*-
import random
valor = 1 + random.randrange(100)
print "Sorteei um valor de 1 a 100"
print "Você tem 5 tentativas para acertar"
acertou = False
for i in range(5):
tentativa = int(raw_input("Qual o valor ? "))
if valor == tentativa:
acertou = True
break
elif valor > tentativa:
print 'Maior'
else:
print 'Menor'
if acertou:
print 'Parabéns, você acertou !'
else:
print 'Que pena, o valor era %d' % (valor)
41. Exemplo - Mega-sena
import random
#Sorteando as dezenas
dezenas = random.sample(range(1, 61), 6)
#Ordenando
dezenas.sort()
print dezenas
42. Módulo urllib2
Este módulo serve para acessar páginas na Internet;
Sua utilização é bastante simples, ex:
import urllib2
url = raw_input('Digite a URL: ')
print urllib2.urlopen(url).readlines()
43. Cliente do Twitter
# -*- coding: latin-1 -*-
import urllib2
usuario = raw_input('Digite o usuário do Twitter: ')
url = 'http://www.twitter.com/' + usuario
for linha in urllib2.urlopen(url):
#Acessando as mensagens do twitter
if '<span class="entry-content">' in linha:
#Limpando a linha e exibindo
linha = linha.replace('<span class="entry-content">', '')
linha = linha.replace('</span>', '')
print linha
44. Consulta de CEP
import urllib2
url_cep = 'http://www.buscarcep.com.br/?cep='
cep = raw_input('Digite o CEP:')
conteudo = urllib2.urlopen(url_cep + cep + '&formato=string').read()
#Dispensando o primeiro '&'
conteudo = conteudo[1:]
for dados in conteudo.split('&'):
print dados
45. Módulo zipfile
Este módulo permite compactar e descompactar
arquivos no formato zip;
Python possui outros módulos para outros formatos,
como por exemplo zlib, gzip, bz2 e tarfile.
46. Descompactando
# -*- coding: latin-1 -*-
from zipfile import ZipFile
arquivo = raw_input('Digite o nome do arquivo: ')
diretorio = raw_input('Digite o diretório de destino: ')
zip = ZipFile(arquivo)
zip.extractall(diretorio)
47. Compactando
from zipfile import ZipFile
arquivo = raw_input('Digite o nome do arquivo de destino: ')
zip = ZipFile(arquivo, 'w')
print 'Adicionando arquivos: '
while True:
arquivo = raw_input('Digite o nome do arquivo ou sair: ')
if arquivo == 'sair': break
zip.write(arquivo)
zip.close()