You are on page 1of 61

Curso de Python - Aula 1 - A proposta

Este post foi editado em Dezembro de 2012, praticamente 4 anos aps a publicao original.
Durante este perodo muita gente se interessou pelo curso e e recebi inmeras mensagens e vi vrios
compartilhamentos sobre este curso pela internet. Por isso que, agora, aps esses 4 anos, resolvi,
finalmente, fazer uma reviso geral no curso e nos exemplos, para manter tudo mais atualizado e at
melhorar trechos mais complexos.
A todos que esto acompanhando o curso e/ou, que acompanharam, meu muito obrigado!
E, bem, vamos ao curso:
Ento, voc quer aprender uma linguagem de programao nova? Ou est afim de automatizar
algumas funes do computador? Programar divertido e nos permite brincar e aprender muito com
nossos computadores. Sim, possvel ensinar o computador a fazer praticamente qualquer coisa no
mundo digital e para isso que serve a programao. E para ensinar um computador a fazer aquilo
que voc quer, voc precisa aprender a falar um idioma que o computador reconhece, e a que
entram as linguagens de programao e a linguagem Python, que mais uma dentre as tantas que
existem.
E para aprender a programar, que tal uma linguagem simples e poderosa? Que tal uma linguagem
que pode comear com simples scripts e se tornar at programas grficos (GUI) com GTK ou
mesmo sites?
Gostou da ideia? Ento voc est pronto(a) para comear a aprender Python!

Eu desenvolvo em PHP faz um bom tempo (quase dois anos - isso em 2008) e agora resolvi
aprender um mundo novo e vendo as opes escolhi a linguagem Python. A melhor parte disso
tudo que, enquanto eu aprendo eu vou ensinando o pessoal que se interessar aqui pelo blog.
A voc pergunta: Mas como ser esse curso? Quanto custa? Onde ?
E eu respondo:

O curso totalmente on-line, na hora que voc quiser.


Uma aula por semana, sempre no sbado ou no domingo (em formato de post aqui no
blog). Ok, este formato no existe mais, as aulas j esto todas publicadas. Talvez eu
adicione mais algumas, talvez...
O nmero de aulas vai depender da evoluo do curso. Foram 19 aulas, mas pode aumentar,
um dia...
Faremos pequenos programas "cli" (para linha de comando).
Caso o mundo gire para o lado das "GUI", ento faremos uns programinhas usando GTK.

No final de cada aula ser proposto um pequeno exerccio que dever ser enviado para mim
(Para corrigir e arquivar). Voc pode treinar com os exerccios e, se tiver algum problema
mais grave, pode procurar um grupo de desenvolvedores Python (tem vrios, mas a lista
Python Brasil uma das melhores.

E ento, voc se pergunta mais uma vez: Hum, legal, e o que eu preciso para fazer essas aulas?
Alguma licena de software para programar? Alguma mega master blaster mquina parruda?
E eu respondo:

Um computador (notebook, netbook, desktop...)


O interpretador Python instalado no seu computador, s baixar l e instalar. Se voc usa
Linux ou Mac, j deve ter Python instalado (abra um terminal e digite python --version isso
vai mostrar a verso instalada)
Conhecimento bsico em alguma linguagem de programao (variveis, estrutura de
controle, funes). Se voc ainda no tem, pode tentar mesmo assim, pois tentei simplificar
as aulas o mximo possvel =)
Vontade de aprender. E muita. srio.

E l vem mais uma pergunta sua: E o que eu (aprendiz) ganho com isso?
E eu respondo:

Conhecimentos em programao de computadores.


Conhecimento em uma linguagem de programao atual e requisitada no mercado.
Horas de diverso. Srio =D
Um motivo para impressionar sua namorada(o)/noiva(o)/esposa(o) mostrando seus
conhecimentos supimpas em Python. (tipo, meio que... , nem todo mundo se impressiona)
Capacidade de automatizar tarefas no seu dia-a-dia.

E a? Gostou? Eu vou arquivar os exerccios do pessoal que estiver fazendo o curso pois no final
vou escolher/sortear um dos alunos para um ganhar um prmio surpresa especial grandioso e
sensacional! Ento acompanhe as aulas aqui no blog e divirta-se aprendendo bastante.
Amanh a primeira aula estar disponvel. Assine o feed RSS para ficar atento s aulas e vamos
programar!
- See more at: http://blog.evaldojunior.com.br/aulas/python/2008/11/01/curso-de-python-aula-1-aproposta.html#sthash.1jFRM4WK.dpuf

Curso de Python - Aula 2 - Conceitos e variveis


Ol! Est na hora de comear o Curso de Python!
importante lembrar que todas as aulas sero feitas utilizando o sistema operacional GNU/Linux, o
Python funciona em plataformas Unix (FreeBSD, Solaris), Windows e Mac OS X. Se voc quiser
fazer as aulas em outro ambiente fique vontade, mas que fique claro que eu posso no resolver
alguma dvida sua referente ao seu sistema.

Como rodar os exemplos?


Utilize o editor de textos de sua preferncia para fazer os exemplos (vim, kate, gedit, joe, nano).
Lembre-se de utilizar um editor de textos puro e no um editor rich como o OpenOffice Writer ou o
MS Word.
Depois de digitar os cdigos basta salvar o arquivo e lhe dar permisso de execuo (no
Linux/OSX), assim:

$ chmod +x exemplo1.py

A extenso py utilizada aqui apenas por conveno, os arquivos no Linux no precisam


necessariamente de uma extenso. Aps dar a permisso de execuo basta rodar o script assim:

$ ./exemplo1.py
Ola Mundo!
$

No exemplo acima o Python apenas imprimiu "Ola Mundo!" e saiu.


Uma outra forma de rodar os exemplos usando o IDLE, que o editor padro que vem instalado
com o Python. Neste caso, basta salvar o arquivo e usar a tecla <F5> para executar o programa.
Primeiro alguns conceitos bsicos, sem muita enrolao, se voc quiser saber com mais detalhes a
histria do Python a galera da Wikipedia tem um artigo bem legal.
O Python uma linguagem de programao interpretada e orientada objetos, o que significa que
voc no precisa compilar o fonte, basta executa-lo com o interpretador, a orientao objetos
veremos mais frente neste curso.

O Interpretador Interativo

Um recurso muito legal do Python o seu interpretador interativo, nele voc vai digitando os
comandos e recebendo as respostas na hora, muito legal para testar cdigos e saber como a
linguagem trabalha em alguns casos.
Para ligar o interpretador basta chama-lo no terminal, ou procurar o programa no menu do seu
sistema.

$ python

Python 2.5.2 (r252:60911, Sep 29 2008, 21:15:13)


[GCC 4.3.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>

Ali no prompt (os sinais >>>) onde voc comea a digitar seu cdigo para ser interpretado
instantaneamente. Exemplo:

>>> print("Ol Mundo!")


Ol Mundo!
>>>

Ele imprimiu "Ol Mundo!" na tela e voltou ao prompt para receber novos comandos, legal n?
Durante o curso no ser utilizado o interpretador interativo do Python, sempre faremos arquivos de
texto com o cdigo, mas se voc quiser usar o interpretador para tirar alguma fica vontade =)

Variveis

Ento vamos s nossas primeiras linhas de programao com o Python. Muitos textos sobre Python
comeam mostrando como legal utilizar o interpretador dele como uma calculadora, mas aqui ns
vamos comear com variveis de texto.
Uma varivel um espao em memria utilizado para guardar alguma informao, quer ver um
exemplo?
#!/usr/bin/env python
texto = "Oi, como vai voc?"
print(texto)

Explicando o cdigo: A primeira linha diz que o cdigo dever ser interpretado pelo Python, dessa
forma podemos roda-lo como qualquer outro programa (sem chamar o interpretador na linha de
comando). Na segunda linha ns reservamos um espao em memria e lhe damos o nome de texto,
dentro deste espao guardamos a informao "Oi, como vai voce?", e a terceira linha utiliza uma
funo do Python chamada print, esta funo imprime na sada padro (em geral o monitor) o
contedo de alguma varivel. Simples n? Digite o cdigo, salve, d permisso de execuo e
execute (abaixo eu chamei o arquivo de aula2_texto.py, mas voc pode dar o nome que quiser).

$ chmod +x aula2_texto.py

$ ./aula1.py
Oi, como vai voce?
$

Deu tudo certo a? Creio que sim =)


Agora vamos exibir um texto com 3 linhas sendo que cada linha estar em uma varivel:
#!/usr/bin/env python
linha1 = "Aulas de Python do InFog"
linha2 = "Com dicas e exerccios!"
linha3 = "Entre nessa voc tambm!"
print(linha1 + linha2 + linha3)

Agora, rodando esse cdigo teremos:

$ ./aula2_texto3.py
Aulas de Python do InFogCom dicas e exercicios!Entre nessa voce tambem
$

Certo, aqui foi usado o operador + (mais) para "concatenar" (juntar, uma no final da outra) os
valores das variveis. O problema que foi tudo exibido na mesma linha, e no era isso que
queramos certo? Para resolver essa questo vamos simplesmente adicionar um caractere especial
no fim dos dois primeiros textos (variveis linha1 e linha2), um caractere de final de linha, no
Linux esse caractere o \n, ento o cdigo ficar assim:
#!/usr/bin/env python
linha1 = "Aulas de Python do InFog\n"
linha2 = "Com dicas e exerccios!\n"
linha3 = "Entre nessa voc tambm!"
print(linha1 + linha2 + linha3)
$ ./aula2_texto3.py
Aulas de Python do InFog
Com dicas e exercicios!
Entre nessa voce tambem
$

Agora sim! Uma varivel por linha =)


O exemplo acima foi para mostrar como concatenar strings (strings so variveis do tipo texto),
agora vou mostrar duas formas muito mais simples de se obter o mesmo resultado, porm com
apenas uma varivel:
5

Primeiro usando o caractere especial \n:


#!/usr/bin/env python
print("Oi eu sou um texto\ndividido em\n3 linhas!")

Neste exemplo o texto dividido em 3 linhas usando o caractere especial \n em linha.


Agora usando um outro recurso muito legal que so as aspas trplices:
#!/usr/bin/env python
texto = """
Eu tambm sou um
texto dividido
em 3 linhas
"""
print(texto)

Neste exemplo foram utilizadas as aspas trplices, elas funcionam assim: Voc coloca as trs aspas e
comea a digitar seu texto, no final basta fechar com as trs aspas novamente.

Lio de Casa

A lio de casa de hoje bem fcil, faa um script Python que me mostre a mensagem abaixo das
trs formas mostradas aqui, uma linha por varivel, todas as linhas em uma varivel e usando as
aspas trplices.
Mensagem que deve ser exibida:

Com grandes poderes vm grandes responsabilidades.


O bem de um e o bem de todos.
Sou o que sou devido ao que todos somos.

As trs formas devem estar em apenas um script Python.

Curso Python - Aula 3 - Comentrios, Docstrings e Nmeros

Vamos agora para a terceira aula do curso de programao com Python!


Esta aula tem os seguintes assuntos: Comentrios, Docstrings e Nmeros.
Vamos ver o que so cada um deles, para que servem e como us-los.
6

Comentrios

Voc sabe o que so comentrios em um programa? Comentrios so pequenos textos, em geral de


