Professional Documents
Culture Documents
Felipe Galvo
Aprenda Python Bsico -
Rpido e Fcil de entender
Felipe Galvo
Prefcio
Voc no deve alter-lo, vend-lo ou qualquer coisa do tipo. Mas pode imprimir
para deixar na cabeceira, passar para os amigos ou dar de presente.
2
Sumrio
Prefcio
Quem sou eu?
Introduo
Objetivo
Por que Python?
Verso do Python
Instalao do Python
IDEs e Editores de Texto
Digitar ou copiar o cdigo?
Concluso
Sinais e Operaes
Sinais Matemticos Bsicos
Sinais de Comparao
Concluso
Variveis
Definindo variveis
A funo input()
Concluso
Strings
Definindo Strings
Escapando strings
Strings como elas so
Inserindo variveis em uma string
Concatenao
Strings como listas
Funes teis para Strings
capitalize(), lower() e upper()
center(), ljust() e rjust()
find()
3
isalnum(), isalpha() e isnumeric()
len()
replace()
strip(), rstrip() e lstrip()
Concluso
Listas
Listas
Criando, modificando e acessando itens em uma lista
Removendo Itens de uma lista
Funes teis para trabalhar com listas
len()
max() e min()
copy()
count()
sort()
reverse()
in
split() e join()
Concluso
Tuplas
Introduo
Criando uma tupla e acessando seus itens
Funcionalidades
Concluso
Dicionrios
Criando um dicionrio, acessando e modificando suas informaes
Funes teis para Dicionrios
get()
items(), keys() e values()
update()
Concluso
Sets
Criando e acessando dados em Sets
Algumas funes para trabalhar com sets
difference() e intersection()
copy()
Concluso
Estruturas de Controle
If, else e elif
Loops - For
4
Loops - while
Concluso
Funes
Funes Predefinidas do Python
Definindo uma funo
args e kwargs
Concluso
Mdulos
Criando e importando seu primeiro mdulo
Um pouco mais sobre criao e importao
Mdulos do Python
Concluso
Data e Tempo
Data
Tempo
Data e Tempo
Concluso
Excees
O try
else e finally
Chamando Excees
Concluso
Arquivos
A funo open()
Escrevendo em um arquivo
Adicionando a um arquivo
Abrindo no modo r+
Concluso
Palavras Finais
E agora?
5
Introduo
Objetivo
Este livro falar de programao com Python. A meta que seja um guia simples
de ser lido e seguido, com exemplo e linguagem mais claros possvel, sem
enrolao. Nada de histria do Python, filosofia da linguagem ou qualquer coisa do
tipo.
Depois de aprender Python, voc pode partir para outras linguagens e frameworks,
ampliar seu leque de habilidades e estudar aquilo que estiver mais em linha com
seus objetivos.
Verso do Python
Caso ainda no saiba, atualmente, Python tem duas verses mais utilizadas, Python
2 e Python 3. Python 3 a verso mais atual, e o cdigo feito em Python 2 no
100% compatvel com ela. As verses tem diferenas considerveis.
Dito isto, Python 3 o futuro, e no existe qualquer motivo para que voc, que
est comeando, comece a programar com Python 2. Por isso, vamos utilizar
Python 3.
6
Instalao do Python
Existem vrias formas de instalar e utilizar Python. Vamos utilizar a distribuio
Anaconda. Esta uma distribuio do Python que j conta com vrios pacotes
teis, muito utilizados em programao cientfica, anlise de dados etc.
A distribuio tambm conta com uma IDE gratuita, o Spyder, que uma boa opo
para comearmos a programar. IDE significa Integrated Development Environment,
ou Ambiente de Desenvolvimento Integrado. , basicamente, uma ferramenta
utilizada para desenvolvimento de software, com uma srie de funcionalidades
teis, como completar cdigo, destaque de elementos das linguagens, entre
outros.
Neste link, voc encontrar opes para download para Windows, Linux e OSX.
Para cada sistema operacional, existem as opes com Python 2 e Python 3. Baixe a
opo com Python 3 e siga as instrues que constam na pgina de download.
7
Este o prompt do Python. Nele, voc pode digitar comandos com a linguagem e
ver a sada destes comandos. Faa um teste e digite o cdigo abaixo, e depois d
ENTER:
Voc ver a sada, aquilo que escreveu dentro do parnteses. Falaremos mais sobre
isso nos prximos captulos, mas voc j pode ver que seu Python est
funcionando.
Voc tambm pode utilizar qualquer editor de texto ou, se tiver, outra IDE de sua
preferncia.
E com isto, podemos falar sobre a outra forma de executar cdigo Python, que
atravs de arquivos .py. Abra o seu IDE ou editor preferido, crie um novo arquivo e
escreva nele o cdigo que utilizamos no Terminal, logo acima. Apenas para
relembrar:
print("Oi, Python")
Salve este arquivo com o nome oi_python.py em uma pasta de sua preferncia.
Abra o Terminal, v at a pasta onde salvou o arquivo e execute o comando
python oi_python.py. A sada ser a mesma que quando executamos o comando
no Terminal do Python, como mostra a imagem abaixo:
8
E desta forma que feita a programao de projetos e softwares mais
complexos.
Faremos desta forma, primeiro pois fica fcil eu colocar todo o cdigo em um
arquivo .py, separado por captulo, para compartilhar com vocs. E tambm, mais
simples para alguns dos tpicos mais complexos, como blocos de cdigo em
estrutura de controle, definio de funes, entre outras coisinhas que necessitam
de mais linhas e indentao do cdigo para funcionar corretamente. Abaixo, s um
exemplo de um possvel cdigo, para que voc entenda melhor como ficar a
demonstrao do mesmo ao longo dos captulos:
9
Digitar ou copiar o cdigo?
Isso normalmente uma preferncia pessoal, e eu no vou ditar nenhuma regra
sobre como voc deve aprender. Voc pode pegar o cdigo que est no livro,
copiar e colar, ou pode digit-lo para depois rodar.
Para muitas pessoas (para mim, inclusive), digitar o cdigo ajuda a gravar. Outras
preferem copiar para passar mais rpido pelo livro e eventualmente voltar em
conceitos que sejam mais importantes ou difceis de gravar para reforar. Faa da
forma que voc achar melhor.
Concluso
Com isto, encerra-se o captulo introdutrio. Aqui, basicamente, introduzimos um
pouco o assunto e preparamos o terreno para a programao em si, que ocorrer a
partir do captulo 2.
10
Print, Comentrios e Tipos de Dados
Funes
Primeiramente, apenas para no prejudicar o entendimento do contedo que vir a
frente, vamos falar um pouquinho, de forma bem superficial, sobre funes. Isto
pois usaremos algumas funes j definidas pelo Python para trabalhar com os
tipos de dados que veremos.
A forma usual de chamar uma funo atravs de seu nome, com os parmetros
dentro de parnteses. Caso a funo no receba parmetros, deve-se incluir os
parnteses, mas sem nada dentro deles. A funo print, por exemplo, recebe como
parmetro o que ser exibido por ela.
A funo print()
J vimos um pouco da funo print() no captulo passado de Introduo. A funo
print(), basicamente, imprime na tela, ou seja, exibe, aquilo que est dentro dos
parnteses.
No Python 2, voc tambm poderia chamar o print() como uma declarao, sem
os parnteses. Isso eventualmente causava certa confuso e ambiguidade, e por
11
isso, foi mudado no Python 3, visando aumentar a consistncia da linguagem e
acabar com as dvidas sobre este assunto. Mas fique esperto, pois em muitas
referncias voc poder ver o cdigo da seguinte forma:
No Python 3, isso no funciona mais, e retornar um erro. Por isso, fique esperto.
Funo print, s com parnteses, conforme o exemplo abaixo:
print("Oi, Python")
Comentrios
Outra coisa importante que voc tambm vai ver muito em cdigos por a so os
comentrios. Comentrios so auto-explicativos. So anotaes no cdigo que no
so rodadas junto com o prprio, e servem para ilustrar, explicar ou incluir
informaes adicionais nele. No Python existem duas formas de comentrios. O
primeiro, o comentrio de uma linha, deve ser antecedido por #, e transforma em
comentrio tudo que est a partir dele, at o final daquela linha. E ele no precisa
estar no comeo da linha, ele pode comear logo aps alguma linha de cdigo. Veja
exemplos:
Coloque este cdigo em um novo arquivo e salve com o nome que quiser, e ao
rodar, voc ver que apenas os prints sero exibidos no seu Terminal.
Tipos de Dados
O Python permite trabalhar com diferentes tipos de dados. Um destes tipos o
tipo String. Vamos passar por cada tipo, explicando cada um deles:
12
Ex: 5, 31, 150
Nmeros decimais (float) - nmeros com casas decimais, so definidos com o
nmero e as casas decimais aps o ponto.
Ex: 5.67, 99.99
Boolean - utilizado para representar os conceitos de Verdadeiro ou Falso.
Booleans s podem assumir estes dois valores, representados por True e
False (mas sem as aspas)
Ex: True, False
Temos tambm outros tipos de dados, como Listas (lists), Dicionrios (dictionaries)
e Tuplas (tuples), entre outros. Estes so tipos especiais, que veremos em captulos
posteriores, mas servem basicamente para armazenar outros tipos de dados.
Concluso
E assim, encerramos este captulo. Nele, vimos um pouquinho da sintaxe bsica,
como criar comentrios em seu cdigo e tambm os tipos de dados que o Python
permite que voc trabalhe.
13
Sinais e Operaes
>>> 4+5
+ Soma Soma dois nmeros
9
>>> 6-3
- Subtrao Subtrai dois nmeros
3
>>> 7*8
* Multiplicao Multiplica dois nmeros
56
>>> 12/4
/ Diviso Divide dois nmeros
3.0
print(4 + 5)
print(6 - 3)
print(7 * 8)
print(12 / 4)
print(63 % 10)
print(5**3)
> 9
> 3
> 56
> 3.0
> 3
14
> 125
Sinais de Comparao
Existem tambm os sinais de comparao. Estes sinais retornaro True ou False,
indicando se uma determinada comparao Verdadeira ou Falsa. True e False so
valores especiais em Python, um tipo de dado chamado Boolean, onde os nicos
valores possveis so estes dois. Vamos aos sinais de comparao:
>>> 4 == 5
False
== Igual a Indica se dois valores so iguais
>>> 4 == 4
True
>>> 6 != 3
True Indica se dois valores no so
!= Diferente de
>>> 5 != 5 iguais
False
>>> 9 > 8
True Indica se o nmero anterior ao
> Maior que
>>> 3 > 5 sinal maior que o posterior
False
>>> 10 >= 10
Indica se o nmero anterior ao
True
>= Maior ou igual a sinal maior ou igual ao
>>> 13 >= 15
posterior
False
>>> 63 < 65
True Indica se o nmero anterior ao
< Menor
>>> 150 < 140 sinal menor que o posterior
False
>>> 5 <= 5
Indica se o nmero anterior ao
True
<= Menor ou igual a sinal menor ou igual ao
>>> 12 <= 8
posterior
False
print(4 == 5)
15
print(4 == 4)
print(6 != 3)
print(6 != 6)
print(9 > 8)
print(3 > 5)
print(5 <= 5)
print(12 <= 8)
> False
> True
> True
> False
> True
> False
> True
> False
> True
> False
> True
> False
Concluso
Neste captulo vimos os operadores utilizados pelo Python para as operaes
matemticas bsicas e para a comparao entre dois valores. Nada muito diferente
do que voc est acostumado na matemtica usual do dia a dia, com algumas
excees.
16
Variveis
Definindo variveis
Para definir uma varivel no Python, basta digitar um nome para a prpria, o sinal
de igual e o valor que se deseja que ela armazene.
a = 3
b = 7
print(a+b)
> 10
> Agora uma string
Voc tambm pode designar a uma varivel o valor de outra varivel. Prosseguindo
com o exemplo acima:
b = a
print(b)
17
Tambm possvel definir mais de uma varivel de uma vez. Caso o valor seja igual
para todas, utilize o sinal de igual entre os nomes das variveis. Caso seja diferente,
use vrgulas entre os nomes das variveis e entre os valores de cada uma delas.
Veja os exemplos abaixo:
> 10
> 10
> 10
> 10
> 20
> 30
A funo input()
Aqui, aproveitamos para apresentar a funo input(). Esta funo utilizada para
captar informaes enviadas pelo usurio. Ela pode receber um parmetro, que
ser uma mensagem exibida ao usurio antes que ele insira o que deseja.
18
Concluso
Neste captulo vimos como utilizar variveis. Variveis so essenciais na
programao, pois voc pode guardar valores inputados pelo usurio ou armazenar
o resultado de algum clculo feito, eliminando a necessidade de refazer este
clculo sempre que quiser utilizar seu resultado.
19
Strings
J vimos um pouco sobre strings no captulo 2, sobre tipos de dados que o Python
utiliza. Resgatando a definio que usamos, so dados definidos entre aspas duplas
() ou simples (), representando texto, que normalmente exibido por um
programa ou exportado por ele.
Definindo Strings
Apenas para deixar o captulo completo, vamos relembrar como definimos uma
string. Uma string definida como tudo que se encontra entre aspas simples () ou
duplas (). Qual voc usa uma questo de gosto e opinio pessoal. Desta forma
vamos aos primeiros exemplos:
> Oi Python
> Tchau Python
Desta forma, vimos acima as duas principais formas de definir uma string. Existe
uma terceira forma, que a definio de strings entre trs aspas triplas. Neste
caso, caracteres escapados (veremos o que so em alguns instantes) assumem seu
significado correto, e quebras de linha, seja no terminal ou na linha de cdigo
tambm so interpretadas como tal no output. Veja o exemplo abaixo, onde cada
quebra de linha foi feita dando ENTER aps cada sentena. A string s se encerra
ao fech-la com o mesmo conjunto de aspas simples ou duplas utilizado para
inici-la:
20
> testando o TAB para finalizar
Escapando strings
Ok, t bom. Mas e se eu quiser criar uma string com aspas duplas e simples no meio
dela? Bem, se voc usa aspas duplas em sua string e quiser usar aspas simples nela,
ou vice-versa, no h qualquer problema. Basta coloc-los junto com a string e ela
continuar sendo vlida. Veja:
Agora, caso voc queira utilizar as duas em uma string, ou caso sempre defina suas
strings com aspas duplas e queira usar aspas duplas em uma string especfica,
temos que escapar este caracter. Escapar? Sim, escapar. Escapar significa inserir em
uma string caracteres que tenham algum significado especial, como uma nova
linha, um caracter de tabulao (TAB) ou as aspas simples ou duplas.
E se eu quiser usar uma contrabarra na minha string? Fcil, basta escapar ela
tambm. Ao definir uma string, duas contrabarras (\\) viram uma contrabarra na
sada:
21
Sequncia Escapada Significado
\\ Contrabarra
\ Aspas simples
\ Aspas duplas
22
fazer isso de diferentes formas. A primeira delas utilizando o sinal de %, que
um caractere de formatao de strings no Python.
nome = "Felipe"
idade = 30
print("Meu nome %s " % nome)
print("Tenho %d anos" % idade)
Tambm podemos incluir nmeros decimais (float) em strings, usando %f. Vejamos
algumas possibilidades no exemplo abaixo. Primeiro, um exemplo sem qualquer
formatao:
a = 30.46257
print("Formatando decimais: %f" % a)
nome = 'Felipe'
idade = 30
print("Meu nome %s e tenho %d anos" % (nome, idade))
Concatenao
Outra forma de inserir valores em strings atravs da concatenao. O sinal de
concatenao no Python o +. Atravs dele, juntamos strings com variveis e
outras strings. Vejamos no exemplo abaixo:
23
nome = 'Felipe'
print("Ol, meu nome " + nome)
Esta forma tem um porm. Vejamos agora o que acontece se incluirmos a varivel
idade, um nmero inteiro, nesta string, por concatenao:
nome = 'Felipe'
idade = 30
print("Ol, meu nome " + nome + " e tenho " + idade + " anos.")
print("Ol, meu nome " + nome + " e tenho " + str(idade) + " anos.")
valor = 503.78987
print("O valor " + str(valor))
Mas, se quiser format-la antes, teremos que usar outra funo, a funo format.
Seus parmetros so o valor a ser formatado e o formato das casas decimais, tal
qual vimos na formatao de decimais nos exemplos anteriores, onde passamos o
ponto e o nmero de casas decimais aps o mesmo. Vejamos no exemplo:
24
print("O valor " + format(valor, '.2f'))
Note que a funo format j retorna uma string, no havendo aqui a necessidade
de converter o resultado em string usando a funo str.
Uma das situaes que isso desencadeia que podemos acessar qualquer
caractere da string atravs de seu ndice, ou index, que a sua posio na string. A
primeira letra tem ndice 0 (zero), e a ltima igual a quantidade de caracteres da
string menos um. Vejamos:
> O
> ,
> e
print(string9[25])
No captulo onde falaremos sobre listas veremos mais sobre como trabalhar com
elas de forma mais eficiente.
25
Funes teis para Strings
Aqui, vamos apresentar algumas funes teis para strings, explicando um pouco o
funcionamento de cada uma delas. No vou entrar em detalhes de todas as
funes existentes no Python, pois so muitas e a documentao da linguagem
at melhor que eu para explicar as mesmas. Vou apenas apresentar algumas das
que considero importantes e mais utilizadas e explic-las com bons exemplos.
find()
Este mtodo indica se uma determinada substring faz parte de uma string. Caso
faa, ela retorna a posio onde comea esta substring. Caso no, a funo retorna
-1. Veja no exemplo:
26
print(string12.find(substring2))
> 5
> -1
Voc tambm pode definir os ndices a partir dos quais a busca inicia e termina,
atravs dos parmetros beg (primeiro aps a string a ser encontrada) e end
(segundo aps a string, logo aps o parmetro beg), conforme o exemplo abaixo:
print(string12.find(substring1, 7))
print(string12.find(substring1, 2))
> -1
> 5
string13 = "Felipe"
print(string13.isalnum())
print(string13.isalpha())
print(string13.isnumeric())
> True
> True
> False
string14 = "1234"
print(string14.isalnum())
print(string14.isalpha())
print(string14.isnumeric())
> True
> False
> True
string15 = "Felipe1234"
print(string15.isalnum())
27
print(string15.isalpha())
print(string15.isnumeric())
> True
> False
> False
len()
A funo len() retorna a quantidade de caracteres presentes em uma
determinada string. Repare que a funo len(), diferentemente da maioria das
funes que vimos, no chamada atravs de uma string, mas a string passada
como um argumento para ela. Veja:
> 17
replace()
A funo replace(), como o nome j indica, substitui uma parte de uma string por
outra parte, definidas nos dois primeiros argumentos da funo. Veja o exemplo:
28
> Ol, meu nome Felipe
PS: No d para conferir muito bem o resultado da funo rstrip(), mas eu juro
que ela funciona.
Concluso
Existem muitas outras funes teis relacionadas a strings no Python, mas
checamos algumas das mais importantes e mais utilizadas. Vimos tambm como
definir strings, incluir o valor de variveis nelas e formatar nmeros a serem
inseridos. Assim como o tratamento que o Python d s strings, tratando-as como
listas.
29
Listas
Listas
Se voc est vindo de outra linguagem de programao, possvel que j tenha
trabalhado com arrays. As listas do Python so os arrays das outras linguagens.
Note que os itens no precisam ser todos do mesmo tipo. Voc pode misturar itens
de diferentes tipos dentro de uma mesma lista.
A lista acima, como voc viu, possui um inteiro, um decimal, uma string e uma outra
lista.
30
Para acessar os itens de uma lista, voc utiliza o ndice de cada uma delas, ou a
posio que o item desejado ocupa na lista. O primeiro item o de ndice 0 (zero).
Vejamos:
print(alunos[0])
print(notas[2])
> Jos
> 6.7
Voc tambm pode usar ndices negativos, e assim a contagem ser feita do final
da lista:
print(alunos[-1])
print(alunos[-3])
> Luiz
> Jos
Da mesma forma, tambm podemos alterar o valor que est nestes ndices.
print(notas)
notas[2] = 7.7
print(notas)
E quando queremos adicionar novos itens a uma lista? Bem, nesse caso temos trs
funes. A primeira delas a funo append(). A funo append(), chamada
atravs de uma lista, recebe como parmetro o item a ser adicionado ao final da
lista:
print(alunos)
alunos.append('Alfredo')
print(alunos)
print(alunos)
alunos.insert(1, "Daniela")
print(alunos)
31
> ['Jos', 'Joo', 'Luiz', 'Alfredo']
> ['Jos', 'Daniela', 'Joo', 'Luiz', 'Alfredo']
Por fim, temos a funo extend(). Esta funo adiciona uma lista de itens ao final
de outra lista:
print(alunos)
novos_alunos = ['Carlos', 'Maria', 'Ana']
alunos.extend(novos_alunos)
print(alunos)
E por fim, tambm possvel usar o sinal de multiplicao para repetir itens de
uma lista:
print(notas*2)
print(alunos)
alunos.remove('Joo')
print(alunos)
A funo pop(), remove um item da lista com base no seu ndice. Caso nenhum
argumento seja passado, ele remove o ltimo item. A funo tambm retorna o
item removido:
32
print(alunos)
aluno_removido = alunos.pop()
print(aluno_removido)
print(alunos)
aluno_removido = alunos.pop(2)
print(aluno_removido)
print(alunos)
E se temos dois itens com o mesmo valor e usamos a funo remove()? Neste
caso, a funo remove apaga apenas a primeira ocorrncia deste valor:
Repare no exemplo acima que a lista possua o nome Denis duas vezes, mas apenas
a primeira ocorrncia, que era o segundo item da lista, foi removido.
print(alunos)
print(alunos[0:2])
print(alunos[2:4])
print(alunos[2:5])
Com esta notao, o Python pega os itens no intervalo definido dentro dos
colchetes, iniciando o intervalo no primeiro nmero e terminando no segundo, mas
sem incluir o segundo.
Se omitimos um dos nmeros, ele parte do princpio da lista ou vai at o final dela.
33
print(alunos[:3])
print(alunos[3:])
print(alunos[1:-1])
print(alunos[2:-2])
len()
A funo len(), assim como ocorre quando utilizada com strings, retorna a
quantidade de itens em uma lista:
print(len(alunos))
> 6
max() e min()
As funes max() e min(), como os nomes j devem indicar, retornam o valor
mximo e o mnimo em uma lista:
print(max(notas))
print(min(notas))
> 9.2
> 7.7
copy()
A funo copy() a forma correta de criar uma cpia de uma lista. Definir uma
nova lista igual a uma lista prvia (utilizando o sinal de =), apesar de parecer
intuitivo, no funciona, pois isto cria apenas uma referncia lista. Vejamos
primeiramente a forma errada:
34
alunos.clear()
print(alunos_backup)
Repare como a lista alunos_backup possua os itens iguais lista aluno, mas ficou
vazia aps usarmos a funo clear() para remover todos os itens da lista alunos.
De nada adiantou fazer o backup desta forma.
Vejamos agora a forma correta de criar uma cpia, usando a funo copy()
(vamos aproveitar e recriar a lista alunos, que ficou vazia aps o ltimo exemplo):
count()
A funo count() retorna a quantidade de vezes que um determinado item ocorre
em uma lista. Basta passar este item que se deseja contar como parmetro da
funo. Vamos adicionar alguns nomes repetidos na lista alunos com a funo
extend() e checar o funcionamento da funo count():
> 3
sort()
A funo sort() ordena uma lista. Mas ela tem uma particularidade, e voc deve
tomar cuidado. Ela no retorna nenhum valor, mas sim ordena a lista
permanentemente. Caso voc precise manter os dados na ordem que estavam e
deseje apenas fazer uma exibio da lista ordenada, deve-se fazer uma cpia da
lista:
35
alunos.sort()
print(alunos)
reverse()
A funo reverse() reverte a ordem dos elementos de uma lista. Assim como a
funo sort(), ela executa a operao permanentemente na lista onde chamada,
e por isso, deve-se tomar cuidado ao utiliz-la:
alunos.reverse()
print(alunos)
in
Por ltimo, possvel verificar se um determinado item consta ou no na lista. Para
isso, usamos o in, da seguinte forma:
print("Jos" in alunos)
print("Felipe" in alunos)
> True
> False
split() e join()
Estas so funes com propsitos opostos, e elas na verdade operam em strings.
Mas elas so funes que se relacionam com listas (ou outros tipos de sequncias),
e preferi aguardar o captulo de listas para falar sobre elas.
J a funo join() retorna uma string a partir de uma sequncia, com os itens da
sequncia divididos por um determinado separador.
36
Concluso
E assim conclumos o captulo sobre listas. Vimos que as listas so estruturas para
armazenar dados de diferentes tipos. Vimos tambm como criar, acessar dados e
modificar uma lista. E por fim, vimos algumas funes bastante teis para serem
usados com as listas. No prximo captulo veremos uma estrutura semelhante, a
tupla.
37
Tuplas
Introduo
As tuplas assemelham-se bastante s listas. So estruturas que armazenam dados
de diferentes tipos, em forma de lista.
A grande diferena que ao contrrio de uma lista, uma tupla imutvel. Voc no
pode redefinir elementos de uma tupla, alterar seus valores ou qualquer coisa do
tipo.
Para acessar seus elementos, tambm fazemos da mesma forma que com as listas,
ou seja, atravs de colchetes indicando a posio do elemento desejado:
print(tupla1[2])
> Papagaio
Alm disso, tambm possvel pegar apenas uma parte da tupla, usando a notao
com colchetes e os nmeros de incio e fim desejados divididos por :, assim como
j vimos com as listas. Esta funcionalidade denominada slicing:
print(tupla1[1:3])
38
Tambm permitido criar uma tupla vazia, definindo apenas os parnteses, sem qualquer
elemento dentro:
tupla_vazia = ()
print(tupla_vazia)
> ()
Bem, como dissemos que uma tupla imutvel, vamos provar. Vamos tentar
alterar o valor de um item de uma tupla, assim como fizemos no captulo de listas:
tupla1[1] = "Elefante"
Repare como o prprio Python reporta o erro. Uma tupla no suporta a designao
do valor de um item.
Igualmente, no possvel remover itens de uma tupla. Duas coisas que voc pode
fazer so criar uma nova tupla sem o item desejado e apagar uma tupla
completamente, atravs da funo del():
del(tupla1)
print(tupla1)
Funcionalidades
Algumas das funes que vimos no captulo anterior tambm funcionam com as tuplas,
como len(), max() e min(), por exemplo:
> 9.4
> 3.3
> 5
Tambm possvel transformar uma tupla em uma lista e vice-versa, atravs das funes
list e tuple:
39
lista1 = list(tupla1)
print(lista1)
lista2 = ["Jos", "Afonso", "Carlos", "Luiz"]
tupla3 = tuple(lista2)
print(tupla3)
Concluso
E assim, conclumos o captulo sobre tuplas, que nada mais so do que listas
imutveis. Vimos que muito do que fazemos com as listas tambm funcionam com
as tuplas e as formas de cri-las e acessar as informaes contidas nelas. No
prximo captulo falaremos sobre dicionrios, estruturas muito interessantes para
armazenar dados de uma forma diferente das listas e tuplas.
40
Dicionrios
dict_vazio = {}
print(dict_vazio)
> {}
print(aluno["nome"])
print(aluno["idade"])
> Jos
> 20
print(aluno["Peso"])
41
> KeyError: 'Peso'
Para modificar um valor, novamente, fazemos como nas listas. Basta indicar a
chave que se deseja alterar e definir o novo valor. A incluso de um novo item no
dicionrio feita da mesma forma, utilizando uma chave que ainda no foi utilizada
no mesmo:
aluno["nota"] = 8.2
aluno["peso"] = 74
print(aluno)
Repare como a chave peso e seu valor foram adicionados, alm da alterao no
valor da chave nota.
Para remover uma determinada chave e seu valor, usamos o del. Para apagar
todas as chaves e valores, usamos o mtodo clear, chamado atravs do
dicionrio:
del aluno["idade"]
print(aluno)
aluno.clear()
print(aluno)
> 3
print("idade" in aluno)
print("peso" in aluno)
> True
42
> False
Mas temos outras funes teis para trabalhar com dicionrios. Vamos ver algumas
delas.
get()
A funo get() muito til para evitar erros de chave inexistente. Ela recebe dois
parmetros, que so a chave a ser buscada e um valor de retorno. Ela retorna o
valor de desta chave se ela existir no dicionrio, e se no existir, retorna aquilo que
definimos como valor de retorno, ou None se nenhum valor de retorno for
definido:
> Jos
> None
> No existe
print(aluno.items())
print(aluno.keys())
print(aluno.values())
update()
A funo update() recebe um dicionrio como parmetro e insere os pares deste
dicionrio parmetro no dicionrio atravs do qual a funo chamada. Caso
existam chaves coincidentes, o primeiro dicionrio atualizado com os valores do
dicionrio passado como parmetro:
43
Como podem ver, a chave peso foi adicionada e o valor da chave nota foi
modificado.
Concluso
Neste captulo aprendemos sobre os dicionrios e sua principal diferena para
listas. Vimos como criar um dicionrio, atualizar e acessar suas informaes e
tambm funes que podem vir a ser muito teis ao trabalhar com eles. No
prximo captulo, veremos rapidamente os sets.
44
Sets
set3 = set("papagaio")
print(set3)
45
print(set2)
set2.remove("cachorro")
print(set2)
print(len(set2))
print("gato" in set2)
print("elefante" in set2)
> 4
> True
> False
difference() e intersection()
As funes difference() e intersection() retornam, como o nome j diz, a
diferena e a interseo entre dois sets, ou seja, itens que esto em um set e no
esto no outro ou itens que esto nos dois sets:
copy()
Da mesma forma que vimos para listas, para criar uma cpia de um set, deve-se
utilizar a funo copy(). Criar um novo set apenas utilizando o sinal de igual faz
apenas uma referncia. Primeiro, vejamos como uma simples definio com o sinal
de igual no resolve:
set_backup = set4
print(set_backup)
set4.clear()
print(set_backup)
46
> set()
Concluso
E assim, terminamos o captulo sobre sets, e tambm acabamos com as estruturas
utilizadas pelo Python para armazenar dados. Vimos como criar sets e utiliz-los
para remover duplicatas de listas. Tambm vimos como manipul-los e algumas
funes interessantes para se utilizar ao trabalhar com sets. No prximo captulo
falaremos sobre Estruturas de Controle.
47
Estruturas de Controle
48
Por fim, e se quisermos testar mais de uma condio? A temos o elif. Podemos
usar o elif quantas vezes quisermos, para testar quantas condies forem
necessrias. Se nenhuma delas for verdadeira, o bloco else, localizado ao final,
executado:
if nome == "Felipe":
print("Ol, Felipe")
elif nome == "Joo":
print("Oi, Joo")
elif nome == "Carlos":
print("E a, Carlos?")
else:
print("Ol, visitante")
Loops - For
Os loops so estruturas de controle para repetio. Imagine se eu quisesse
escrever um programa que imprima todos os nmeros de 1 a 10, ou que imprima
separadamente cada item de uma determinada lista. Voc poderia criar uma linha
com um print para cada nmero, ou para cada item. Mas isso seria repetitivo,
tedioso. Tem de haver uma maneira melhor de fazer isso. E tm. Para facilitar, o
Python possui o loop for. Este loop itera sobre os elementos de uma sequncia,
executando o cdigo no bloco indentado logo abaixo. Pode ser uma string, uma
lista. Vamos executar o cdigo do exemplo:
> Alfredo
> Mario
> Jos
> Carolina
> Joana
> Luiza
Voc tambm pode iterar sobre dicionrios, mas existem diferentes formas. Como
sabemos, dicionrios possuem pares chave-valor. Desta forma, possvel iterar
sobre apenas um ou sobre os dois. Vamos ver cada uma das formas abaixo:
49
aluno = {"nome": "Maria", "idade": 20, "nota": 9.2}
No caso da impresso dos nmeros, podemos usar a funo range(). Ela cria uma
sequncia de nmeros inteiros, podendo receber um ou dois parmetros.
Recebendo um parmetro, ela cria o intervalo que vai de 0, at o nmero passado
na funo, excluindo o prprio nmero. Caso sejam passados dois parmetros, o
intervalo comea no primeiro e termina no segundo:
50
> 4
> 5
> 6
> 7
> 8
> 9
print("Exemplo break")
for i in range(1,11):
if i % 5 == 0:
break
print(i)
print("Exemplo continue")
for i in range(1,11):
if i % 5 == 0:
continue
print(i)
51
A mesma lgica foi seguida no segundo exemplo. Entretanto, ao invs do break,
o comando continue foi executado, fazendo com que o loop pulasse para a
prxima iterao, e no imprimindo o nmero 5.
Loops - while
O loop while semelhante ao for, no sentido que ele leva a repetio de um bloco
de cdigo. Entretanto, ele executa este cdigo enquanto uma certa condio
definida for verdadeira. Vejamos abaixo um exemplo semelhante ao de cima:
contador = 0
while contador < 5:
print(contador)
contador = contador + 1
> 0
> 1
> 2
> 3
> 4
Tm de se tomar cuidado com o loop while, pois se voc definir uma condio que
nunca se torne falsa, seu cdigo fica executando sem parar. Se no exemplo acima
ns no inclussemos a ltima linha, que incrementa o contador em 1, o cdigo
rodaria para sempre, imprimindo zero infinitas vezes. Caso voc se veja nesta
situao em algum cdigo, basta apertar Ctrl + C, e o cdigo ser interrompido.
Outra possibilidade definir como condio para execuo do loop while True, e
dentro do loop, definir alguma condio onde se execute o break. Vejamos um
exemplo um pouco mais complexo, misturando o while True com uma estrutura
if / else:
while True:
nome = input("Digite seu nome ou sair para terminar o programa: ")
if nome == "sair":
break
else:
print("Ol, %s" % nome)
52
Concluso
E assim, passamos por todas as estruturas de controle. Vimos como elas permitem
adicionar mais complexidade ao seu cdigo, executando diferentes blocos de
cdigo baseado em determinadas condies ou repetindo blocos de cdigo,
evitando cdigo repetido. No prximo captulo veremos em detalhes uma parte do
Python que j estamos usando desde os primeiros captulos, que so as funes.
53
Funes
def print_ola_tres_vezes():
print("Ola Python")
print("Ola Python")
print("Ola Python")
print_ola_tres_vezes()
Funes podem ter valores retornados. Definimos o valor a ser retornado pela
funo atravs do comando return. O que retornado pode ou no estar entre
54
parnteses. Vamos ver um exemplo de uma funo com um parmetro e um valor
retornado:
def numero_ao_cubo(numero):
valor_a_retornar = numero * numero * numero
return(valor_a_retornar)
numero = numero_ao_cubo(4)
print(numero)
> 64
Se voc tentar chamar esta funo acima sem o devido argumento, o Python
retornar um erro, como podemos ver abaixo:
numero = numero_ao_cubo()
Uma das coisas que voc pode fazer definir um valor padro, que ser o valor
daquele argumento se nenhum valor para ele for includo na chamada da funo.
Para definir um argumento padro, definimos o valor padro na hora de definir a
funo, da seguinte forma:
def print_ola(nome="estranho"):
print("Ol, " + nome)
print_ola("Priscilla")
print_ola()
Voc tambm pode chamar uma funo e nomear os argumentos que est
passando. Este o nico caso onde voc pode passar os argumentos em uma
ordem diferente da ordem definida na criao da funo:
print_infos(idade=30, nome="Felipe")
55
Caso voc no nomeie os argumentos que est passando, eles tm de estar na
mesma ordem em que foram definidos.
args e kwargs
Existe uma forma no Python de definir as funes para que recebam uma
quantidade varivel de argumentos, alm da forma normal de definio de
argumentos. Esta forma atravs da definio de argumentos com um ou dois
asteriscos antes de seus nomes. Por conveno, costuma-se utilizar os nomes *args
e **kwargs, mas no existe uma restrio do Python para que sejam utilizados
apenas estes nomes. Voc pode usar o nome que quiser.
Ambas as formas permitem que seja passado para a funo um nmero qualquer
de argumentos. A diferena entre eles que com um asterisco, ou, por conveno,
*args, estes argumentos no so nomeados, enquanto que se definirmos a funo
com o formato de dois asteriscos, utilizam-se argumentos nomeados na chamada
da funo. Vejamos um exemplo de cada vez:
def print_tudo_2_vezes(*args):
for parametro in args:
print(parametro + "! " + parametro + "!")
Como vemos, no caso do *args, voc pode acessar os parmetros passados como
uma lista. No caso do **kwargs, os argumentos vem em forma de dicionrio, tendo
as mesmas propriedades que vimos anteriormente. Desta forma, para iterar sobre
os argumentos passados, podemos fazer como no exemplo abaixo:
def print_info(**kwargs):
for parametro, valor in kwargs.items():
print(parametro + " - " + str(valor))
Por fim, voc pode misturar estas funcionalidades entre si e com argumentos
nomeados. Vejamos apenas um exemplo para finalizar:
56
def print_info(nome, idade, **kwargs):
print("Nome: " + nome)
print("Idade: " + str(idade))
print("\nInformaes adicionais:")
for parametro, valor in kwargs.items():
print(parametro + " - " + str(valor))
Como vimos, a funo acima usa parmetros nomeados, que seriam os padres,
esperados pela funo, alm da funcionalidade do **kwargs para receber
parmetros adicionais.
Concluso
Neste captulo, vimos em detalhes o que so e como trabalhar com funes. As
diferentes formas de definir uma funo, parmetros a serem recebidos, como
chamar uma funo e tambm como passar um nmero varivel de parmetros. No
prximo captulo, falaremos de mdulos.
57
Mdulos
Mdulos so uma forma de organizar o seu cdigo. Basicamente, voc define suas
funes em um arquivo e pode reutiliz-lo facilmente em outros projetos, podendo
inclusive disponibiliz-lo para a utilizao de outras pessoas.
Voc pode definir seus prprios mdulos, utilizar mdulos que j vem com o
Python ou instalar mdulos de terceiros para utilizar em seus projetos. Vamos
comear pela definio de nossos prprios mdulos.
def modulo_print():
print("Oi, eu sou a primeira funo dentro do mdulo")
def modulo_print_com_nome(nome):
print("Ol %s, eu sou a segunda funo dentro do mdulo")
modulo_exemplo.modulo_print()
modulo_print()
Voc recebe um erro. O Python no sabe onde procurar por esta funo. Voc a
definiu em outro arquivo (modulo_exemplo.py) e no indicou neste acima onde
esta funo est. E como indicamos? Fazendo um import. O import permite que
voc adicione em um arquivo cdigo que foi definido em outro arquivo. Vamos
fazer na prtica para que fique claro:
import modulo_exemplo
modulo_exemplo.modulo_print()
modulo_exemplo.modulo_print_com_nome("Felipe")
58
Agora sim, voc pode usar as funes que definiu em seu mdulo, o arquivo
modulo_exemplo.py. Repare que ao fazer o import no devemos colocar o
formato .py ao final do nome do mdulo. Inclumos a extenso .py apenas na
hora de salvar.
Existem duas outras formas de importar uma funo para utilizar em seu cdigo.
Vamos primeira:
modulo_print()
modulo_print_com_nome("Felipe")
Nesta forma, voc importa apenas a funo que deseja usar. Neste caso, como
vemos, importamos a funo modulo_print() e a chamamos sem precisar colocar o
nome do mdulo e o ponto antes do nome da funo. Repare tambm que ela
importa somente esta funo. Se tentamos usar a outra funo que est definida
no mdulo, temos um erro. Se quisermos usar a outra funo, temos de import-la
tambm.
modulo_print()
modulo_print_com_nome("Felipe")
Esta forma uma variao da forma anterior. Nela, o asterisco indica que tudo que
est no mdulo deve ser importado. Parece prtico, mas esta forma nos expe a
srios riscos. E se importarmos outro mdulo, criado por outra pessoa, com uma
funo que tenha o mesmo nome? Em projetos grandes, que utilizem alguns
mdulos, esta situao tem uma chance boa de acontecer. E isto causa todo tipo de
comportamento inesperado em seu programa. Por isso, esta uma forma no
recomendada de importar funes de outros mdulos para seu programa.
59
Como tudo que feito no terminal, voc pode proceder da mesma forma em
arquivo .py, usando import nome_do_modulo ou from nome_do_modulo import
funcao.
import sys
sys.path
Mdulos do Python
O Python j vem com uma srie de mdulos predefinidos. Para estes, no preciso
definir nada, apenas importar e usar. Um exemplo o mdulo sys, que usamos no
ltimo exemplo e contm funes e parmetros especficos do sistema.
https://docs.python.org/3/library/
60
Concluso
Neste captulo, vimos como mdulos podem ser utilizados para a melhor
organizao do cdigo. Eles permitem a diviso de um cdigo em arquivos,
permitindo a fcil reutilizao dos mesmos em outros projetos. Vimos tambm
sobre os mdulos padro do Python, como o sys, que possui diversas propriedades
e funes relacionadas ao sistema em si.
61
Programao Orientada a Objetos
class Usuario:
def __init__(self, nome, email):
self.nome = nome
self.email = email
def diga_ola(self):
print("Ol, meu nome %s e meu email %s" % (self.nome, self.email))
usuario1.diga_ola()
print(usuario1.nome)
62
> Felipe Galvo
print(hasattr(usuario1, "nome"))
print(hasattr(usuario1, "idade"))
print(getattr(usuario1, "email"))
setattr(usuario1, "nome", "Felipe G.")
setattr(usuario1, "idade", 30)
print(getattr(usuario1, "nome"))
print(getattr(usuario1, "idade"))
delattr(usuario1, "idade")
print(getattr(usuario1, "idade"))
> True
> False
> contato@felipegalvao.com.br
> Felipe G.
> 30
> Traceback (most recent call last):
> File "exemplo_classes_1.py", line 27, in <module>
> print(getattr(usuario1, "idade"))
> AttributeError: 'Usuario' object has no attribute 'idade'
Nas ltimas linhas, vemos que recebemos um erro, pois deletamos uma
propriedade atravs da funo delattr() e depois tentamos recuperar seu valor
com o getattr().
Agora, vamos comentar esta ltima linha que est nos causando este erro, apenas
para que possamos continuar com a execuo dos cdigos que viro frente.
63
classe, como o nome e o email do usurio. Cada usurio ter um nome e email
diferentes.
class Usuario:
contador = 0
def diga_ola(self):
print("Ol, meu nome %s e meu email %s" % (self.nome, self.email))
.
.
.
> 2
Herana
Herana a propriedade da programao orientada a objetos atravs da qual uma
determinada classe pode ser estendida a partir de outra, herdando os mtodos e
propriedades desejadas e adicionando outros, mais especficos. Voc tem que
fazer algumas alteraes especficas no mtodo __init__, para que sua instncia
mantenha os atributos da classe original e tenha seus novos atributos especficos.
Vamos criar uma classe Administrador, que ser estendida a partir da classe
Usuario que j definimos. Para definir que uma classe ser estendida a partir de
outra, inclumos a classe original dentro de parnteses da nova, como se fosse um
parmetro. Depois, fazemos as mudanas no __init__(), chamando o __init__()
da classe original e adicionando as propriedades especficas logo aps:
class Administrador(Usuario):
64
def __init__(self, nome, email, chave_de_administrador):
Usuario.__init__(self, nome, email)
self.chave_de_administrador = chave_de_administrador
def poder_administrativo(self):
print("Eu tenho o poder! Minha chave %s" % self.chave_de_administrador)
Veja que o novo usuario_adm tem acesso tanto aos mtodos definidos na classe
Usuario quanto ao mtodo definido na sua prpria classe, Administrador.
class MembroStaff(Usuario):
def __init__(self, nome, email):
Usuario.__init__(self, nome, email)
def diga_ola(self):
print("Ol, meu nome %s e eu sou membro do Staff. Em que posso ajudar?" %
(self.nome))
> Ol, meu nome Mariazinha e eu sou membro do Staff. Em que posso ajudar?
Concluso
Assim, fechamos o captulo sobre programao orientada a objetos. Vimos como
definir classes, criar novos objetos de uma classe, alterar as propriedades de um
objeto e acess-los. Vimos tambm como o conceito de herana feito no
Python e as particularidades das classes derivadas. No prximo captulo falaremos
sobre data e tempo no Python.
65
Data e Tempo
Neste captulo veremos como trabalhar com datas e tempo no Python. Creio que
no preciso mencionar o quanto isso importante, visto a quantidade de sistemas
que precisa mexer com data e tempo.
Para trabalhar com datas e tempo no Python, usaremos o mdulo datetime, que
j vem definido no Python. Este mdulo possui uma srie de funes que facilitam
nossa vida ao trabalhar com data e tempo.
Data
Para criar datas atravs do mdulo datetime, vamos importar o mdulo e criar
objetos do tipo date. A ideia bem semelhante ao que vimos no ltimo captulo,
de programao orientada a objetos.
> 2016-12-09
A classe date tambm possui mtodos teis, como o today(), por exemplo. Este
retorna a data atual local, conforme definida no seu sistema:
print(date.today())
> 2016-12-13
Tambm podemos usar o today() para definir uma data atravs do construtor da
classe date, alm de poder recuperar, separadamente, os valores do ano, ms e
dia do objeto, atravs das propriedades year, month e day:
hoje = date.today()
> 2016-12-01
66
Tambm podemos calcular a diferena entre duas datas, por exemplo, fazendo
uma simples subtrao entre os dois objetos e recuperando o valor conforme a
medida de tempo que se deseja (dias, por exemplo). Vamos usar a funo abs(),
para garantir que teremos um resultado final positivo:
> 73
print(hoje.weekday())
data2 = data2.replace(day=3)
print(data2)
print(data2.strftime("%d/%m/%Y"))
> 1
> 2016-12-03
> 03/12/2016
Tempo
Para trabalhar apenas com tempo, sem controle do dia, ms e hora, temos a classe
time. Funciona de forma bem semelhante classe date, mas seu construtor
recebe apenas as horas, minutos, segundos e microsegundos. Todos tm um valor
padro de zero (0).
67
from datetime import time
> 12:25:31.001333
Data e Tempo
Quando voc quer ser mais especfico, representando um objeto que registre data
e tempo, use a classe datetime. Esta classe definida no mesmo mdulo
datetime que vimos anteriormente ao trabalhar apenas com datas ou tempo. E sim,
o mdulo tem o mesmo nome da classe.
Aqui, o construtor da classe aceita mistura o das duas classes que j vimos. Ele
recebe ano, ms e dia, que so obrigatrios, alm de valores para horas, minutos,
segundos e microsegundos. Estes, entretanto, so opcionais. O valor padro para
cada um deles zero (0). O formato para a criao :
datatempo2 = datetime.now()
print(datatempo2)
68
Da mesma forma que com objetos date, voc pode acessar dia, ms, segundos,
de um objeto datetime atravs das propriedades day, month, seconds, e
assim por diante.
print(datatempo2.minute)
print(datatempo2.second)
print(datatempo2.day)
55
52
13
A maioria das propriedades e muitas das funes que vimos para objetos date
tambm funciona para objetos datetime, como a funo weekday() e a
possibilidade de subtrair dois objetos, por exemplo. A formatao com strftime()
tambm feita da mesma forma, e novamente, voc pode acessar todas as regras
de formatao de data e tempo no seguinte link:
https://docs.python.org/3.6/library/datetime.html#strftime-strptime-behavior
Concluso
E assim terminamos nosso captulo sobre data e tempo. Vimos como usar o
mdulo datetime para trabalhar com data e tempo, os 3 objetos que so usados
para trabalhar com data, data e tempo ou somente tempo, que so os objetos
date, datetime e time. Vimos como criar cada um deles e acessar suas
propriedades separadamente. Por fim, vimos algumas funes teis que funcionam
com os 3 tipos. No prximo captulo veremos um pouco sobre o tratamento de
erros com as Excees.
69
Excees
Excees so uma forma de captar erros e trat-los da maneira que voc achar
melhor em seu cdigo, ao invs de simplesmente retornar uma mensagem de erro
padro do Python.
O try
O tratamento de excees no Python feito atravs de blocos try / except. A
ideia j dada pelo prprio nome. O Python vai tentar executar o bloco de
cdigo indentado sob a declarao try. Se ocorrer algum erro, voc deve definir
blocos except, de exceo, que sero rodados no caso de diferentes tipos de erro.
Vejamos nosso primeiro exemplo, sem qualquer tratamento de excees. Vamos
fazer com que o Python retorne um erro, inserindo um segundo nmero igual a 0.
Isso resultar numa diviso por 0, o que no gera um erro no Python:
Bem, temos esta mensagem de erro do Python, que at bem clara com relao ao
erro que temos. Mas se queremos tratar este erro com mais elegncia, vamos
incrementar nosso cdigo com blocos try / except:
try:
resultado = int(num1) / int(num2)
print("O resultado " + str(resultado))
except ZeroDivisionError:
print("O segundo nmero no pode ser zero")
70
> Insira o primeiro nmero: 12
> Insira o segundo nmero: 0
> O segundo nmero no pode ser zero
Repare que agora recebemos a mensagem de erro que definimos, sem aquelas
informaes adicionais do Python. Se colocarmos nmeros corretamente, o
resultado sai certo tambm, pois nenhum erro detectado e o bloco de cdigo
dentro do try executado at o fim:
Podemos ter mais de uma exceo. No nosso exemplo, por exemplo, temos que
pensar tambm que o usurio pode colocar um valor diferente de um nmero.
Qual o erro teremos neste caso?
Como podemos ver, um erro do tipo ValueError. Vamos incluir esta exceo em
nosso cdigo tambm. Ela vir logo aps da primeira exceo que j definimos.
try:
resultado = int(num1) / int(num2)
print("O resultado " + str(resultado))
except ZeroDivisionError:
print("O segundo nmero no pode ser zero")
except ValueError:
print("Voc deve inserir dois nmeros")
71
quiser pegar todos os erros? Basta usar somente o except, sem qualquer definio
do tipo de erro. Mas algumas literaturas no consideram isto como uma boa
prtica, pois ele no identifica a raiz do problema e tambm no permite passar
uma informao mais completa e precisa para o usurio. Mas de qualquer forma,
ficaria assim:
try:
resultado = int(num1) / int(num2)
print("O resultado " + str(resultado))
except:
print("Uma das entradas invlida. Favor inserir dois nmeros, sendo o segundo
diferente que zero")
No exemplo acima, rodamos o cdigo duas vezes, uma para cada erro que j vimos.
O tratamento para ambos o mesmo, com a mesma mensagem exibida ao usurio.
Vou manter o cdigo anterior, com o tratamento das excees pelo tipo de erro, e
comentar o cdigo acima para prosseguir.
else e finally
Temos mais duas estruturas que podemos usar com as excees no Python, que
so o else e o finally. O else um bloco final, que roda aps o cdigo no bloco
try rodar sem qualquer erro. Vejamos:
try:
resultado = int(num1) / int(num2)
print("O resultado " + str(resultado))
except ZeroDivisionError:
print("O segundo nmero no pode ser zero")
except ValueError:
print("Voc deve inserir dois nmeros")
else:
print("Diviso feita!")
72
Utilizando os nmeros adequados, veremos a mensagem final ser impressa,
conforme est definido no bloco else. Caso caia na exceo, o else no
executado:
try:
resultado = int(num1) / int(num2)
print("O resultado " + str(resultado))
except ZeroDivisionError:
print("O segundo nmero no pode ser zero")
except ValueError:
print("Voc deve inserir dois nmeros")
finally:
print("Programa concludo")
73
No importa, o cdigo dentro do bloco finally sempre ser executado. E podemos
usar os dois juntos, tendo um bloco else e um bloco finally aps a definio das
suas condies.
Chamando Excees
Voc tambm pode chamar excees em seu programa, atravs da declarao
raise. Vamos chamar uma exceo em um bloco try se o nome inserido for
Felipe:
Porm, se inserirmos Felipe como nome, uma exceo ser chamada, conforme
est definida dentro do bloco if pela declarao raise, e o bloco except ser
chamado. No veremos, ento, o print que est definido na ltima linha do bloco
try, e sim a mensagem definida no bloco except NameError:
Concluso
Conclumos assim o captulo sobre excees e tratamento de erros. Assim, seu
programa pode passar informaes ao usurio de forma mais elegante, prevendo
os possveis erros cometidos pelo usurio e passando mensagens informativas para
o usurio caso ocorram.
74
Arquivos
Neste captulo, veremos como possvel usar o Python para trabalhar com
arquivos. O Python tem funes para ler, gerar e escrever em arquivos, e veremos
cada uma delas.
A funo open()
Esta a funo mais primria para se trabalhar com arquivos. Ela serve, como o
nome j denuncia, para abrir arquivos. Ela recebe dois parmetros, o nome do
arquivo e o modo de abertura. O modo indica o que voc pode e no pode fazer
com o arquivo. A tabela abaixo lista os principais modos:
Modo Descrio
Estes so os mtodos mais utilizados, apesar de termos outros mtodos, cuja lista
completa pode ser encontrada no seguinte link:
https://docs.python.org/3.6/library/functions.html#open
Vamos ento abrir um arquivo de texto. Criei um arquivo txt com alguns nomes de
pessoas aleatrios, se quiser pode baixar aqui, ou, se no quiser, pode criar o seu
mesmo:
https://drive.google.com/file/d/0B46dernCkjj7YjFOSVBSWlhUa2s/view?usp=sharin
g
Vamos ento criar nosso arquivo .py com o cdigo para ler este arquivo:
> Felipe
> Carolina
75
> Joana
> Jos
> Alfredo
> Afonso
> Jlio
> Ana
> Joelma
> Flash Gordon
> Vanderlei
> Maria Claudia
> Felipe
> Car
A funo readline() l uma nica linha do arquivo. Caso voc siga repetindo a
funo, a mesma vai lendo as linhas seguintes do arquivo:
> Felipe
>
> Carolina
>
> Joana
Bem semelhante, a funo readlines() retorna uma lista, sendo cada item uma linha
do arquivo lido:
Desta forma, voc pode iterar sobre as linhas e process-las da forma que desejar.
76
Escrevendo em um arquivo
Vamos agora escrever em um arquivo, usando para isso o modo w na funo
open(), conforme vimos mais acima. Depois, usamos a funo write() para
escrever no arquivo aberto. Alm disso, tambm importante lembrar de fechar o
arquivo com a funo close(). O Python faz isso para ns ao final de um programa,
mas uma boa prtica fechar o arquivo aps us-lo. Vamos escrever duas linhas de
texto qualquer:
Agora, verifique na mesma pasta onde est salvo o seu arquivo .py, e, se tudo
correu bem, deve existir um arquivo com o nome novo_arquivo.txt e com o
mesmo contedo que escrevemos dentro das funes write().
Agora, vamos escrever outro texto em um arquivo de mesmo nome, apenas para
confirmar que a abertura do arquivo neste modo sobrescreve o arquivo definido:
Adicionando a um arquivo
Vamos agora adicionar texto a um arquivo j existente. Para isso, vamos abrir o
arquivo no modo a. Podemos usar o arquivo que criamos no ltimo exemplo,
novo_arquivo.txt. A funo neste modo a mesma usada para novos arquivos,
write():
Agora, ao abrir novo_arquivo.txt, voc ver que a linha acima foi adicionada no
final do mesmo.
77
Abrindo no modo r+
O modo r+ permite tanto a leitura quanto a escrita em arquivos. A posio inicial
ao abrir o arquivo neste modo 0, de forma que qualquer coisa que seja escrita
sem que se mova a posio substituir o que est no comeo.
Voc pode alterar a posio atravs da funo seek(), fornecendo a posio para
a qual voc deseja alterar:
Veja agora como o contedo do arquivo est meio misturado. Primeiro, abrimos no
modo r+ e j escrevemos, substituindo o contedo no incio do arquivo. Depois,
usamos a funo seek() para mudar nossa posio para 15. E ento escrevemos
novamente, substituindo mais uma parte do contedo que j existia no arquivo.
Podemos usar o seek() novamente para retornar para a posio 0 e ento ler o
arquivo.
file.seek(0)
print(file.read())
file.close()
Concluso
E assim terminamos o captulo sobre arquivos. Vimos como criar, ler e manipular
arquivos com o Python, escrevendo e adicionando contedo a eles. Como a funo
open() e o modo de abertura definem o que pode e o que no pode ser feito com o
arquivo, e como navegar em um arquivo aberto com a funo seek().
78
Palavras Finais
E assim, esse livro chega ao fim. Espero ter conseguido passar um pouco de
contedo legal para vocs que chegaram at aqui. Acho que com o que foi
passado, d para se ter uma boa noo da linguagem Python.
E agora?
Bem, agora voc pode alar vos mais altos. O que te interessa? Voc pode pegar o
que aprendeu de Python e aplicar em estudos posteriores. Algumas sugestes
baseado no que o Python pode fazer:
Desenvolvimento Web
Django - https://www.djangoproject.com/
Flask - http://flask.pocoo.org/
Pyramid - https://trypyramid.com/
Anlise de Dados, Cincia de Dados e Computao Cientfica
Propaganda sem vergonha - No meu blog tem uma srie de posts
sobre como comear com anlise de dados usando Python:
http://felipegalvao.com.br/blog/ciencia-de-dados-com-python-basico
/
pandas (anlise de dados) - h ttp://pandas.pydata.org/
Numpy (computao cientfica) - h ttp://www.numpy.org/
SciPy (programao cientfica) - h ttps://www.scipy.org/
scikit-learn (Machine Learning) - h ttp://scikit-learn.org/stable/
BioPython (programao para biologia) - https://biopython.org/
Programao para Desktop
Camelot - h ttp://www.python-camelot.com/
PySide - http://wiki.qt.io/PySide
tkinter - https://docs.python.org/3/library/tkinter.html
Programao multiplataforma
Kivy - https://kivy.org/#home
Desenvolvimento de Jogos
Pygame - h ttp://pygame.org/hifi.html
Panda3D - h ttp://www.panda3d.org/
79
Pesquise o que mais te interessa, material no falta pela Internet. Python tem boas
bibliotecas para praticamente tudo.
80