uma linha, que explicam alguma coisa no cdigo, em geral para ajudar um possvel leitor, ou vocs
mesmo, um tempo depois, a entender o que est acontecendo. Vamos a um exemplo:
#!/usr/bin/env python
# *-* coding: utf-8 *-*
# Isto um comentrio
print("oi")
print("Tudo bem?) #Outro comentrio

A linha 3 tem apenas um comentrio, j na linha 5 tem uma funo print() e tambm um
comentrio.
O interpretador do Python vai simplesmente ignorar os comentrios, assim como outras linguagens.
Ento ele est ali para ajudar um ser humano =D
Comentar o cdigo chega a ser uma arte, voc no pode exagerar comentando cada linha para dizer
o que ela faz, mas sempre bom dar uma ajudinha nas linhas mais obscuras ou complexas. Alias, se
um determinado trecho de cdigo est muito obscuro, talvez seja melhor facilitar um pouco o
cdigo, do que encher de comentrios.
Outra coisa importante: Jamais esquea um comentrio que diz algo contrrio ao que o software faz.
Isso pode atrapalhar muito, MUITO, algum (ou voc mesmo), quando for necessrio manter o
cdigo.

Docstrings

Gostaram dos comentrios? Sim, eles so legais, mas agora vem uma coisa muito legal tambm,
que so as Docstrings!
A gente ainda no chegou nas funes e parmetros, mas j vou explicar as docstrings, j que elas
sero muito teis no futuro.
Imagine que voc quer documentar uma funo, uma classe, um mdulo, etc. Sim, cdigo bem
documentado facilita a integrao com novos desenvolvedores e ainda te ajuda a entender melhor
que voc mesmo est fazendo. E o que fazer caso voc precise de uma boa documentao? Abre um
novo documento em um editor de textos como o Open Office Writer? Escreve em um caderno?
Escreve em um saco de po? Nooo, vamos utilizar um recurso do Python que so as Docstrings.
Veja este exemplo:
#!/usr/bin/env python
# *-* coding: utf-8 *-*
def funcao(param1, param2):
'''
Descrio:
7

Esta uma funo de exemplo que apenas


exibe duas strings
Utilizao:
funcao(param1, param2)
Parmetros:
param1
Um texto qualquer
param2
Outro texto qualquer
'''
print(param1)
print(param2)
print funcao.__doc__

Voc lembra das aspas trplices? Pois olha elas a, s que neste caso elas no esto como valor de
alguma varivel, elas esto como documentao do seu cdigo. Quando um outro desenvolvedor for
utilizar a sua funo ele pode chamar o mtodo __doc__ dela e ver esta documentao, olha s a
sada do programa acima:

$ ./docs.py

Descrio:
Esta uma funo de exemplo que apenas
exibe duas strings

Utilizao:
funcao(param1, param2)

Parmetros:
param1
Um texto qualquer
param2
texto qualquer

Legal n? Ou seja quando voc estiver com dvida sobre a utilizao de alguma funo no Python
tente chamar o mtodo __doc__ dela. Esta uma tima forma de documentar seu cdigo.

Nmeros

Agora vamos aos nmeros, aqui faremos algumas operaes, e nisso que o exerccio de hoje ser
baseado.
As variveis podem conter nmeros de uma forma muito fcil, basta usar o operador de atribuio
(sinal de = ) para isso. As operaes entre os nmeros tambm super simples, voc pode usar os
operadores + (adio), - (subtrao), / (diviso) e * (multiplicao), veja abaixo:
#!/usr/bin/env python
# *-* coding: utf-8 *-*
a = 1
b = 10
c = 200
d = a + b # Resultado: 11
e = c / b # Resultado: 20
f = a - b # Resultado: -9
g = b * c # Resultado: 2000
h = 3
i = b / h # Resultado: 3 (Opa!!!)

At a linha 10 estava tudo tranquilo, no? A o Python disse que 10 dividido por 3 igual a trs!
Como assim? O correto no seria 3.33? isso mesmo, o correto seria ele mostrar as casas decimais,
mas neste ponto ns usamos apenas nmeros inteiros e com isso o Python concluiu que estamos
trabalhando apenas com inteiros, por isso que o resultado foi 3. Mas por isso que existem os...

Tipos de Nmeros

Sim, existem tipos diferentes de nmeros, existem os inteiros, os reais... E no exemplo acima ns
fornecemos dois nmeros inteiros para o Python (3 e 10) e ele nos retornou o resultado inteiro da
diviso que o 3.
Mas como fazer para ter o resultado real?
Calma, vamos ver os tipos de nmeros. Os integer (inteiros) so os que usamos acima eles tm um
limite que varia de acordo com o sistema operacional. Outros dois tipos de nmeros interessantes no
Python so os nmeros float (reais) e os long (longos)...
Os nmeros float so os famosos "nmeros quebrados", com esse tipo de nmero nosso exemplo
teria retornado 3.33. J vou mostrar, calma a.
Os nmeros do tipo long so tambm nmeros inteiros, a diferena que eles so virtualmente
ilimitados, s o que vai te impor um limite aqui a quantidade de memria do computador, sim isso

mesmo, se voc quiser usar um nmero super mega blaster gigante voc pode, desde que seu
computador no exploda tentando lidar com ele :).
Bom, como dizemos que um nmero integer, float ou long? Assim:
#!/usr/bin/env python
# *-* coding: utf-8 *-*
a = 1
b = long(a) # Usando a funo long()
c = float(a) # usando a funo float()
d = 1.0 # Declarao usando o ponto
e = 5.5
f = -33.7 # Serve para negativos!

Simples n? Assim conseguimos resolver o probleminha da diviso:


#!/usr/bin/env python
# *-* coding: utf-8 *-*
a = 3.0
b = 10
c = b / a # Resultado 3.333

Como vocs podem ver a operao envolveu um nmero integer e um nmero float, neste caso o
Python fez a converso do integer para float e ento fez a operao. Ateno: aqui o Python
converte o integer para float apenas para fazer a operao, no final das contas a varivel b
continuar como um 10 inteiro!
Os grupos de precedncia das operaes podem ser definidos com parnteses:
#!/usr/bin/env python
# *-* coding: utf-8 *-*
a = 2 + 4 - 3 + 6 # Resultado: 9
b = (2 + 4) - (3 + 6) # Resultado: -3
c = b / a # Resultado 3.333

Viram a diferena entre agrupar e no agrupar as operaes?


Lio de Casa
A lio de casa de hoje vai continuar bem light, pois as Docstrings ns usaremos mais pra frente,
ento hoje eu quero que vocs podem completar este cdigo:
#!/usr/bin/env python
# *-* coding: utf-8 *-*
a = 2
b = 10
c = 15
# 1) divida b por a
# 2) multiplique b por c
# 3) some o resultado da 1 com c

10

# 4) divida c por b de forma inteira


# 5) divida c por b de forma real
# 6) subtraia o resultado da 4 de c
# 7) some a e b e multiplique pela soma de b e c
# 8) S para lembrar, exiba seu nome na tela

Ento isso, esta foi a aula de hoje, faam os exerccios e vo treinando a =)

Curso de Python - Aula 4 - Mais Nmeros e a Biblioteca Math


Ol pessoal! E vamos mais uma aula de Python.
Nesta aula vou falar um pouco mais sobre nmeros e operaes e para isso vou usar alguns recursos
da biblioteca math.
Vamos comear pela:

Exponenciao

Eita palavrinha feia... Bom, mas acho que aqui todos sabem que exponenciao isso: 2 = 8.
Ok, mas como fazer o Python fazer isso para ns?
Uma primeira forma seria esta, que bem parecida com outras linguagens:
a=2*2*2
Tudo bem, mas se eu quero fazer 2? Vou fazer isso:
a = 2 * 2 * 2 * 2 * 2 ... em quanto estava mesmo?...
Bem chatinho n? Por isso bem melhor utilizarmos os recursos que a linguagem nos oferece para
isso (em qualquer linguagem!). No Python a exponenciao feita usando duas vezes o asterisco,
assim:
#!/usr/bin/env python
# *-* coding: utf-8 *-*
a = 2 ** 23

Interessante no? Agora que voc j conhece a exponenciao, vamos :

11

Radiciao

Nossa! Outra palavrinha feia... A radiciao o contrrio da exponenciao e tambm conhecida


nos crculos sociais como "raz". A raz pode ser quadrada, cbica ou de ndice n. Aqui vamos usar
uma funo da biblioteca math do Python que nos retorna a raiz quadrada de um nmero. Aqui
tambm o nosso ponto de partida para as bibliotecas do Python. Por enquanto apenas veja e teste o
cdigo abaixo, sem perguntas, em breve voc vai saber bem o que cada linha faz:
#!/usr/bin/env python
# *-* coding: utf-8 *-*
import math
a = 9
b = math.sqrt(a)
print(b) # Imprime 3.0

Resumindo, a funo sqrt() da biblioteca math nos diz a raiz quadrada do nmero 9. Por enquanto
apenas aceite isso, no assunto abaixo voc vai saber o que so as bibliotecas e o que elas podem nos
oferecer.

Bibliotecas

De forma simplificada as bibliotecas so componentes que oferecem funes e classes para nossos
programas. "Hum, o que so funes e classes?" voc deve estar se perguntando, e eu vou explicar.
As Funes so rotinas pr estabelecidas que fazem alguma coisa especfica e podem ou no
retornar algum resultado. Um exemplo que j estamos usando faz um tempinho a funo print(),
que pega uma informao e exibe na tela. Outra funo que acabamos de usar a sqrt() (SQuared
RooT, Raz Quadrada) que nos retorna a raz quadrada de um nmero.
As funes podem ou no receber parmetros. Os parmetros so informaes que passamos para
as funes, mais um vez o exemplo da sqrt() que recebe um valor numrico. Os parmetros so
passados dentro dos parenteses que seguem o nome da funo. Quando h mais de um parmetro
ns usamos vrgulas para separ-los. Veja um exemplo:
#!/usr/bin/env python
# *-* coding: utf-8 *-*
# Chamando funo sem parmetros
funcao1()
# Chamando funo com um parmetro
funcao2(param)
# Chamando funo com N parmentros
funcao3(param1, ..., paramN)

Bem, por enquanto aceitem essas informaes sobre funes como verdade absoluta do universo,
quando chegar a hora de desenvolvermos as nossas funes esses conceitos ficaro muito mais
claros.
Por enquanto no vou falar sobre as classes, isso fica para uma prxima aula.

12

Bem vamos voltar biblioteca math. Essa biblioteca nos oferece algumas funes alm da sqrt(),
vou mostrar uma listinha abaixo:
math.sqrt(numero): Retorna a raz quadrada do nmero.
math.cos(numero): Retorna o cosseno do nmero em radiano.
math.sin(numero): Retorna o seno do nmero em radiano.
math.tan(numero): Retorna a tangente do nmero em radiano.
math.radians(numero): Converte o angulo 'numero' de graus para radiano.
math.pi: No bem uma funo, est mais para uma constante com o nmero pi
(3.1415926535897931).
math.hypot(x, y): Retorna a hipotenusa dos nmeros (catetos) fornecidos.
A biblioteca math muito mais do que apenas essas funes, mas isso foi apenas para lhes mostrar
alguma coisa dela.
Bom acho que com isso j conseguimos ir para uns exerccios, certo?

Lista de exerccios

Hoje a lista de exerccios ser um pouquinho mais complexa do que as outras que j fizemos, mas
no desanime, refaa quantas vezes for necessrio para assimilar bem o contedo.
1) Calcule e exiba na tela a rea do crculo de raio 4cm.
2) Calcule e exiba na tela as razes de 9, 16, 20, 25 e 42.
3) Calcule a hipotenusa de um triangulo cujos catetos so 9cm e 4cm. (sem usar a funo
math.hypot() heim!)
4) Calcule a rea o volume do cilindro de raio 6cm e altura 5cm.
Treine bastante e se tiver alguma dvida pode perguntar aqui nos comentrios.

Curso de Python - Aula 5 - Matemtica, Recados e Strings


Ol pessoal, aqui estou para mais uma aula de Python!
Na ltima aula eu deixei uns exerccios um pouco mais complexos do que os das primeiras aulas.
Eu esqueci que nem todos que esto fazendo o curso j tiveram esse tipo de disciplina na

13

escola/curso/faculdade, ento acabou que apareceram coisas bem "diferentes" para o clculo da rea
do crculo e do volume do cilindro.
Bem para aqueles que no sabiam as frmulas, aqui esto:
rea do crculo: PI * Raio
Volume do cilindro: PI * Raio * Altura
Nas prximas vezes em que eu pedir algum tipo de clculo eu passo as formulas e tambm os
resultados, assim vocs mesmos j se corrigem.

Um pouco mais sobre strings

Na aula dois, para mostrar as variveis eu usei sempre textos que so chamados na maioria das
linguagens de programao de "strings". Lembra que nesta aula aprendemos como "concatenar"
variveis de texto? Tambm vimos as aspas trplices e o caractere especial \n.
Pois bem, hoje vamos ver mais algumas operaes interessantes com as strings.
Multiplicao: Sim, no Python podemos multiplicar algum texto, o que faz bastante sentido, vejam
um exemplo:
#!/usr/bin/env python
# *-* coding: utf-8 *-*
linha = '-' * 50
print(linha)

A sada deste exemplo esta:


$ ./linha.py
-------------------------------------------------$
Neste exemplo eu multipliquei a string "-" (um trao) por 50 e obtive uma linha. Esse recurso bem
interessante, principalmente para formatao da sada de texto - talvez vocs no vejam os 50 traos
por que o wordpress faz alguma coisa que os corta =(
Um pequeno aviso: Ateno, lembra que usamos algumas funes da biblioteca math? Pois bem,
agora vamos usar algumas funes da biblioteca str, mas, ao contrrio da math, ns no precisamos
de um "import str" no incio do cdigo, pois essa j vem por padro =)
Posicionamento: Legal, agora eu sei exibir uma linha com 50 traos, ento seria bom se desse para
colocar algo como um ttulo centralizado nela. Sim, faremos isso! E no apenas centralizado, vou
mostrar trs alinhamentos diferentes para vocs:
#!/usr/bin/env python
# *-* coding: utf-8 *-*
linha = '-' * 50
titulo = 'Aulas de Python'
14

print(titulo.ljust(50))
print(linha)
print(titulo.center(50))
print(linha)
print(titulo.rjust(50))
print(linha)

E a sada disso (dessa vez mostrei o meu terminal j que no browser isso no fica bem alinhado):

neste exemplo usei trs funes da biblioteca str: str.ljust(), str.center() e str.rjust(). A funo
str.ljust() alinha um texto esquerda, de acordo com o tamanho passado para ela, que neste caso
foi 50. As funes str.center() e str.rjust() trabalham da mesma forma, mas uma centraliza o texto
e a outra faz o alinhamento direita.
Legal, mas a funo str.ljust() intil j que um texto j "alinhado esquerda", certo? Errado! E se
eu disser que podemos preencher o espaos em branco com algo alm de "espaos em branco"?
Vejam s:
#!/usr/bin/env python
# *-* coding: utf-8 *-*
linha = '-' * 50
titulo = 'Aulas de Python'
print(titulo.ljust(50, '-'))
print(titulo.center(50, '*'))
print(titulo.rjust(50, '+'))

E a sada:

Como segundo parmetro para as funes eu passei os valores "-", "*" e "+", com isso o Python
preencheu os espaos em branco. Usando isso d para fazer um relatrio bem bonito para o seu
chefe heim?
Caso Caixa: (desculpem, no achei uma palavra melhor para o ttulo deste tema, ento vai "caso"
mesmo, se algum achar uma melhor me avise que eu mudo aqui Valeu pela sugesto Jos Meira!)
A biblioteca str tambm nos oferece algumas funes para trabalharmos com as caixas alta e baixa
(Maisculas e minsculas) das strings. Com algumas funes simples podemos deixar um texto
todo em maisculas, minsculas ou algumas outras formas, vejam:

15

#!/usr/bin/env python
# *-* coding: utf-8 *-*
titulo = 'aulas de python'
print('Resultado com str.upper()')
print(titulo.upper())
print('Resultado com str.lower()')
print(titulo.lower())
print('Resultado com str.title()')
print(titulo.title())
print('Resultado com str.capitalize()')
print(titulo.capitalize())
print('Resultado com str.title() e str.swapcase()')
print(str.swapcase(titulo.title()))

O resultado:

ATUALIZAO: A ltima linha tambm poderia ter sido escrita assim:


#!/usr/bin/env python
# *-* coding: utf-8 *-*
titulo = 'aulas de python'
print('Resultado com str.title() e str.swapcase()')
print(titulo.title().swapcase()) # Um jeito mais curto para o mesmo resultado
# Isso funciona pois no Python h funes que retornam um objeto
# neste caso um objeto do tipo string que pode ter seus
# mtodos (funes) utilizados.

Agora as explicaes...
Na terceira linha eu defini a varivel titulo com o valor "aulas python".
Na quinta linha eu usei a funo str.upper() que deixa toda a string maiscula.
Na stima linha eu usei a funo str.lower() que faz o contrrio, deixando toda a string minscula
(tudo bem que ela j era minscula).
Na nona linha usei a funo str.title() que deixa maiscula apenas as primeiras letras de cada
palavra.

16

Na dcima primeira linha foi utilizada a funo str.capitalize() que deixa maiscula apenas o
primeiro caractere da string.
J na dcima terceira linha eu usei duas funes, a str.title(), que agora vocs j conhecem e a
str.swapcase(). Aqui feito o seguinte, a funo str.title() deixa a string assim: "Aulas De Python",
a vem a funo str.swapcase() e inverte a caixa da string, o que maiscula vira minscula e viceversa, deixando a string assim: "aULAS dE pYTHON".
Substituio: Agora vamos substituir um pedao de uma string:
#!/usr/bin/env python
# *-* coding: utf-8 *-*
titulo = 'aulas de python'
print(titulo.replace('python', 'linux')

O resultado disso? T ai:


$ ./subs.py
aulas de linux
$
Neste exemplo eu substitu a palavra "python" pela palavra "linux".

Exerccios:

Ah, mas j? Estava to legal...


Nesta aula aprenderemos mais sobre strings depois de aprendermos alguns conceitos como as
instrues para controle do fluxo do programa.
Agora a lio de hoje:
Todas as linhas devem ter a largura de 60 caracteres.
linha preenchida com "-".
seu nome alinhado direita em minsculo.
seu nome centralizado com as primeiras letras em maisculo.
seu nome esquerda, a linha preenchida com _ (underline).
troque o seu sobre nome por "python" e exiba centralizado.
transforme a frase "o menino legal" em "a menina legal" e exiba.
Bom treino

Curso de Python - Aula 6 - Um pouco mais sobre strings

E aqui vamos ns para mais uma aula de Python!


17

Mas antes da aula vamos aos recados e comentrios...


Eu achei bem interessante o ltimo exerccio da aula 5, aquele em que vocs deveriam transformar
a frase "o menino legal" em "a menina legal". O que eu achei interessante que somente alguns
perceberam que bastava trocar as letras "o" pela letra "a". Mas percebam que no existe "certo" ou
"errado", o que eu pedi foi para transformar uma frase em outra, ento tivemos resultados assim:
frase.replace("o menino", "a menina")
Que faz o que eu pedi, mas, como eu disse, dava para fazer assim:
frase.replace("o","a")
Bem mais simples, no?
Ento vamos aula de hoje!
Hoje vamos falar um pouco mais sobre as strings... Sim, eu sei que j vimos bastante coisa sobre
elas, mas hoje vamos ver um pouco mais :)

Substrings

Uma coisa interessante sobre as strings que voc pode acessar pedaos delas de forma muito
simples, vejam o exemplo:
#!/usr/bin/env python
# *-* coding: utf-8 *-*
titulo = 'aulas de python'
# Pegando caractere por caractere
print(titulo[0])
print(titulo[4])
# Agora pegando intervalos de caracteres
print(titulo[0:5])
print(titulo[9:15])
# Outros modos:
# Do comeo at X
print(titulo[:5])
# De X at o fim
print(titulo[9:])

O resultado:

$ ./substr.py
a
s
aulas
python
aulas
18

python
$
Agora as explicaes:
Linha 3: Defini uma varivel chamada titulo e ela dei o valor "aulas de python".
Linha 5: Exibi o caractere 0 (zero) desda string, ou seja, a letra "a".
Linha 6: Mesmo esquema da linha 5, s que desta vez exibindo o caractere nmero 4, ou seja, a
letra "s".
Agora vem a parte legal:
Linhas 8 e 9: Exibi uma lista de caracteres, primeiro a lista de 0 at 5 para mostrar a palavra
"aulas"...

Pausa para compreender melhor

O Python faz a numerao dos caracteres de uma string desse jeito:

Certo, simples n? Para pegar a letra "v" eu faria isso:


texto[5]
E para pegar a palavra "Como" eu faria isso:
texto[0:3]
Noooo!!! Isso retornaria apenas a string "Com". Mas... Por que isso?
Ora, bem simples, a lista [A:B] vai de A (inclusive) at B (exclusive). Muito complexo? Bem, ela
vai de A at um antes de B, o nome disso Slice (cortar em ingls).

Fim da pausa!

Continuando... Ento se eu pegar dos caracteres de 0 at 5 (na linha 8), ento eu consigo pegar a
palavra "aulas". O mesmo vale para a linha 9, onde eu pego a palavra "python".
Linhas 12 e 14: Nestas linhas eu usei um outro recurso interessante, quando voc no fornece o
primeiro elemento da lista de caracteres o Python entende que voc quer o primeiro caractere da
string, o caractere 0 (zero). Da mesma forma quando voc no fornece o segundo elemento da lista
o Python entende que voc quer que seja o ltimo caractere.
19

Sabendo disso tudo voc se pergunta se possvel fazer algo como substituir uma letra dentro de
uma string:
texto[6] = "b"
No! No possvel alterar strings desta forma. Para isso utilize a funo str.replace() que j vimos
aqui.
Uma outra forma de pegar substrings usando a funo str.__getslice__(), desta forma:

titulo = "aulas de python"


print(titulo.__getslice__(0,5))
claro que bem mais simples usar a primeira forma ( texto[0:5]), mas bom saber que existem
outros meios :)

Strip

Calma... no o que alguns pensaram... Agora veremos mais uma funo da biblioteca str, a funo
str.strip(). Os que j programam em alguma linguagem podem conhecer essa funo pelo nome
trim.
Vamos aos exemplos:
#!/usr/bin/env python
# *-* coding: utf-8 *-*
titulo = ' aulas de python '
print(titulo.strip())
print(titulo.lstrip())
print(titulo.rstrip())

Desta vez a string tem o valor de " aulas de python


", sim, com cinco espaos em branco
antes e depois do texto. Aqui foi proposital, mas voc pode se deparar com um texto assim por ai.
Na linha 4 eu removi os espaos no comeo e no fim da string com a funo str.strip().
Na linha 5 eu removi apenas os espaos no comeo da string usando a funo str.lstrip() (Left
Strip).
E na linha 6 eu removi apenas os espaos no fim da string usando a funo str.rstrip() (Right
Strip).

Find

20

Agora um funo legal para pesquisar textos:


#!/usr/bin/env python
# *-* coding: utf-8 *-*
titulo = 'aulas de python'
print(titulo.find('de'))
print(titulo.find('we'))

O resultado:

$ ./find.py
6
-1
$
Na linha 4 eu pesquisei pelo texto "de" e fui informado que ele est comea no caractere 6. Isso
legal para no ficar contando "de olho" onde uma substring comea.
J na linha 5 eu pesquisei pelo texto "we", mas como ele no existe na string eu recebi o resultado 1. Isso interessante para fazer pesquisas em textos.

Lio de casa!

Com isso vamos para a lio de casa de hoje, que ainda bem leve e desta vez no requer cdigo.
Mandem as respostas no corpo do e-mail mesmo:
1) Se eu tenho o texto "Oi me chamo Joo! Como o seu nome?", como eu faria para saber em que
posio a palavra "nome" comea? E como eu retornaria essa palavra?
2) Ainda na mesma string da 1, como eu trocaria o nome Joo por Jos?
3) Como eu fao para remover os espaos no incio de um texto? E no fim? E no incio e no fim?
(A aula dessa semana no deixa espaos para exerccios mais elaborados...)
E agora um desafio! No obrigatrio fazer!
Calcule a rea sob o grfico da funo f = x + 3, sendo que x vai de 2 4. Apenas com o que j
aprendemos aqui j possvel fazer isso.

Curso de Python - Aula 7 - Python 3 e "Que caminho seguir?"


Ol!
E aqui vamos ns para mais uma aula de Python! Mas antes temos os recadinhos =)
21

Primeiro de tudo: DESCULPEM por no ter postado a aula no domingo dia 07/12... A culpa foi em
parte por um projeto que terminei ontem e em parte por estar insatisfeito com o recurso de tirar
screenshot dos fontes e colocar aqui. Mas as duas causas j foram resolvidas =) O projeto foi
finalizado (eu acho) e eu adotei uma nova forma de mostrar os cdigos para vocs: o plugin code
snippet do WordPress, espero que vocs gostem.
Ahh, para compensar o domingo passado eu caprichei nesta aula =) Ento melhor vocs pegarem
um cafezinho, suquinho, chazinho ou qualquer coisa com "inho" que vocs gostem de bebericar ou
mastigar enquanto estudam, por que a aula de hoje grandinha ;)
O frum est a cada dia sendo mais utilizado! Ento eu convido todos vocs para fazerem parte das
discusses, elas esto ficando divertidas!
Alguns conseguiram resolver pequeno desafio da aula passada \o/, para ver as solues visite o
frum =)
Na semana passada foi lanado o Python 3.0, tambm conhecido por a como "Python 3000" ou
"Py3k". Acontecerem algumas mudanas na linguagem, mas nada que v prejudicar o que j
aprendemos at aqui. Para saber tudo o que mudou voc pode ler a notcia aqui.
Como este lanamento ainda muito recente eu no vou usar a nova verso para as aulas, aqui eu
vou continuar com o Python 2.5, que o mais novo aqui no meu Debian Lenny.
Como muitos esto solicitando uma verso em PDF do curso eu resolvi atende-los! Ento a cada
certo nmero de aulas eu vou fazer um grande PDF com todas elas, com algumas alteraes e at
possveis correes.
Ah, eu tambm quero agradecer a todos que esto acompanhando o curso, est sendo uma
experincia muito boa para mim, espero que todos vocs estejam gostando tanto quanto eu \o/.
Ok, recados dados, hora de estudar!
Que caminho seguir?

Tudo o que fizemos at agora foram scripts com apenas um caminho a ser seguido, mas agora
vamos comear a ver como dar mais opes aos programas, por isso vamos ver as estruturas de
controle. Essas estruturas so bem simples tudo o que voc tem que saber so trs palavrinhas: "Se",
"Enquanto" e "Para". Tudo bem que temos que saber estas palavras em ingls, mas no so
complicadas, vamos treinar? "Se" = "If", "Enquanto" = "While" e "Para" = "For".
Mas antes disso precisamos conhecer os operadores que fazem as estruturas de controle funcionar:
== : o operador de igualdade, se x igual a y assim: se x == y.
>= : Maior ou igual, se x maior ou igual a y assim: se x >= y.
<= : Menor ou igual, se x menor ou igual a y assim: se x <= y.
!= : Diferente, se x diferente de y assim: se x != y.

22

A condicional "if"

Ento vamos comear com o "Se", que muito conhecido na maioria das linguagens de
programao como "if". O "if" funciona assim: "Se certa condio for verdadeira ento faa tal
coisa, caso no seja faa essa outra coisa".
A construo do "if" em Python bem simples, vejam estes exemplos:
#!/usr/bin/env python
a = 10
if a < 20:
print("menor que vinte")
else:
print("maior ou igual a vinte")

Vejam este outro exemplo:


#!/usr/bin/env python
sexo = 'f'
if sexo == 'm':
print('masculino')
elif sexo == 'f':
print('feminino')
else:
print('indefinido')

Ento? Simples? Algo que eu acho interessante no Python que ele tenta parecer, s vezes, com
uma linguagem humana, e no de mquina, sim, sim, vejam este ltimo exemplo, o uso de "dois
pontos" para indicar o que fazer muito comum, vejam este exemplo:
Viram s? Acabei de usar os "dois pontos" para indicar o que viria a seguir, legal n?
Agora vou explicar o que casa om dos cdigos fazem: (usei os "dois pontos" de novo hehe)
O primeiro bem simples, a instruo "if" uma pergunta "se", ele funciona assim, se a sentena a
seguir for verdadeira ele executa o prximo bloco de cdigo identado. Neste caso apenas a funo
print() est identada, ento somente ela seria executada. A instruo "else" significa "seno" e
opcional, ela diz o seguinte, "seno, ento faa o prximo bloco identado.
O segundo exemplo bem parecido com o primeiro, a diferena que ele tem uma instruo "elif",
o "elif" um "else" e um "if" ao mesmo tempo, se ns usarmos o portugus para falar este cdigo
ele seria mais ou menos assim: "Se a varivel sexo for igual a 'm' ento mostra 'masculino', seno se
a varivel sexo for igual a 'f' ento mostra 'feminino', seno mostra 'indefinido'". Ok, talvez usar o
"seno" e o "se" juntos fique meio confuso, mas mesmo assim acredito que no seja to complicado
de entender.
Mas voc tambm pode fazer uma coisa que conhecida por a como "if aninhado", que
simplesmente um conjunto de "ifs" um dentro do outro. Para fazer este exemplo eu preciso falar
primeiro sobre o mdulo da diviso para vocs. ( um pequeno desvio na aula de hoje, mas leiam
com ateno!)

23

Mdulo da Diviso

O mdulo de uma diviso o que sobra dela. Por exemplo, 2 / 2 o mdulo zero, j que no sobre
nada, em 10 / 5 a mesma coisa, o resultado da diviso 2 e no "resto". J em 10 / 3 o resultado
inteiro 3, e o mdulo 1. Com isso podemos concluir que sempre que o mdulo de uma diviso
zero por que o primeiro nmero era divisvel pelo segundo. No Python o mdulo feito usando o
caractere de porcentagem "%". Olhem o cdigo abaixo (exemplo que no funciona no Python3):
#!/usr/bin/env python
# -*- coding: utf-8 -*a = 7
modulo = a % 2
print("O resto da diviso "),
print(modulo) # imprime: o resto da diviso 1

Agora vamos voltar aos "ifs" aninhados.


Ifs Aninhados

Tudo bem, eu poderia ter usado um exemplo sem mdulos de diviso, mas pelo menos assim vocs
j prendem o que isso =) Vamos l!
Neste exemplo eu quero saber se um nmero par e divisvel por 5, ou seja temos duas condies
para verificar, o que indica que usaremos duas vezes a instruo "if". Vamos l?
Primeiro passo: Saber se o nmero "par". Esta uma tarefa bem simples, para sabermos se um
nmero par basta ver o resto da diviso por 2, se for zero ento par.
Segundo passo: Se o nmero for par ento tambm verificamos se ele divisvel por 5. Isso tambm
simples, se o resto da diviso por 5 for zero ento ele divisivel por 5.
Mo na massa! Vamos fazer o cdigo:
#!/usr/bin/env python
# -*- coding: utf-8 -*n = 10
if n % 2 == 0 :
if n % 5 == 0 :
print(n),
print(" par e divisvel por 5")

Pronto, ns definimos a varivel "n" com o valor 10, verificamos se o resto da diviso por 2 zero
(ento par), se for zero mesmo ento verificamos se o resto da diviso por 5 zero tambm, se
esta segunda condio tambm for verdadeira ento ns mostramos uma mensagem. E assim que
colocamos um "if" dentro do outro, percebam que a verificao da diviso por 5 s vai acontecer se
a condio da diviso por 2 for verdadeira.
Agora vamos conhecer o prximo tpico:
O lao "while"

Bom o while o chamado "enquanto", ele chamado de "lao" por que repete seu contedo
enquanto uma condio for verdadeira. Vamos fazer um exemplo que mostra os nmeros de 1 at
20:
24

#!/usr/bin/env python
# -*- coding: utf-8 -*n = 1
while n <= 20 :
print(n)
n = n + 1

Acho que o exemplo fala por si mesmo, mas vamos verificar... Nele definida a varivel 'n' com o
valor '1', ento eu uso o "while" para dizer que o prximo bloco deve ser executando "enquanto 'n'
for menor ou igual a 20", ai dentro do bloco exibido o valor de 'n' e ento somado 1 ao seu valor
atual. muito importante somarmos 1 'n', se no fizermos isso o lao "while" ser executado
indeterminadamente, isso um erro de programao tambm conhecido como "loop infinito" (loop
pode ser considerado como lao em ingls). Estes loops infinitos so uma beleza para travar
programas =)
Vamos usar um outro exemplo, dessa vez usando o "while" e o "if". Agora o programinha ir exibir
somente os mltiplos de 5 entre 1 e 30:
#!/usr/bin/env python
# -*- coding: utf-8 -*n = 1
while n <= 30 :
if n % 5 == 0:
print(n)
n = n + 1

Vejamos o que o programa faz... 'n' definida com o valor 1, ento criado um lao que ser
repetido enquanto 'n' for menor ou igual a 30, ento verificado se 'n' divisvel 5, se sim o valor
de 'n' exibido na tela, depois do bloco do "if" somado 1 'n'. Simples n?
Bom pessoal o "para" ou "for" em Python um pouco diferente das outras linguagens e exige que
conheamos as arrays, coisa que ainda no vimos, por isso a prxima aula ser para falarmos de
arrays e o controle "for".
Lio de Casa!

Conhecendo estas estruturas de controle j conseguiremos fazer uns exerccios mais legais =) Ento
vamos eles:
1 - Mostre todos os pares de 1 a 100 que so divisveis por 3.
2 - Ainda de 1 a 100 mostra apenas os mpares e divisveis por 13.
3 - De 1 a 50 mostre os pares e divisveis por 7, quando no for par diga isso, quando for par mas
no for divisvel por 7 diga tambm, algo assim:
1 no par
2 par, mas no divisvel por 7
...
14 par e divisvel por 7

25

...
Pronto, acho que s esses j d para passar uns minutos brincando =)

Curso de Python - Aula 8 - Mais sobre operadores e


conhecendo as listas e o "for"

Ol Alunos!

A aula da semana passada foi bem legal no? Mas o mais legal ainda foi o que foi feito pelo Andr
Matos e pelo Rodrigo Zhou, o Andr falou sobre os operadores AND e OR e o Rodrigo falou sobre
o NOT. Eles falaram isso no frum, aqui, e a primeira parte da aula de hoje totalmente baseada
nos textos deles ( quase um ctrl+c e ctrl+v hehe).

Eu fiquei muito feliz com essa interao que que vocs esto tento com as aulas, o frum est
ficando mais movimentado a cada dia, o que e timo pois assim teremos mais material de pesquisa

Bem, ento vamos aos operadores AND, OR e NOT!

Assim como muitas outras linguagens de programao o Python tambm aceita os operadores
especiais AND, OR e NOT. Vamos trocar isso em midos... O IF reconhece apenas valores False e
True. False representado pelo 0 (zero), None e False, enquanto o True representado por True,
1 (um) ou qualquer outro valor (strings, int, floats que tenham algum valor, menos False). Quando,
no IF ou em outras estruturas de controle, executamos, por exemplo, 10 % 2 == 0, na verdade, esse
trecho de cdigo ir retornar True ou False, e o IF executar o cdigo correspondente.
Mas, chegando ao ponto importante, o Python reconhece tambm o AND e o OR. Ou seja, usando
vrios testes com os operadores, eles retornaro apenas um valor, False ou True. Melhor explicar
com exemplos.
O exemplo da aula anterior que mostrava se um nmero par e divisvel por 5 tambm poderia ser
escrito assim:
#!/usr/bin/env python
# -*- coding: utf-8 -*n = 10
if n % 2 == 0 and n % 5 == 0:
print("O nmero par e divisvel por 5")

26

Com isso economizamos uma linha e mostramos toda a nossa habilidade em programao =)

Mas deixa eu explicar... o AND um operador "E", ele exige que ambas as expresses sejam
verdadeiras, para facilitar ainda mais a visualizao dessas tais "expresses" vamos coloca uns
parenteses neste IF:

#!/usr/bin/env python
# -*- coding: utf-8 -*n = 10
if (n % 2 == 0) and (n % 5 == 0):
print("O nmero par e divisvel por 5")

Que tal agora? Ficou melhor para entender? Vejam a primeira expresso dentro dos parenteses (n
% 2 == 0), ela tem que retornar um valor verdadeiro (True) alm disso a segunda expresso (n %
5 == 0) TAMBM precisa ser verdadeira, afinal de contas estamos usando o operador "E" (AND).
Isso fica muito claro quando falamos este IF em portugus, "Se o mdulo da diviso por 2 for
zero E o mdulo da diviso por 5 for zero ento:", pode ser que voc se atrapalhe um pouco no
comeo, mas esses operadores so muito comuns em programao, ento melhor se acostumar
com eles, ok?

O operador OR (operador or or, sanduche che che :-P ) quer dizer OU, ou seja "OU um OU
outro". T vamos ver um exemplo:

#!/usr/bin/env python
# -*- coding: utf-8 -*cor_carro = "cinza"
if (cor_carro == "azul") or (cor_carro == "cinza"):
print("Ok, eu gosto desta cor")

Traduzindo: A cor do carro pode ser azul OU cinza, eu gosto das duas.

muito importante lembrar que esses operadores devem ser usados sempre em caixa baixa (and e
or) e no em caixa alta (AND e OR).

J o operador NOT o do contra gosta de negar a tudo e todos, revoltado que s ele... Se uma
expresso verdadeira ele diz que falsa e se falsa ele diz que verdadeira. Vamos ver um
exemplo:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

27

cor_carro = "amarelo"
if (not cor_carro == "azul"):
print("Ok, eu gosto desta cor")
else:
print("Eca! no gosto de azul!")

Desta vez estou dizendo que a cor pode ser qualquer uma menos azul. O cdigo diz isso "Se o
contrrio da expresso for verdadeiro ento...". Para ficar mais simples de ver que tal
colocarmos o NOT fora dos parenteses?

#!/usr/bin/env python
# -*- coding: utf-8 -*cor_carro = "amarelo"
if not (cor_carro == "azul"):
print("Ok, eu gosto desta cor")
else:
print("Eca! no gosto de azul!")

Que tal? A expresso (cor_carro == "azul") ser falsa j que a varivel cor_carro contm o texto
"amarelo" mas ali est o NOT para negar o resultado, lembrem-se que ele do contra, ento ele
vai dizer que a expresso verdadeira. Como o IF expressa sempre um resultado verdadeiro ento
ele ir usar o print que diz "Ok, eu gosto desta cor".

Bem, agora vamos s arrays, nosso ltimo passo antes de conhecer a estrutura de controle FOR.

Bem, a primeira coisa a saber sobre as arrays no Python que muito mais comum utilizarmos
listas, mas as arrays tambm existem e so bem poderosas. Mas vamos comear pelas listas. Vejam
este exemplo:

#!/usr/bin/env python
# -*- coding: utf-8 -*lista = ["pra", "uva", "ma"]
print(lista[0]) # mostra "pra"
print(lista[2]) # mostra "ma"
print(lista[-1]) # mostra "ma"
print(lista[-2]) # mostra "uva"

Bem simples no? Em Python bem fcil usar listas. Vejam que o primeiro elemento de uma lista
ser sempre o elemento zero. Algo bem legal tambm que podemos contar do ltimo para o
primeiro, neste caso o elemento "-1" o ltimo da lista, o "-2" o penltimo e assim por diante.
Ag0ra vejam como trocar um item e como adicionar mais itens:

#!/usr/bin/env python
# -*- coding: utf-8 -*lista = ["pra", "uva", "ma"]
# trocando um item: pra por banana

28

lista[0] = "banana"
#
# Para adicionar um elemento em uma lista
# meio chatinho =(
# Reparem que eu preciso repetir o ltimo item
# e s ento adicionar mais um
lista[2:3] = ["ma", "morango"]
print(lista[3]) # mostra "morango"
# mas eu poderia "automatizar" assim:
lista[len(lista):len(lista)+1] = [lista[-1],"pssego"]
print(lista[-1]) # mostra "pssego"

Bonito? eu tambm acho que no... Essas formas de adicionar itens so bem chatinhas, mas
quando conhecermos as arrays tudo ficar mais fcil.

Ento vamos ver como remover um item:

#!/usr/bin/env python
# -*- coding: utf-8 -*lista = ["pra", "uva", "ma"]
# remover um item: ma
lista[2:3] = []
print(lista) # mostra ['pra','uva']

Como vocs podem ver eu precisei dizer o tem a ser removido +1, por isso que eu usei [2:3], mas o
3, no existe nesta lista, mesmo assim o 2 foi removido.

Bem esta a forma bsica de se trabalhar com listas, as Arrays so bem parecidas mas oferecem
algumas funes a mais que quebram um galho, nela temos, por exemplo, funes para adicionar
novos itens e tambm para remover itens. Mas as Arrays vo ficar para a prxima aula, ahh tambm
vamos falar de listas multidimensionais!. Agora vamos falar um pouco sobre a estrutura de controle
"FOR".

Na verdade o FOR em Python um pouco diferente de outras linguagens onde geralmente se define
um valor inicial, um final e um contador para uma varivel. No Python o FOR usado junto com as
listas, desta forma:

#!/usr/bin/env python
# -*- coding: utf-8 -*lista = ["pra", "uva", "ma", "banana"]
for fruta in lista:
print(fruta)

Pois , o FOR isso, simples no? Ainda vamos falar bastante sobre o FOR, mas antes temos que
conhecer as arrays, que so o assunto da prxima aula =)
29

Lio de Casa

A lio de casa desta semana bem fcil eu quero duas listas, uma com 5 nomes de carros e a outra
com 5 cores, s o que eu quero que vocs faam associar cada carro a uma cor, tipo o carro 2 da
cor 2, assim:

O Gol azul
O Celta vermelho

Vocs podem usar qualquer coisa que j tenhamos aprendido e no somente o que est na aula de
hoje. Aproveitem que este , provavelmente, o ltimo exerccio no "modo easy". Ahh
provavelmente no ter aula na semana que vem, ento boas festas todos! Divirtam-se e curtam o
Natel e o Ano Novo =)

Curso de Python - Aula 9 - Mais sobre listas e um pouco de


"aleatoriedade"
Ol pessoal! Como foram de festas de fim de ano? Espero que bem =)

Na aula passada falamos um pouco sobre as listas em Python, mas lendo os comentrios e o frum e
revendo as aulas eu vi que deixei algumas coisas de fora e tambm falei algumas besteiras =( Bem,
mas como eu disse no comeo do curso eu tambm estou aprendendo, ento nesta aula vou corrigir
alguns "enganos" da aula anterior e mostrar mais alguns assuntos.

Ahh o Joo Paulo Farias, que eu no conheo, mas vi esta notcia no BR-Linux, tambm est
publicando aulas sobre Python, o blog dele aprendendocompython.blogspot.com, e eu recomendo
que vocs passem por l. Pelo que eu vi no site ele tem bastante experincia com a linguagem, e as
aulas so bem legais, ou seja acaba sendo uma nova fonte para vocs, alm das minhas aulas =)

Ento vamos s observaes sobre a aula anterior... S para deixar claro, no que os exemplos da
aula anterior estejam errados, o problema que eles so o "hard level", ento melhor partirmos
para o "easy level", no?

30

Primeiro vou falar mais sobre as listas, eu acredito que apenas com o cdigo abaixo e seus
comentrios j possvel ver que as listas no so to feias quanto eu havia falado:

#!/usr/bin/env python
# -*- coding: utf-8 -*# criando uma lista vazia
lista_vazia = []
# agora uma lista com itens
lista_itens = ["python", "php", "c++"]
# adicionando tens lista
lista_vazia.append("item1")
lista_vazia.append("item2")
# removendo um item de uma lista
lista_itens.remove("php")
# retorna e remove o ltimo tem da lista
ultimo = lista_itens.pop()
print(ultimo) # mostra "c++"
# inverte a ordem da lista
lista_vazia.reverse()
lista_vazia.append("item5")
lista_vazia.append("item3")
lista_vazia.append("item4")
lista_vazia.sort()

Viram como a operaes das listas pode ser bem mais simples? Agora deixa eu explicar o cdigo:

Nas linhas 4 e 6 so criadas duas listas, uma vazia e outra j com alguns elementos.

Nas linhas 8 e 9 so adicionados itens lista vazia, o mesmo procedimento pode ser usado em listas
com elementos.

Na linha 11 removido o primeiro elemento que casa com "php", caso tivesse mais de um elemento
"php" apenas o primeiro seria removido.

Na linha 13 temos uma funo bem interessante j que ela retorna e remove o ltimo item da lista,
neste caso o ltimo item "c++", ento a varivel "ultimo" recebe este valor, e logo aps ele
removido da lista.

31

Na linha 16 a ordem da lista invertida.

J na linha 20 a lista ordenada com a funo sort().

Agora vamos ver uma coisa bem legal: Como embaralhar listas em Python:

#!/usr/bin/env python
# -*- coding: utf-8 -*# importando o mdulo random
import random
# criando uma lista
lista = ["joo", "maria", "jos", "ana"]
# embaralhando a lista
random.shuffle(lista)
print(lista)

Como vocs podem ver eu usei o mdulo "random" do Python, este mdulo possui vrias funes
interessantes para gerar nmeros aleatrios, mas vamos falar mais dele mais para frente, ok?

Na linha 4 importado o mdulo random, assim como fizemos com o mdulo math umas aulas
atrs.

Na linha 6 criada uma lista com 4 elementos e na linha 8 usei a funo "shuffle()" do mdulo
random para embaralhar a lista. A linha 9 exibe a lista embaralhada.

Lio de casa

1 - Sorteio - Crie uma lista com o nome de 10 pessoas, embaralhe esta lista e sorteie uma pessoa,
depois embaralhe novamente e sorteie outra pessoa, lembrando que no poder ser a mesma pessoa
a ser sorteada.

2 - Mega Sena - Crie duas listas com nmeros de 0 a 9, embaralhe as listas e sorteie um nmero de
cada uma para formar uma dezena, repita a operao 5 vezes para sortear 5 dezenas, assim como na
mega sena. Caso a dezena caia como 00 (zero, zero) faa o sorteio dela novamente at sair outra
combinao. Depois disso exiba as dezenas sorteadas.

32

Curso de Python - Aula 10 - Entrada de dados e formatao


de strings

Ol alunos!

A aula de hoje vai comear um pouco diferente, vou mostrar o resultado do exerccio "mega sena"
da aula 9.

O exerccio no retrata exatamente a Mega Sena real, j que o nmero de dezenas menor e as
dezenas sorteadas vo at 99, mas o que vale a ideia, certo?

Resolvi colocar o exerccio aqui por que alguns me mandaram e-mail dizendo que estavam com
algumas dificuldades para encontrar a soluo. Ento aqui vai:

#!/usr/bin/env python
# -*- coding: utf-8 -*import random
num1 = ["0","1","2","3","4","5","6","7","8","9"]
num2 = ["0","1","2","3","4","5","6","7","8","9"]
#random.shuffle(num2)
sorteados = "Dezenas sorteadas: "
i = 0
while i < 5:
dezena = "00"
while dezena == "00":
random.shuffle(num1)
random.shuffle(num2)
dezena = num1[0] + num2[0]
sorteados += dezena + " "
i += 1
print(sorteados)

Vejam que esta apenas uma das maneiras de resolver o problema. Alguns alunos fizeram de
formas diferentes que tambm do certo, e alguns at utilizaram funes que eu nem mostrei na na
aula, mas que serviram muito bem.

Na linha 3 importado o mdulo random, que onde est a funo shuffle() que a responsvel
por "misturar as bolas com os nmeros". Nas linhas 4 e 5 so definidas duas listas com os nmeros

33

em formato de texto, talvez seja melhor trabalhar com nmeros mesmo, mas eu achei que assim
ficou simples para juntar os nmeros e fazer as dezenas.

Na linha 6 eu comeo a escrever o texto das dezenas sorteadas e na linha 7 eu inicio um contador
para o nmero de dezenas sorteadas. J na linha 8 comea o primeiro lao do programa, que vai
fazer o sorteio se repetir at termos 5 dezenas

Na linha 9 eu j defini a dezena como "00" (zero zero) e ento vem mais um lao que deve se
repetir enquanto a dezena for "00".

Ento vem a funo shuffle() que embaralha as listas com os nmeros, e logo depois a varivel
"dezena" rebe o valor do primeiro elemento de cada lista. Aqui acaba o lao, caso a dezena seja
"00" ele vai se repetir.

Acabando o lao na linha 14 adicionamos o valor sorteado varivel "sorteados" e adicionamos 1


ao contador. Isso vai se repetir at o contador alcanar o nmero 5. Quando o lao acaba exibida a
varivel "sorteados" com as dezenas sorteadas.

Se vocs olharem bem para o cdigo e at mesmo o executarem algumas vezes vo ver que podem
cair dezenas iguais, o que no bom, certo? Mas isso eu vou deixar para vocs resolverem =)

Bem, tem um assunto que em breve vamos tratar, o desenvolvimento de programas com GUIs em
Python, para isso vamos usar o PyGTK. Isso ainda vai demorar um pouquinho, mas para quem
quiser ver mais ou menos como funciona s acompanhar o GeSpeak. O GeSpeak um front end
para o espeak, um sintetizador de voz para Linux. O GeSpeak j passou por algumas grandes
mudanas de linguagem, mas acredito que o Python veio para ficar =) Ento se voc quiser conferir
como desenvolvido um programa em PyGTK s fazer o checkout da verso de desenvolvimento
do GeSpeak, como ele est no Google Code ento isto bem simples de ser feito, basta ter o
subversion instalado e rodar este comando (em apenas uma linha):

svn checkout http://gespeak.googlecode.com/svn/branches/python/ gespeak-read-only

Isto vai criar um diretrio chamado gespeak-read-only, dentro dele esto os arquivos .py, para rodar
o GeSpeak use o executvel gespeak:

34

./gespeak

O GeSpeak desenvolvido por mim e pelo Walter Cruz, e se tiver mais algum interessado em
participar do projeto s falar comigo =)

Agora chega de enrolao e vamos aula de hoje!

Hora da aula!

A aula de hoje uma base para a aula da semana que vem. Hoje veremos a entrada de dados do
usurio e na semana que vem vamos fazer nossas primeiras funes, ou seja j estamos comeando
a deixar a fase do script, que uma sequencia de instrues que executada sem interveno do
usurio e vamos entrar na fase dos programas mais complexos que dependem do usurio para
funcionar.

A funo que vamos usar para receber os dados dos usurios a raw_input(). Esta funo l dados
na entrada padro, que o teclado na maioria das vezes, e depois retorna estes dados. A forma mais
simples de armazenar os dados fornecidos pelo usurio assim:

#!/usr/bin/python
# -*- coding: utf-8 -*nome = raw_input("Digite o seu nome: ")
print(nome)

Neste caso a varivel "nome" ir armazenar o que for digitado pelo usurio e depois ser exibida na
tela.

Voc tambm pode usar funes de converso para os dados fornecidos. Vamos dizer que voc
queira nmeros inteiros ou reais:

#!/usr/bin/python
# -*- coding: utf-8 -*inteiro = int(raw_input("Um nmero inteiro: "))
real = float(raw_input("Um nmero real: "))

35

Simples, no?

Agora vamos juntar o que vimos nas outras aulas com estas funes de entradas de dados. Vou
fazer um pequeno exerccio aqui, a ideia fazer um programa para um colecionador de carros.
Primeiro o sujeito vai dizer quantos carros ele tem, depois vai colocar o nome dos carros e por
ltimo a placa de cada um. Vamos ver como fica este cdigo? Olha s:

#!/usr/bin/python
# -*- coding: utf-8 -*print("Bem vindo ao Colecionador de Carros 10.000 Plus!")
nome = raw_input("Qual o seu nome? ")
print("Ol " + nome + ", vamos sua coleo?")
quantidade = int(raw_input("Quantos carros o senhor tem? "))
i = 1
carros = []
placas = []
while i <= quantidade:
carros.append(raw_input("Carro %i: " % i))
i += 1
print("Agora as placas...")
i = 0
while i < quantidade:
placas.append(raw_input("Placa do %s: " % carros[i]))
i += 1
print("Hora de mostrar a sua coleo!")
i = 0
while i < quantidade:
print("O %s tem placas %s" %(carros[i], placas[i]))
i += 1
print("Ento isso, tchau!")

A nica novidade aqui a forma como eu exibi os valores dentro das frases, usando o %. O nome
disso "formatar strings", e um recurso muito til. Ele funciona assim, string para formatar
esquerda, porcentagem, e valores direita:

"Aqui %s includo um texto" % "ser"

Resultado: "Aqui ser includo um texto"

"Agora %s dois %s" % ("sero", "textos")

36

Resultado: "Agora sero dois textos"

Quando apenas um valor for inserido na string basta coloca-lo aps o %, mas quando mais de um
valor for adicionado necessrio coloca-los dentro de uma tupla, que o caso do segundo exemplo.

Para inserir os valores voc pode usar esta tabela simplificada:

37

Expresso

Significado

%s

Uma string

%c

Caractere

%d

Decimal, inteiro

%f

Real (float)

%%

Um '%'

A ltima opo interessante, assim que se mostra um smbolo % em uma string em Python.

Lio de casa

1) Sala de aula: Faa um programa que pergunte o nmero de alunos em uma sala de aula, depois
pergunte o nome de cada um, aps isso ele deve pedir 4 notas de cada aluno e fazer a mdia entre
elas, se a mdia for maior que 6 o aluno est aprovado, seno reprova. No fim deve ser exibida uma
tabela assim:

Nome do aluno - nota1, nota2, nota3, nota4 - media - aprovado/reprovado

Hoje s esse exerccio =) Divertido ele hehe.

Curso de Python - Aula 11 - Funes e exerccios

Ol pessoal!

A aula de hoje est sendo escrita diretamente da Campus Party Brasil 2009 =) O Evento est no
fim... Pois , cheguei no fim hehe.

Ento vamos ao Python!


38

O exerccio da aula anterior foi muito legal, as solues enviadas pelo pessoal ficaram bem legais,
para conferir algumas respostas visite a pgina deste exerccio no nosso frum.

Hoje vamos ver as funes, que so trechos de cdigo que podem ser "invocados" em outras partes
do programa. Ns j estamos usando as funes do Python desde a primeira aula, um exemplo a
funo print() que exibe algo na sada padro. As funes podem ou no receber parmetros, ainda
na funo print() podemos citar como exemplo o argumento que ela recebe que um texto.

No cdigo abaixo d para ver uns exemplo de funes, claro que estas funes so bem simples e
nem precisariam existir, mas servem como um bom exemplo.

#!/usr/bin/env python
# -*- coding: utf-8 -*# Funo simples e sem parmetros:
def ola_mundo():
print("Ol Mundo!")
# Agora uma funo com um parmetro
def ola_pessoa(nome):
print("Ol " + nome + ", como vai voc?")
# Agora uma funo com dois parmetros
def ola_pessoa_blog(nome, blog):
print("O blog " + blog + " pertence " + nome)
# Chamando as funes
ola_mundo()
meu_nome = "InFog"
ola_pessoa(meu_nome)
meu_blog = "http://evaldojunior.com.br/blog"
ola_pessoa_blog(meu_nome, meu_blog)

Vejam esta ltima funo, ela tem dois parmetros, mas eles no precisam ser colocados na ordem
em que foram definidos na funo, voc pode fazer isso tambm:

#!/usr/bin/env python
# -*- coding: utf-8 -*# Invertendo os parmetros
def ola_pessoa_blog(nome, blog):
print("O blog " + blog + " pertence " + nome)
meu_nome = "InFog"
meu_blog = "http://evaldojunior.com.br/blog"
ola_pessoa_blog(blog=meu_blog, nome=meu_nome)

Como vocs podem ver basta passar o nome dos parmetros seguido por seus valores. Esta uma
forma que eu costumo fazer mesmo quando no para "inverter" os parmetros, eu acho isso legal
39

por que fica mais simples de ler o cdigo, fica um pouco maior, mas qual das opes abaixo fica
melhor para ler?

#!/usr/bin/env python
# -*- coding: utf-8 -*# Funo simples e sem parmetros:
# chamando a mesma funo de formas diferentes
rolar_dados(8, 3, 2)
rolar_dados(faces=8, sorteio=3, excluir=2)

Vejam que as duas linhas chamam a mesma funo, mas a de baixo est bem melhor explicada.

Lembram que eu falei sobre as docstrings na primeira aula? Pois aqui elas se encaixam muito bem,
vejam o exemplo:

#!/usr/bin/env python
# -*- coding: utf-8 -*# Funo simples e sem parmetros:
# chamando a mesma funo de formas diferentes
def rolar_dados(faces, sorteio, excluir)
"""
Esta funo rola um dado e retorna o
nmero sorteado, voc pode dizer quantos
dados sero rolados e quantos resultados
devem ser ignorados (os de menor valor)
Exemplo:
dado = rolar_dados(faces=4, sorteio=5, excluir=2)
Isso retornaria os 3 melhores resultados jogando
um dado de 4 faces na forma de uma lista
"""
# ... cdigo da funo ...
rolar_dados(faces=8, sorteio=3, excluir=2)

Com alguns interpretadores, como ipython, possvel ver esta documentao. Isso facilita muito a
vida dos desenvolvedores. Se voc ainda no tem o costume de documentar o seu cdigo eu sugiro
que comece agora!

Bem, por hoje acho que j chega, vamos aos exerccios, treinando que se aprende!

Lio de casa

40

Faa a funo rolar_dados() do exemplo acima, o programa deve perguntar para o usurio todos os
dados (faces, sorteio e excluir), lembrando que "excluir" tem que ser, pelo menos, um nmero
menor que "sorteio".

Curso de Python - Aula 12 - Manipulando Arquivos


Ol alunos!

Semana passada no teve aula, eu estava viajando e no consegui deixar a aula pronta, mas agora
voltamos programao normal!

O pessoal ficou com algumas dvidas sobre o exerccio dos dados, mas em geral conseguiu
resolver.

Hoje vamos tratar sobre a manipulao bsica de arquivos. Vamos aprender a abrir um arquivo,
gravar informaes nele e tambm ler informaes dele.

Primeiro vamos ver como adicionar algum texto um arquivo:

#!/usr/bin/env python
# -*- coding: utf-8 -*arq = open('/tmp/lista.txt', 'w')
texto = """
Lista de Alunos
--Joo da Silva
Jos Lima
Maria das Dores
"""
arq.write(texto)
arq.close()

bem simples, no? Na linha 3 aberto o arquivo "/tmp/lista.txt" em modo de gravao, caso o
arquivo no exista ele ser criado. Na quarta linha definida a varivel "texto" que, na linha 11,
includa ao arquivo "/tmp/lista.txt", que corresponde varivel "arq". Na linha 12 o arquivo
fechado e ento o programa termina. Aqui eu fiz um cat no arquivo e ele apareceu com as
informaes que estavam na varivel "texto".

41

Pessoal, entendam que esta uma das maneiras mais simples de guardar informaes, todos os
programas que fizemos at agora perdem as informaes assim que terminados.

Tambm possvel escrever em arquivos usando listas no lugar de variveis apenas em texto:

#!/usr/bin/env python
# -*- coding: utf-8 -*arq = open('/tmp/lista.txt', 'w')
texto = []
texto.append('Lista de Alunos\n')
texto.append('---\n')
texto.append('Joo da Silva\n')
texto.append('Jos Lima\n')
texto.append('Maria das Dores')
arq.writelines(texto)
arq.close()

Isto vai gerar o mesmo arquivo que o exemplo anterior, a diferena que deu mais trabalho, mas
dependendo da situao este modo pode ser melhor.

Certo, agora que j sabemos como adicionar informaes vamos aprender a ler informaes:

#!/usr/bin/env python
# -*- coding: utf-8 -*arq = open('/tmp/lista.txt', 'r')
texto = arq.read()
print(texto)
arq.close()

A funo read() l o arquivo todo de uma vez para uma varivel. Isso pode ser legal em casos como
este, em que eu quero apenas exibir a varivel. Mas vejam este outro exemplo:

#!/usr/bin/env python
# -*- coding: utf-8 -*arq = open('/tmp/lista.txt', 'r')
texto = arq.readlines()
for linha in texto :
print(linha)
arq.close()

A funo readlines() retorna cada linha do arquivo como um elemento de uma lista. Tudo o que j
sabemos sobre a manipulao de listas pode ser usado aqui =)

42

Lio de Casa

Usando apenas os modos de abertura de arquivos mostrados nesta aula ('w' e 'r') faa o seguinte:

1) Grave esta lista em um arquivo (Copie para o seu cdigo para isso):

Gol
Uno
Palio
EcoSport
Clio
Strada
Golf
2) Inverta a ordem da lista e grave em um segundo arquivo.

3) Ordene a lista alfabeticamente em um terceiro arquivo.

4) Com a lista organizada faa a sua numerao em um quarto arquivo, assim:

1
2 - EcoSport...

Clio

Boa sorte!

Curso de Python - Aula 13 - Passando Argumentos Via


Terminal
Ol queridos alunos!

43

Espero que todos estejam gostando tanto destas aulas quanto eu! Graas vocs eu tambm estou
aprendendo bastante sobre a linguagem, muitos comentrios que vocs fazem me ajudam a perceber
novos horizontes pythonescos. Ento relaxem, peguem um caf e curtam as aulas!

Ahh, uma dica que foi dada pelo Jamilson no frum a Lista de Exerccios do Python Brasil. Eu
ainda no fiz os exerccios, mas assim que der um tempinho farei!

Outra coisinha... Nesta semana eu resolvi meu primeiro problema real com Python! Fiquei muito
feliz por ter usado um pouco mais de 40 linhas, incluindo comentrios, para fazer um script de
converso de arquivos de logs para arquivos html! Ficou supimpa! hehe. Bem chega de recados e
vamos aula de hoje!

Ns j falamos sobre como receber dados do usurio usando a funo raw_input() e tambm j
sabemos ler arquivos texto, mas agora vamos aprender a passar parmetros para nossos programas
via linha de comando! Para isso vamos usar o mdulo "sys" do Python. Este mdulo nos permite
usar algumas informaes do sistema, recomendo que vocs o estudem mais a fundo, vale a pena :-)

Bem o que eu quero fazer o seguinte, eu quero, por exemplo, chamar um programa dessa forma,
no terminal:

$ programa.py arquivo_entrada.txt arquivo_saida.txt

Neste exemplo estariamos passando dois parmetros para o programa, um arquivo de entrada e um
arquivo de sada, ambos arquivos de texto.

Para fazer nossos programas entenderem esses parmetros vamos utilizar a lista argv, do mdulo
sys, assim:

#!/usr/bin/env python
# -*- coding: utf-8 -*import sys
for param in sys.argv :
print(param)

Ou seja, cada item da lista sys.argv um parmetro passado para o programa, vejam este exemplo:

44

$
./param.py
oi
este

um
teste

./param.py

oi

este

um

teste

Como vocs podem ver o primeiro parmetro sempre o nome do programa que foi chamado na
linha de comando, neste caso o programa param.py, para pegarmos apenas os parmetros
poderiamos fazer algo assim:

#!/usr/bin/env python
# -*- coding: utf-8 -*import sys
param = sys.argv[1:]

Neste caso a lista de parmetros seria armazenada na varivel param, ou seja, tudo coisa bem
simples =)

Bem, por hoje s. Como vocs podem reparar as aulas esto ficando mais curtas, mas vou exigir
um pouco mais de vocs nos exerccios.

Lio de Casa!

Hoje vou querer o seguinte, vocs precisam baixar este arquivo, que apenas um ls do meu /etc,
vocs vo fazer um programa que receba o nome de um arquivo via parmetro na linha de
comando, no caso este arquivo, e o transforme em html. Na verdade eu quero uma tabela com trs
colunas mostrando todos os nomes de arquivos e diretrios que esto neste arquivo, algo assim:

45

arquivo1

arquivo2

arquivo3

arquivo4

arquivo5

arquivo6

S isso, o arquivo de sada deve ser ls_etc.html

Curso de Python - Aula 14 - Orientao Objetos

Ol alunos!

Depois da pausa para o carnaval estamos de volta! (No, eu no gosto de carnaval, mas aproveito o
feriado para descansar)

O curso de Python est bem legal, eu aprendi muito ensinando durante esse meses aqui no blog.
Para vocs terem uma ideia eu consegui migrar o GeSpeak para PyGTK, e eu garanto que foi bem
simples, tudo o que eu tive que fazer foi ter um pouco de pacincia e entender bem a referncia da
biblioteca no site dela. Se tem uma coisa que eu aprendi com Python que o cdigo no precisa ser
uma coisa de maluco para que funcione bem, Python deixa tudo muito simples e tem vrios
mdulos que adicionam muitas funcionalidades extras. Enfim, se voc est lendo isso por que j
deve ter visto as outras aulas e se voc est acompanhando o curso tambm j deve ter percebido
essa simplicidade. Agora chega de papo e vamos aula.

O conceito de classes, objetos e afins bem chatinho de entender no comeo, mas depois que se
entende difcil de querer trabalhar de outra forma. Este assunto bem genrico e tambm
suportado por vrias linguagens de programao, por isso no vou escrever sobre isso, em vez disso
vou usar o arsenal de informaes livres que temos na matrix grande rede chamada internet.
Comecem lendo este artigo da Wikipedia. Tentem entender os conceitos do que uma classe, um
atributo, um mtodo... Durante as prximas aulas vamos tratar deste assunto, ok?

Mas, como fazer uma classe em Python?

46

Vamos ver um exemplo de uma classe muito usada no ensino de orientao objetos, a classe
Aluno:

#!/usr/bin/env python
# -*- coding: utf-8 -*class Aluno:
__doc__ = """
Classe de estudo
"""
Nome = ''
Serie = 0
Notas = [0,0,0,0]
#
def __init__(self, Nome, Serie):
__doc__ = """
Instancia da classe Aluno
Parmetros
Nome: String com o nome do aluno
Serie: Integer com a classe do aluno (1 a 9)
"""
self.Nome = Nome
self.Serie = Serie
#
def pega_nome(self):
__doc__ = """
Esta funo retorna uma string com o nome do aluno
"""
return self.Nome
#
def define_nota(self, Semestre, Nota):
__doc__ = """
Esta funo serve para definir uma nota para um aluno
Parmetros
Semestre: Integer de 1 a 4
Nota: Float de 0 a 10
"""
self.Notas[Semestre] = Nota
#
def fecha_media(self):
__doc__ = """
Esta funo funo tira a mdia do aluno
e returna um float
"""
Notas = 0
Media = 0
i = 0
while (i < 4):
Notas += self.Notas[i]
i += 1
Media = Notas / 4
return Media
47

#
# Iniciando o programa
nome = str(raw_input("Nome do aluno: "))
serie = int(raw_input("Serie: "))
aluno = Aluno(Nome=nome, Serie=serie)
i = 0
while (i < 4):
nota = float(raw_input("Digite a %s nota: " % str(i+1)))
aluno.define_nota(Semestre=i, Nota=nota)
i += 1
print("O aluno %s terminou o ano com mdia %f" %
(aluno.pega_nome(),aluno.fecha_media()))

Vamos explicao da classe...

Esta classe Aluno possui trs atributos: Nome, Serie e Notas, uma string, um inteiro e uma lista. O
mtodo construtor da classe __init__() recebe o nome do aluno e tambm a srie que ele est. A
classe tambm tem o mtodo define_nota() que recebe o semestre e a nota, vejam que aqui o aluno
tem apenas uma nota geral e no por matria. As funes fecha_media() e pega_nome so funes
que retornam algum valor. Depois da definio da classe criamos uma instncia dela chamada
aluno, reparem que eu usei o mesmo nome mas com letras minsculas, isso no obrigatrio, viu?
Voc pode dar qualquer nome s instncias de uma classe, que tambm so conhecidas como
objetos.

Classes nos ajudam muito em muitas tarefas, nesse caso poderiamos ter, por exemplo, trinta objetos
da classe Aluno, cada um com as informaes de um aluno.

Lio de Casa!

Mais uma aula curta essa, no? Mas vamos discutir esse assunto ainda por algum tempo, enquanto
isso vamos lio de casa!

Se preparem, essa vai ser pesadinha! Quero que vocs construam uma classe chamada Aluno
(podem aproveitar o cdigo dessa aula), mas ela deve conter as notas de portugus, matemtica e
cincias. Para cada matria so quatro notas. Ento o programa comea e pede o nome do aluno e a
classe dele, depois pede as quatro notas de cada matria, depois disso ele tira as mdias e monta um
boletim em HTML (uma tabela mesmo), mostrando as notas abaixo de 5 na cor vermelha, alm das
mdias. Se o aluno tiver at duas mdias vermelhas o programa diz que ele est de recuperao, se
tiver trs vermelhas ele est reprovado!

48

Boa sorte! Este est complicadinho heheheh, mas com o que eu ensinei at aqui vocs conseguem,
tenho certeza!

Curso de Python - Aula 15 - Mais sobre Orientao Objetos


Ol alunos!

Na aula passada vimos um bsico sobre orientao objetos, infelizmente apenas alguns alunos
continuam enviando as aulas... Pessoal, vocs no podem ter medo de resolver os problemas,
mesmo que parea muito difcil tentem, s assim se aprende mesmo. E caso tenham dvidas
procurem o frum ou postem comentrios aqui no blog. O importante no desistir, OK?

Nesta aula veremos como "proteger" atributos de uma classe.Este uma pergunta que foi feita pelo
Gustavo em comentrio na ltima aula. O Magnun deu uma breve explicao, tambm em
comentrio. Valeu Magnun!

Este tipo de proteo chamada de "atributos privados" e algo muito comum na orientao
objetos. neste caso os atributos ou mtodos privados de uma classe podem ser alterados ou
chamados somente por funes da prpria classe. O problema que o Python no exatamente
oferece essa "privacidade", mas existem convenes para isso, vejam no exemplo:
#!/usr/bin/env python
# -*- coding: utf-8 -*class Aluno:
__doc__ = """
Classe de estudo
"""
# Todos os atributos so privados...
__Nome = ''
__Serie = 0
__Notas = [0,0,0,0]
#
def __init__(self, Nome, Serie):
__doc__ = """
Instancia da classe Aluno
Parmetros
Nome: String com o nome do aluno
Serie: Integer com a classe do aluno (1 a 9)
"""
self.__Nome = Nome
self.__Serie = Serie
#
def pega_nome(self):
__doc__ = """
Esta funo retorna uma string com o nome do aluno
49

"""
return self.__Nome
#
def define_nota(self, Semestre, Nota):
__doc__ = """
Esta funo serve para definir uma nota para um aluno
Parmetros
Semestre: Integer de 1 a 4
Nota: Float de 0 a 10
"""
self.__Notas[Semestre] = Nota
#
def define_nome(self, Nome):
__doc__ = """
Funo para "renomear" o aluno
"""
self.__Nome = Nome
#
def fecha_media(self):
__doc__ = """
Esta funo funo tira a mdia do aluno
e returna um float
"""
Notas = 0
Media = 0
i = 0
while (i < 4):
Notas += self.__Notas[i]
i += 1
Media = Notas / 4
return Media
#
# Iniciando o programa
nome = str(raw_input("Nome do aluno: "))
serie = int(raw_input("Serie: "))
aluno = Aluno(Nome=nome, Serie=serie)
# A linha abaixo no vai alterar mais o nome do aluno
aluno.__Nome = "Jos Nascimento"
# Mas a linha abaixo altera
aluno.define_nome("Joo da Silva")
i = 0
while (i < 4):
nota = float(raw_input("Digite a %s nota: " % str(i+1)))
aluno.define_nota(Semestre=i, Nota=nota)
i += 1
print("O aluno %s terminou o ano com mdia %f" %
(aluno.pega_nome(),aluno.fecha_media()))

Como vocs podem ver agora o atributo "Nome" chamado de "__Nome", com isso o Python evita
que ele seja alterado fora da classe.

Propriedades

Tambm como dica do Magnun vou falar sobre as propriedades, que eu ainda no conhecia. Vamos
ao exemplo!

50

#!/usr/bin/env python
# -*- coding: utf-8 -*class Aluno:
__doc__ = """
Classe de estudo
"""
# Todos os atributos so privados...
__Nome = ''
__Serie = 0
__Notas = [0,0,0,0]
#
def __init__(self, Nome, Serie):
__doc__ = """
Instancia da classe Aluno
Parmetros
Nome: String com o nome do aluno
Serie: Integer com a classe do aluno (1 a 9)
"""
self.__Nome = Nome
self.__Serie = Serie
#
def pega_nome(self):
__doc__ = """
Esta funo retorna uma string com o nome do aluno
"""
return self.__Nome
#
def define_nota(self, Semestre, Nota):
__doc__ = """
Esta funo serve para definir uma nota para um aluno
Parmetros
Semestre: Integer de 1 a 4
Nota: Float de 0 a 10
"""
self.__Notas[Semestre] = Nota
#
def define_nome(self, Nome):
__doc__ = """
Funo para "renomear" o aluno
"""
self.__Nome = Nome
#
def fecha_media(self):
__doc__ = """
Esta funo funo tira a mdia do aluno
e returna um float
"""
Notas = 0
Media = 0
i = 0
while (i < 4):
Notas += self.__Notas[i]
i += 1
Media = Notas / 4
return Media
#
def pega_dados(self):
__doc__ = """
Esta funo retorna os dados do aluno, nome e srie
"""
return "Aluno: %s\nSrie: %i" % (self.__Nome, self.__Serie)
#
dados = property(pega_dados)
51

# Iniciando o programa
nome = str(raw_input("Nome do aluno: "))
serie = int(raw_input("Serie: "))
aluno = Aluno(Nome=nome, Serie=serie)
# Mostrando os dados do aluno...
print(aluno.dados)
i = 0
while (i < 4):
nota = float(raw_input("Digite a %s nota: " % str(i+1)))
aluno.define_nota(Semestre=i, Nota=nota)
i += 1
print("O aluno %s terminou o ano com mdia %f" %
(aluno.pega_nome(),aluno.fecha_media())

Vejam que a propriedade "dados" (linha 63) chama uma funo, isso muito til, pois, neste caso,
nos poupa chamar uma funo. Na verdade as propriedades tem mais usabilidade do que apenas
isso, ento fica a dica de estudo para vocs.

Acho que na prxima aula j podemos ver um pouco de GTK, o que conhecemos sobre classes at
agora j o suficiente.

Lio de Casa!

O exerccio de hoje vai fazer vocs pensarem bastante, lembram do exerccio da ltima aula? Pois
ento, eu quero que vocs refaam este exerccio, mas desta vez com os atributos privados, vocs
podem usar propriedades se quiserem, mas no so obrigados. Mas desta vez o programa deve ter
um pequeno menu que pergunta o que o usurio quer fazer, as opes so: "opo 1: cadastrar
aluno", "opo 2: definir notas", "opo 3: ver boletim", "opo 4: ver lista de alunos". Ou seja, vou
poder cadastrar quantos alunos eu quiser com a opo 1. Na opo 2 o programa deve mostrar a
lista de alunos e perguntar para qual que sero definidas as notas. Na opo a mesma coisa, mas ao
escolher um aluno o boletim dele dever ser exibido. E a opo 4 s mostra uma lista simples, com
todos os alunos.

Boa sorte! Este est bem divertido heheh.

Curso de Python - Aula 16 - Iniciando no PyGTK


Ol alunos!

Como vocs podem ver o blog est de visual novo! Uhul! Ainda tenho que arrumar uns detalhes,
mas no geral acho que est muito legal =)

52

Bem o exerccio da ltima aula foi bem pesadinho, o pessoal teve que suar para resolver hehe, ento
acredito que aprenderam bastante sobre Python, teve at gente dizendo que passou a noite fazendo
os exerccios e com isso aprendeu bestante. Eu fico muito feliz de ver esse tipo de coisa
acontecendo, acredito que estou estimulando vocs, alunos e leitores, a aprender e crescer mais.
Ento vamos em frente!

Como alguns devem ter visto eu lancei o GeSpeak 0.3 nesta semana, ele um bom exemplo do que
veremos hoje, as aplicaes em PyGTK. O PyGTK usa o GTK+ para oferecer um conjunto de
elementos grficos para desenvolvimento de interfaces com o usurio. O PyGTK multiplataforma
(*nix e Windows) o que significa que seu cdigo pode rodar sem alteraes praticamente em
qualquer canto. O que no o caso do GeSpeak, j que ele utiliza comandos do Linux para algumas
tarefas.

Ento vamos comear com o bsico, janelas e botes.

O cdigo abaixo cria uma janela com um boto, no h, ainda qualquer tipo de ao para o boto:

#!/usr/bin/env python
import pygtk
pygtk.require('2.0')
import gtk
janela = gtk.Window(gtk.WINDOW_TOPLEVEL)
botao = gtk.Button("Clique aqui...")
janela.add(botao)
janela.show_all()
gtk.main()

Pronto, um programinha bem simples. Ele s exibe o boto, mas vamos entender como isso
funciona...

Na segunda linha estamos importando o mdulo PyGTK.

Na terceira linha ns usamos a funo require do PyGTK para ter certeza que estamos com um
verso da famlia 2.x.

A quarta linha responsvel por importar o mdulo GTK.


53

Na quinta linha criado um objeto da classe Window do mdulo gtk.

Na sexta linha criado um boto usando a classe Button.

Na stima linha adicionamos o boto janela usando a funo add() da classe Window.

A oitava linha serve para exibir a janela e tudo o que est dentro dela, com a funo show_all().

E na nona linha chamamos o looping principal do GTK com a funo main().

Agora vou mostrar um exemplo em que o clique do boto dispara uma funo que exibir "Hello
World" no terminal:

#!/usr/bin/env python
import pygtk
#pygtk.require('2.0')
import gtk
def ola_mundo(widget):
print "Hello World"
janela = gtk.Window(gtk.WINDOW_TOPLEVEL)
botao = gtk.Button("Clique aqui...")
botao.connect('clicked', ola_mundo)
janela.add(botao)
janela.show_all()
gtk.main()

Vejam que agora a funo connect() usada para "conectar" o sinal "clicked" do boto funo
ola_mundo().

Bem por enquanto isso. Na semana que vem teremos mais, recomendo que todos leia o artigo
"Mantendo a Sanidade com o Glade", pois no comeo dele explicado como o GTK trabalha, leiam
sobre os sinais e tambm a parte "Explodindo Coisas".

54

Lio de Casa

A lio de casa de hoje muito simples, mas vocs vo precisar usar a referncia do PyGTK para
fazer. Eu s quero uma janela com um boto escrito "Clique aqui", e quando a pessoa clicar o texto
do boto deve mudar para "Clicado". Boa sorte =)

Curso de Python - Aula 17 - Mais sobre o PyGTK


Ol alunos!

hoje vamos continuar falando sobre PyGTK. Na aula passada vimos uma pequena introduo ao
PyGTK, acredito que vocs no tenham encontrado muitas dificuldades com ele.

Pois bem, at agora fizemos uma janela com um boto, coisa simples, mas como eu fao para
adicionar mais botes? Ser que eu posso utilizar o mesmo mtodo que usei para o primeiro boto?
Usar a funo add() da classe gtk.Window?

Hum, agora a coisa comea a complicar um pouquinho pois teremos que usar as "Caixas", mais
precisamente as caixas verticais e horizontais, vejam o desenho abaixo, ele mostra o GeSpeak,
mostrando as tais caixas:

55

Bem, o desenho acima no est completo, o GeSpeak ainda tem um menu, mais SpinButtons e mais
uma Caixa Horizontal abaixo da primeira, mas serve como exemplo, vamos s explicaes:

Em vermelho est a janela em s, gtk.Window, este widget suporta apenas mais UM widget
acoplado ele. E este o motivo que nos faz usar, neste caso, uma caixa vertical, gtk.VBox, em
verde, este widget j suporta quantos widgets precisarmos, vejam que dentro dele temos, em roxo,
duas caixas horizontais, gtk.HBox, e tambm um gtk.TextView. O mesmo acontece com as caixas
horinzontais, elas suportam vrios widgets.

No comeo isso parece um pouco complicado, mas bem simples. Vamos ver um cdigo de
exemplo:

#!/usr/bin/env python
# -*- coding: utf-8 -*import pygtk
import gtk
def ola_mundo(widget):
print "Hello World"
# criando a janela
janela = gtk.Window(gtk.WINDOW_TOPLEVEL)
# agora uma caixa vertical
caixa_v = gtk.VBox()
# agora um label e uma caixa de entrada
label1 = gtk.Label("Sou um label")
entrada = gtk.Entry()
# agora uma caixa horizontal, para o label e entry
caixa_h = gtk.HBox()
# adicionando o label e o entry caixa horizontal
caixa_h.pack_start(label1, expand=False, fill=True)
caixa_h.pack_start(entrada, expand=False, fill=True)
# agora a caixa horizontal adicionada ciaxa vertical
caixa_v.pack_start(caixa_h, expand=False, fill=True)
# ufa, quase l
# Agora um boto
botao = gtk.Button("Clique aqui")
botao.connect('clicked', ola_mundo)
# agora o boto adicionado caixa vertical
caixa_v.pack_start(botao, expand=False, fill=True)
# e finalmente adicionamos a caixa vertical janela
janela.add(caixa_v)
janela.show_all()
gtk.main()

O cdigo est bem comentado, vejam a janela que ele gerou:

56

Simples, no? As opes expand e fill fazem referncia ao preenchimento que o widget ter na
janela, se ele ir se expandir junto com a janela ou no, etc.

E esta foi a nossa aula de hoje!

Lio de Casa!

A lio de casa para hoje : "Faa o cdigo para montar a janela do GeSpeak mostrado na figura ali
em cima, est bem colorido e fcil de acompanhar =) Boa sorte!

Curso de Python - Aula 18 - Refrescando a memria e


praticando.
Ol pessoal!

A aula de hoje no bem uma aula, mas sim um desafio muito interessante para vocs. No site do
Python Brasil existe uma Lista de Exerccios, e a primeira leva de exerccios sobre Estrutura
Sequncial. Na verdade estes exerccios so vlidos para qualquer linguagem de programao que
voc queira praticar, mas aqui vamos usar para Python.

Eu acredito que essa primeira sequencia de 17 exerccios muito boa para relembrar alguns
conceitos e treinar. Ento vou fazer algo h muito pedido por vocs, uma lista com todas as aulas.
Essa lista vai ficar aqui neste post, por enquanto, mas depois vou coloca-la na lateral do blog, assim
facilita ainda mais achar as aulas.

Aqui est a to aguardada lista:

57

Aula 1 - A Proposta
Aula 2 - Conceitos e Variveis
Aula 3 - Comentrios, Docstrings e Nmeros
Aula 4 - Mais Nmeros e a Biblioteca Math
Aula 5 - Matemtica, Recados e Strings
Aula 6 - Um pouco mais sobre strings
Aula 7 - Python 3 e "Que caminho seguir?"
Aula 8 - Mais sobre operadores e conhecendo as listas e o "for"
Aula 9 - Mais sobre listas e um pouco de "aleatoriedade"
Aula 10 - Entrada de dados e formatao de strings
Aula 11 - Funes e exerccios
Aula 12 - Manipulando arquivos
Aula 13 - Passando argumentos via terminal
Aula 14 - Orientao objetos
Aula 15 - Mais sobre orientao objetos
Aula 16 - Iniciando no PyGTK
Aula 17 - Mais sobre o PyGTK
Aula 18 - Refrescando a memria e praticando
Aula 19 - PyGTK e sua documentao

Ufa, que trabalho, mas agora fica mais fcil de manter hehe.

Bem, ento isso, tentem fazer os 17 exerccios da lista e boa sorte! Em breve mais PyGTK!
- See more at: http://blog.evaldojunior.com.br/aulas/python/2009/04/19/curso-de-python-aula-18refrescando-a-memoria-e-praticando.html#sthash.jaotnuhz.dpuf

Curso de Python - Aula 19 - PyGTK e sua documentao


Ol pessoal!

Aqui vamos ns para mais uma aula de Python!

Hoje veremos um pouco mais sobre os conectores e tambm vamos aprender a encontrar respostas
na documentao do PyGTK.

atravs dos conectores que ns conseguimos ligar as aes do usurio na interface s funes do
programa. Na aula 16, nosso primeiro contato com PyGTK, j existe uma demonstrao de um
conector ligando o evento "clique" de um boto funo "ola_mundo".
58

Primeiro precisamos saber que no existe apenas o sinal 'clicked', alguns widgets do PyGTK
apresentam outros tipos de sinais, ento nossa misso descobrir que sinais so esses. Mas como
faremos isso? Simples, basta ter alguns conhecimentos que voc j deve possuir: Leitura e
Navegao na Web heheh. Na pgina de referncia do PyGTK voc encontra a documentao de
todos os componentes desta API.

Pois bem, vamos fazer o seguinte exemplo: Uma janela com um rtulo e um boto, quando o mouse
passar sobre o boto o rtulo deve dizer "O mouse est sobre o boto!" e quando deixa-lo a
mensagem muda para "O mouse saiu de cima do boto!". Aqui est um modelo para a janela:

Janelinha bonitinha, no? Fiz no Inkscape =)

Bem, agora que j temos o modelo precisamos escrever o cdigo para esta janela:

#!/usr/bin/env python
# -*- coding=utf-8 -*import pygtk
import gtk
class CJanela():
__doc__ = """
Classe CJanela, desenha uma janela com um label e um boto em uma
caixa vertical.
"""
def __init__(self):
self.janela = gtk.Window(gtk.WINDOW_TOPLEVEL)
self.janela.set_title("Aula 19, Sinais")
self.rotulo = gtk.Label()
self.botao = gtk.Button("Passe o mouse")
self.caixa = gtk.VBox()
self.caixa.pack_start(self.rotulo)
self.caixa.pack_start(self.botao)
self.janela.add(self.caixa)
self.janela.show_all()
janela = CJanela()
gtk.main()

59

Vejam que desta vez estou usando uma metodologia diferente, fiz uma classe CJanela que a
responsvel por exibir a janela e seu contedo. Acredite em mim esta metodologia facilita muito o
acesso aos widgets.

Ora, ora, j temos a janela com o rtulo e o boto, agora nos resta programar as aes e "mouse
sobre" e "mouse sai". Ento vamos recorrer documentao do PyGTK, como vamos usar os sinais
do boto ento a documentao deste que devemos ver.

Vejam na rea "gtk.Button Signal Prototypes", este widget nos oferece seis sinais: activate,
clicked, enter, leave, pressed e released. Para o que queremos fazer os sinais 'enter' e 'leave'
sero suficientes. Reparem que na referncia diz que o sinal 'clicked' praticamente o nico que
uma aplicao precisa, mas no aqui nas aulas do InFog heheh.

Ento vamos criar as funes 'mouse_sobre' e 'mouse_saiu', elas sero as responsveis por alterar
o texto do rtulo, e usaremos os conectores para ligar os sinais do boto estas funes, vejam o
cdigo:

#!/usr/bin/env python
# -*- coding=utf-8 -*import pygtk
import gtk
class CJanela():
__doc__ = """
Classe CJanela, desenha uma janela com um label e um boto em uma
caixa vertical.
"""
def __init__(self):
self.janela = gtk.Window(gtk.WINDOW_TOPLEVEL)
self.janela.set_title("Aula 19, Sinais")
self.rotulo = gtk.Label()
self.botao = gtk.Button("Passe o mouse")
self.botao.connect('enter', self.mouse_sobre)
self.botao.connect('leave', self.mouse_saiu)
self.caixa = gtk.VBox()
self.caixa.pack_start(self.rotulo)
self.caixa.pack_start(self.botao)
self.janela.add(self.caixa)
self.janela.show_all()
def mouse_sobre(self, widget):
self.rotulo.set_text("O mouse est sobre o boto!")
def mouse_saiu(self, widget):
self.rotulo.set_text("O mouse saiu de cima do boto!")
janela = CJanela()
gtk.main()

Vejam o resultado:

60

Bem simples n? O legal do PyGTK que na maioria das vezes, para aplicaes mais simples, a sua
preocupao ser com o negcio e no com o PyGTK com em s, j que sua manipulao no algo
to complexo.

E essa foi a nossa aula de hoje, espero que tenham gostado e aprendido bastante.

Lio de Casa!

R! Pensou que ia ficar s nisso n? Agora a hora de botar a cachola para funcionar! A lio de
hoje simples, quero que vocs faam uma janela com um rtulo e quatro botes: "maximizar",
"desfazer maximizao", "tela cheia" e "desfazer tela cheia". Quando clicados os botes devem
fazer as devidas aes e o rtulo deve mostrar o status da janela, exemplo: "Janela Maximizada",
"Janela em Tela Cheia", etc. Boa sorte!

61

You might also like