Vous êtes sur la page 1sur 54

Conceitos e variveis

Posted by InFog | novembro 2nd, 2008 Filed in Aulas, python 50 Comments

Ol! Est na hora de comear o Curso de Python!

Nota
importante lembrar que todas as aulas sero feitas utilizando o sistema operacional Linux, o Python funciona em plataformas Unix (FreeBSD, Solaris), Windows e MacOS. 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). Depois de digitar os cdigos basta salva-los e lhes dar permisso de execuo, 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. 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: $ 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.

>>> Al 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?

1 #!/usr/bin/env python 2 texto = "Oi, como vai voc?" 3 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:

1 #!/usr/bin/env python 2 linha1 = "Aulas de Python do InFog" 3 linha2 = "Com dicas e exerccios!" 4 linha3 = "Entre nessa voc tambm!" 5 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:

1 #!/usr/bin/env python 2 linha1 = "Aulas de Python do InFog\n" 3 linha2 = "Com dicas e exerccios!\n" 4 linha3 = "Entre nessa voc tambm!" 5 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: Primeiro usando o caractere especial \n:

1 #!/usr/bin/env python 2 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:

1 #!/usr/bin/env python 2 texto = """ 3 Eu tambm sou um 4 texto dividido 5 em 3 linhas 6 """ 7 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, eu quero 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. At a semana que vem! InFog

Comentrios, Docstrings e Nmeros


Posted by InFog | novembro 10th, 2008 Filed in Aulas, python 32 Comments

Vamos prxima aula de Python! Hoje vamos falar de dois assuntos: Comentrios, Docstrings e Nmeros.

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, um exemplo:

1 #!/usr/bin/env python 2 # *-* coding: utf-8 *-* 3 # Isto um comentrio 4 print("oi") 5 print("Tudo bem?) #Outro comentrio
A linha 3 tem apenas um comentrio, j na linha 5 tem uma funo print() e tambm um comentrio. 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.

Docstrings
Gostaram dos comentrios? Sim, eles so legais, mas agora vem uma coisa muito legal tambm, a Docstring! Agente ainda no chegou nas funes e parmetros, mas j vou explicar as docstrings por que elas sero muito teis no futuro. Imagine que voc quer documentar a sua funo, sim ela complexa e precisa de uma boa documentao, o que voc faz? 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:

1 #!/usr/bin/env python 2 # *-* coding: utf-8 *-* 3 def funcao(param1, param2): 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 print funcao.__doc__ Parmetros: param1 Um texto qualquer param2 Outro texto qualquer ''' print(param1) print(param2) Utilizao: funcao(param1, param2) ''' Descrio: Esta uma funo de exemplo que apenas exibe duas strings

Um detalhe o editor que estou usando coloca esses pontinhos quando uso o <tab>, isso muito bom para ver o cdigo =). 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 Outro 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:

1 #!/usr/bin/env python 2 # *-* coding: utf-8 *-* 3a = 1 4 b = 10 5 c = 200 6 d = a + b # Resultado: 11 7 e = c / b # Resultado: 20 8 f = a - b # Resultado: -9 9 g = b * c # Resultado: 2000 10 h = 3 11 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 o Python interpreta os nmeros sempre como inteiros, o que nos leva aos

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:

1 #!/usr/bin/env python 2 # *-* coding: utf-8 *-* 3a = 1 4 b = long(a) 6 d = 1.0 7 e = 5.5 8 f = -33.7

# Usando a funo long() # Declarao usando o ponto # Serve para negativos!

5 c = float(a) # usando a funo float()

Simples n? Assim conseguimos resolver o probleminha da diviso:

1 #!/usr/bin/env python 2 # *-* coding: utf-8 *-* 3 a = 3.0 4 b = 10 5 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 operaes podem ser definidos com parnteses:

1 #!/usr/bin/env python 2 # *-* coding: utf-8 *-* 3a = 2 + 4 - 3 + 6 6)

# Resultado: 9 # Resultado: -3

4 b = (2 + 4) - (3 +

5 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 as Docstrings ns usaremos mais pra frente, ento hoje eu quero que vocs completem este cdigo:

1 #!/usr/bin/env python 2 # *-* coding: utf-8 *-* 3a = 2 4 b = 10 5 c = 15 6 7 # 1) divida b por a 8 9 # 2) multiplique b por c 10 11 # 3) some o resultado da 1 com c 12 13 # 4) divida c por b de forma inteira 14 15 # 5) divida c por b de forma real 16 17 # 6) subtraia o resultado da 4 de c 18 19 # 7) some a e b e multiplique pela soma de b e c 20 21 # 8) S para lembrar, exiba seu nome na tela
Ento isso, esta foi a aula de hoje, faam os exerccios e vo treinando a =) InFog

Mais Nmeros e a Biblioteca Math


Posted by InFog | novembro 16th, 2008 Filed in Aulas, python 29 Comments

Ol pessoal! E vamos mais uma aula de Python. Hoje vou falar um pouco mais sobre nmero e operaes e para isso vamos usar um pouco 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: 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 chatinha n? Por isso bem melhor utilizarmos os recursos que a linguagem nos oferece para isso (em qualquer linguagem!). No Python a exponenciao feita assim:

1 #!/usr/bin/env python 2 # *-* coding: utf-8 *-* 3 a = 2 ** 23


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

Radiciao
Nossa! Outra palavrinha feia A radiciao o contrrio da exponenciao e tambm conhecida nos crculos sociais como raiz. A raz pode ser quadrada, cbica ou de ndice n. Aqui vamos usar uma funo 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 preguntas, em breve voc vai saber bem o que cada linha faz:

1 #!/usr/bin/env python 2 # *-* coding: utf-8 *-* 3 import math 4a = 9 5 b = math.sqrt(a) 6 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 separalos. Veja um exemplo:

1 #!/usr/bin/env python 2 # *-* coding: utf-8 *-* 3 # Chamando funo sem parmetros 4 funcao1() 5 # Chamando funo com um parmetro 6 funcao2(param) 7 # Chamando funo com N parmentros 8 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. Bem vamos voltar biblioteca math. Essa biblioteca nos oferece algumas funes alm dasqrt, 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 varivel 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 a lio de casa de hoje, certo?

Lio de Casa
Hoje a lio de casa ser um pouquinho mais complexa do que as outras que j fizemos. 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 hehe) 4) Calcule a rea o volume do cilindro de raio 6cm e altura 5cm.

Enviem as respostas para o mesmo e-mail de sempre =) Ahh se algum tiver alguma dvida pode perguntar aqui nos comentrios. InFog.

Matemtica, Recados e Strings


Posted by InFog | novembro 23rd, 2008 Filed in Aulas, python 33 Comments

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 escola, 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 no: rea do crculo: PI * Raio Volume do cilindro: PI * Raio * Altura De qualquer forma eu estou considerando apenas o envio desta lio e no o fato de ela estar fazendo o clculo correto. Faz assim, na prxima vez que eu pedir algum tipo de clculo eu passo as formulas e tambm os resultados, assim vocs mesmos j se corrigem. Agora uma seo de recadinhos: Ainda no vi todos os exerccios que vocs me mandaram, primeiro por que so muitos (quase 100 alunos!), graas vocs este curso est sendo um belo sucesso para mim e segundo por que estou com horrios meio apertados ultimamente. Mesmo com tudo isso prometo que no vou deixar vocs sem aulas, posso, no mximo, atrasar um dia, como j aconteceu antes. A boa notcia que arrumei uma forma legal de organizar todos os e-mails e exerccios e as presenas de vocs, sim vocs tm presena, cada lio enviada uma presena, e j estou terminando a organizao. Alguns, que mandaram dvidas/crticas/sugestes devem ter recebido e-mails meus, aqueles que mandaram algum tipo de opinio e ainda no receberam o e-mail eu peo para aguardarem mais um pouco =) Agora uma novidade sensacional! Como muitos estavam dizendo nos e-mails que seria muito interessante ver como os outros alunos resolveram os exerccios eu abri um pequeno frum no servio forums free. O endereo do frum esse: http://python.forums-free.come l eu j coloquei a minha soluo para o ltimo exerccio, esta soluo est bem comentada e mostra como eu fiz as frmulas. Bom, chega de enrolao e vamos aula!

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, vejam um exemplo:

1 #!/usr/bin/env python 2 # *-* coding: utf-8 *-* 3 linha = '-' * 50 4 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, 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:

1 #!/usr/bin/env python 2 # *-* coding: utf-8 *-* 3 linha = '-' * 50 4 titulo = 'Aulas de Python' 5 print(titulo.ljust(50)) 6 print(linha) 7 print(titulo.center(50)) 8 print(linha) 9 print(titulo.rjust(50)) 10 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().

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:

1 #!/usr/bin/env python 2 # *-* coding: utf-8 *-* 3 linha = '-' * 50 4 titulo = 'Aulas de Python' 5 print(titulo.ljust(50, '-')) 6 print(titulo.center(50, '*')) 7 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 os casos (Maisculas e minsculas) das strings. Com algumas funes simples podemos deitar um texto todo em maisculas, minsculas ou algumas outras formas, vejam:

1 #!/usr/bin/env python 2 # *-* coding: utf-8 *-* 3 titulo = 'aulas de python' 4 print('Resultado com str.upper()') 5 print(titulo.upper()) 6 print('Resultado com str.lower()') 7 print(titulo.lower()) 8 print('Resultado com str.title()') 9 print(titulo.title()) 10 print('Resultado com str.capitalize()') 11 print(titulo.capitalize()) 12 print('Resultado com str.title() e str.swapcase()') 13 print(str.swapcase(titulo.title()))

O resultado:

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

1 #!/usr/bin/env python 2 # *-* coding: utf-8 *-* 3 titulo = 'aulas de python' 4 print('Resultado com str.title() e str.swapcase()') 5 print(titulo.title().swapcase()) # Um jeito mais curto para o mesmo resultado 6 # Isso funciona pois no Python cada funo retorna um objeto 7 # neste caso um objeto do tipo string que pode ter seus 8 # 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. 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 vice-versa, deixando a string assim: aULAS dE pYTHON.

Substituio: Agora vamos substituir um pedao de uma string:

1 #!/usr/bin/env python 2 # *-* coding: utf-8 *-* 3 titulo = 'aulas de python' 4 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.

Lio de casa:
Ah, mas j? Estava to legal 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. Isso tudo deve estar em apenas um script. InFog.

Um pouco mais sobre strings


Posted by InFog | novembro 30th, 2008 Filed in Aulas, python 14 Comments

E aqui vamos ns para mais uma aula de Python! 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? O nosso frum teve uns probleminhas de Administrador Pois , eu no conheo a plataforma phpBB muito bem ainda, por isso acabei deixando os fruns sem permisso de escrita para que vocs mandassem suas sugestes de solues da aula 5, mas agora parece que est tudo certo =) Ento vamos aula de hoje! Hoje vamos falar um pouco mais sobre as strings Sim, eu s ei 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:

1 #!/usr/bin/env python 2 # *-* coding: utf-8 *-* 3 titulo = 'aulas de python' 4 # Pegando caractere por caractere 5 print(titulo[0]) 6 print(titulo[4]) 7 # Agora pegando intervalos de caracteres 8 print(titulo[0:5]) 9 print(titulo[9:15]) 10 # Outros modos: 11 # Do comeo at X 12 print(titulo[:5]) 13 # De X at o fim 14 print(titulo[9:])
O resultado: $ ./substr.py a s aulas python aulas 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. 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:

1 #!/usr/bin/env python 2 # *-* coding: utf-8 *-* 3 titulo = ' aulas de python ' 4 print(titulo.strip()) 5 print(titulo.lstrip()) 6 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
Agora um funo legal para pesquisar textos:

1 #!/usr/bin/env python 2 # *-* coding: utf-8 *-* 3 titulo = 'aulas de python' 4 print(titulo.find('de')) 5 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 desse 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. InFog.

Python 3 e Que caminho seguir?


Posted by InFog | dezembro 14th, 2008 Filed in Aulas, python 17 Comments

Ol! E aqui vamos ns para mais uma aula de Python! Mas antes temos os recadinhos =) 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 DebianLenny. 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.

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:

1 #!/usr/bin/env python 2 a = 10 3 if a < 20: 4 6 print("menor que vinte") print("maior ou igual a vinte") 5 else:

Vejam este outro exemplo:

1 #!/usr/bin/env python 2 sexo = 'f' 3 if sexo == 'm': 4 6 8 print('masculino') print('feminino') print('indefinido') 5 elif sexo == 'f': 7 else:

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 pr eciso falar primeiro sobre o mdulo da diviso para vocs. ( um pequeno desvio na aula de hoje, mas leiam com ateno!)

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

1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*3a = 7 4 modulo = a % 2 5 print("O resto da diviso "), 6 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, par a 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:

1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*3 n = 10 4 if n % 2 == 0 : 5 6 7 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:

1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*3n = 1 4 while n <= 20 : 5 6 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 conside rado 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:

1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*3n = 1 4 5 6 7 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 Pronto, acho que s esses j d para passar uns minutos brincando =) InFog

Mais sobre operadores e conhecendo as listas e o for


Posted by InFog | dezembro 21st, 2008 Filed in Aulas, python 10 Comments

[ad#propaganda] Ol Alunos! A aula da semana passada foi bem legal no? Mas o mais legal ainda foi o que foi feito peloAndr 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

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:

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

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:

1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*3 n = 10 4 if (n % 2 == 0) and (n % 5 == 0): 5 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 um exemplo: ) quer dizer OU, ou seja OU umOU outro. T vamos ver

1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*3 cor_carro = "cinza" 4 if (cor_carro == "azul") or (cor_carro == "cinza"): 5 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:

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

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?

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

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:

1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*3 lista = ["pra", "uva", "ma"] 4 print(lista[0]) # mostra "pra" 5 print(lista[2]) # mostra "ma" 6 print(lista[-1]) # mostra "ma" 7 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:

1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*3 lista = ["pra", "uva", "ma"] 4 # trocando um item: pra por banana 5 lista[0] = "banana" 6# 7 # Para adicionar um elemento em uma lista 8 # meio chatinho =( 9 # Reparem que eu preciso repetir o ltimo item 10 # e s ento adicionar mais um 11 lista[2:3] = ["ma", "morango"] 12 print(lista[3]) # mostra "morango" 13 # mas eu poderia "automatizar" assim: 14 lista[len(lista):len(lista)+1] = [lista[-1],"pssego"] 15 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:

1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*3 lista = ["pra", "uva", "ma"] 4 # remover um item: ma 5 lista[2:3] = [] 6 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:

1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*3 lista = ["pra", "uva", "ma", "banana"] 4 for fruta in lista: 5 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 =)

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 =) InFog

Mais sobre listas e um pouco de aleatoriedade


Posted by InFog | janeiro 11th, 2009 Filed in Aulas, python 18 Comments

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?

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:

1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*3 # criando uma lista vazia 4 lista_vazia = [] 5 # agora uma lista com itens 6 lista_itens = ["python", "php", "c++"] 7 # adicionando tens lista 8 lista_vazia.append("item1") 9 lista_vazia.append("item2") 10 # removendo um item de uma lista 11 lista_itens.remove("php") 12 # retorna e remove o ltimo tem da lista 13 ultimo = lista_itens.pop() 14 print(ultimo) # mostra "c++" 15 # inverte a ordem da lista 16 lista_vazia.reverse() 17 lista_vazia.append("item5") 18 lista_vazia.append("item3") 19 lista_vazia.append("item4") 20 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. 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:

1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*3 # importando o mdulo random 4 import random 5 # criando uma lista 6 lista = ["joo", "maria", "jos", "ana"] 7 # embaralhando a lista 8 random.shuffle(lista) 9 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 m dulo 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. Eu gostei bastante de fazer estes 2 exerccios InFog

Entrada de dados e formatao de strings


Posted by InFog | janeiro 18th, 2009 Filed in Aulas, GeSpeak, python 9 Comments

[ad#propaganda] 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:

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

17 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 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: ./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:

1 #!/usr/bin/python 2 # -*- coding: utf-8 -*3 nome = raw_input("Digite o seu nome: ") 4 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:

1 #!/usr/bin/python 2 # -*- coding: utf-8 -*3 inteiro = int(raw_input("Um nmero inteiro: ")) 4 real = float(raw_input("Um nmero real: "))
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:

1 #!/usr/bin/python 2 # -*- coding: utf-8 -*3 print("Bem vindo ao Colecionador de Carros 10.000 Plus!") 4 nome = raw_input("Qual o seu nome? ") 5 print("Ol " + nome + ", vamos sua coleo?") 6 quantidade = int(raw_input("Quantos carros o senhor tem? ")) 7i = 1 8 carros = [] 9 placas = [] 10 while i <= quantidade: 11 12 carros.append(raw_input("Carro %i: " % i)) i += 1

13 print("Agora as placas...") 14 i = 0 15 while i < quantidade: 16 17 placas.append(raw_input("Placa do %s: " % carros[i])) i += 1

18 print("Hora de mostrar a sua coleo!") 19 i = 0 20 while i < quantidade: 21 22 print("O %s tem placas %s" %(carros[i], placas[i])) i += 1

23 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) 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:

Expresso %s %c %d %f %%

Significado Uma string Caractere Decimal, inteiro 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. InFog

Funes e exerccios
Posted by InFog | janeiro 25th, 2009 Filed in Aulas, python 5 Comments

[ad#propaganda] 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! 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.

1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*3 # Funo simples e sem parmetros: 4 def ola_mundo(): 5 print("Ol Mundo!") 6 # Agora uma funo com um parmetro 7 def ola_pessoa(nome): 8 print("Ol " + nome + ", como vai voc?") 9 # Agora uma funo com dois parmetros 10 def ola_pessoa_blog(nome, blog): 11 print("O blog " + blog + " pertence " + nome) 12 # Chamando as funes 13 ola_mundo() 14 meu_nome = "InFog" 15 ola_pessoa(meu_nome) 16 meu_blog = "http://infog.casoft.info" 17 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:

1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*3 # Invertendo os parmetros 4 def ola_pessoa_blog(nome, blog): 5 print("O blog " + blog + " pertence " + nome) 6 meu_nome = "InFog" 7 meu_blog = "http://infog.casoft.info" 8 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 por que fica mais simples de ler o cdigo, fica um pouco maior, mas qual das opes abaixo fica melhor para ler?

1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*3 # Funo simples e sem parmetros: 4 # chamando a mesma funo de formas diferentes 5 rolar_dados(8, 3, 2) 6 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:

1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*3 # Funo simples e sem parmetros: 4 # chamando a mesma funo de formas diferentes 5 def rolar_dados(faces, sorteio, excluir) 6 7 8 9 10 11 12 13 14 15 16 """ """ 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 ...

17 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
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. InFog

Manipulando Arquivos
Posted by InFog | fevereiro 8th, 2009 Filed in Aulas, python 7 Comments

[ad#propaganda] 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:

1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*3 arq = open('/tmp/lista.txt', 'w') 4 texto = """ 5 Lista de Alunos 6 --7 Joo da Silva 8 Jos Lima 9 Maria das Dores 10 """ 11 arq.write(texto) 12 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 arq uivo fechado e ento o programa termina. Aqui eu fiz um cat no arquivo e ele apareceu com as informaes que estavam na varivel texto. 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:

1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*3 arq = open('/tmp/lista.txt', 'w') 4 texto = [] 5 texto.append('Lista de Alunos\n') 6 texto.append('---\n') 7 texto.append('Joo da Silva\n') 8 texto.append('Jos Lima\n') 9 texto.append('Maria das Dores') 10 arq.writelines(texto) 11 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:

1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*3 arq = open('/tmp/lista.txt', 'r') 4 texto = arq.read() 5 print(texto) 6 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:

1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*3 arq = open('/tmp/lista.txt', 'r') 4 texto = arq.readlines() 5 for linha in texto : 6 print(linha) 7 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 =) 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 Boa sorte! Clio

Passando Argumentos Via Terminal


Posted by InFog | fevereiro 15th, 2009 Filed in Aulas, python 8 Comments

Ol queridos alunos! 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:

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

Ou seja, cada item da lista sys.argv um parmetro passado para o programa, vejam este exemplo: $ ./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:

1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*3 import sys 4 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:

arquivo1 arquivo4

arquivo2 arquivo5

arquivo3 arquivo6

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

Orientao Objetos
Posted by InFog | maro 1st, 2009 Filed in Aulas, python 10 Comments

[ad#propaganda] 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 matrixgrande 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? Vamos ver um exemplo de uma classe muito usada no ensino de orientao objetos, a classe Aluno:

1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*3 class Aluno: 4 5 6 7 8 9 10 # 11 12 13 14 15 16 17 18 19 20 # 21 22 23 24 25 26 # 27 28 29 30 31 32 33 34 35 # 36 37 38 39 def fecha_media(self): __doc__ = """ Esta funo funo tira a mdia do aluno e returna um float """ self.Notas[Semestre] = Nota 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 """ return self.Nome def pega_nome(self): __doc__ = """ Esta funo retorna uma string com o nome do aluno """ self.Nome = Nome self.Serie = Serie 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) """ Nome = '' Serie = 0 Notas = [0,0,0,0] __doc__ = """ Classe de estudo

40 41 42 43 44 45 46 47 48 49 #

""" Notas = 0 Media = 0 i = 0 while (i < 4): Notas += self.Notas[i] i += 1 Media = Notas / 4 return Media

50 # Iniciando o programa 51 nome = str(raw_input("Nome do aluno: ")) 52 serie = int(raw_input("Serie: ")) 53 aluno = Aluno(Nome=nome, Serie=serie) 54 i = 0 55 while (i < 4): 56 57 58 nota = float(raw_input("Digite a %s nota: " % str(i+1))) aluno.define_nota(Semestre=i, Nota=nota) i += 1 %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 funesfecha_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.

59 print("O aluno %s terminou o ano com mdia

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! Boa sorte! Este est complicadinho heheheh, mas com o que eu ensinei at aqui vocs conseguem, tenho certeza!

Mais sobre Orientao Objetos


Posted by InFog | maro 8th, 2009 Filed in Aulas, python 8 Comments

[ad#propaganda] 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 pe rgunta 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:

1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*3 class Aluno: 4 5 6 7 8 9 10 11 # 12 13 14 15 16 17 18 19 20 21 # 22 23 24 25 26 """ return self.__Nome def pega_nome(self): __doc__ = """ Esta funo retorna uma string com o nome do aluno """ self.__Nome = Nome self.__Serie = Serie 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) """ __doc__ = """ Classe de estudo

# Todos os atributos so privados...


__Nome = '' __Serie = 0 __Notas = [0,0,0,0]

27 # 28 29 30 31 32 33 34 35 36 # 37 38 39 40 41 42 # 43 44 45 46 47 48 49 50 51 52 53 54 55 56 # 57 # Iniciando o programa 58 nome = str(raw_input("Nome do aluno: ")) 59 serie = int(raw_input("Serie: ")) 60 aluno = Aluno(Nome=nome, Serie=serie) 61 # A linha abaixo no vai alterar mais o nome do aluno 62 aluno.__Nome = "Jos Nascimento" 63 # Mas a linha abaixo altera 64 aluno.define_nome("Joo da Silva") 65 i = 0 66 while (i < 4): 67 68 69 nota = float(raw_input("Digite a %s nota: " % str(i+1))) aluno.define_nota(Semestre=i, Nota=nota) i += 1 %f" % (aluno.pega_nome(),aluno.fecha_media())) """ Notas = 0 Media = 0 i = 0 while (i < 4): Notas += self.__Notas[i] i += 1 Media = Notas / 4 return Media def fecha_media(self): __doc__ = """ Esta funo funo tira a mdia do aluno e returna um float """ self.__Nome = Nome def define_nome(self, Nome): __doc__ = """ Funo para "renomear" o aluno """ self.__Notas[Semestre] = Nota 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

70 print("O aluno %s terminou o ano com mdia

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!

1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*3 class Aluno: 4 5 6 7 8 9 10 11 # 12 13 14 15 16 17 18 19 20 21 # 22 23 24 25 26 27 # 28 29 30 31 32 33 34 35 36 # 37 38 39 def define_nome(self, Nome): __doc__ = """ Funo para "renomear" o aluno """ self.__Notas[Semestre] = Nota 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 """ return self.__Nome def pega_nome(self): __doc__ = """ Esta funo retorna uma string com o nome do aluno """ self.__Nome = Nome self.__Serie = Serie 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) """ __doc__ = """ Classe de estudo

# Todos os atributos so privados...


__Nome = '' __Serie = 0 __Notas = [0,0,0,0]

40 41 42 # 43 44 45 46 47 48 49 50 51 52 53 54 55 56 # 57 58 59 60 61 62 # 63

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

64 # Iniciando o programa 65 nome = str(raw_input("Nome do aluno: ")) 66 serie = int(raw_input("Serie: ")) 67 aluno = Aluno(Nome=nome, Serie=serie) 68 # Mostrando os dados do aluno... 69 print(aluno.dados) 70 i = 0 71 while (i < 4): 72 73 74 nota = float(raw_input("Digite a %s nota: " % str(i+1))) aluno.define_nota(Semestre=i, Nota=nota) i += 1 %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!

75 print("O aluno %s terminou o ano com mdia

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.

Iniciando no PyGTK
Posted by InFog | maro 15th, 2009 Filed in Aulas, python 18 Comments

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 =) 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:

1 #!/usr/bin/env python 2 import pygtk 3 pygtk.require('2.0') 4 import gtk 5 janela = gtk.Window(gtk.WINDOW_TOPLEVEL) 6 botao = gtk.Button("Clique aqui...") 7 janela.add(botao) 8 janela.show_all() 9 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. 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:

1 #!/usr/bin/env python 2 import pygtk 3 #pygtk.require('2.0') 4 import gtk 5 def ola_mundo(widget): 6 print "Hello World" 7 janela = gtk.Window(gtk.WINDOW_TOPLEVEL) 8 botao = gtk.Button("Clique aqui...") 9 botao.connect('clicked', ola_mundo) 10 janela.add(botao) 11 janela.show_all() 12 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.

Lio de Casa
A lio de casa de hoje muito simples, mas vocs vo precisar usar a referncia do PyGTKpara 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 =)

Mais sobre o PyGTK


Posted by InFog | maro 29th, 2009 Filed in Aulas, python 4 Comments

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:

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 umgtk.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:

1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*3 import pygtk 4 import gtk 5 def ola_mundo(widget): 6 print "Hello World" 7 # criando a janela 8 janela = gtk.Window(gtk.WINDOW_TOPLEVEL) 9 # agora uma caixa vertical 10 caixa_v = gtk.VBox() 11 # agora um label e uma caixa de entrada 12 label1 = gtk.Label("Sou um label") 13 entrada = gtk.Entry() 14 # agora uma caixa horizontal, para o label e entry 15 caixa_h = gtk.HBox() 16 # adicionando o label e o entry caixa horizontal 17 caixa_h.pack_start(label1, expand=False, fill=True) 18 caixa_h.pack_start(entrada, expand=False, fill=True) 19 # agora a caixa horizontal adicionada ciaxa vertical 20 caixa_v.pack_start(caixa_h, expand=False, fill=True) 21 # ufa, quase l 22 # Agora um boto 23 botao = gtk.Button("Clique aqui") 24 botao.connect('clicked', ola_mundo) 25 # agora o boto adicionado caixa vertical 26 caixa_v.pack_start(botao, expand=False, fill=True) 27 # e finalmente adicionamos a caixa vertical janela 28 janela.add(caixa_v) 29 janela.show_all() 30 gtk.main()
O cdigo est bem comentado, vejam a janela que ele gerou:

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!

Refrescando a memria e praticando.


Posted by InFog | abril 19th, 2009 Filed in Aulas, python 10 Comments

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 sobreEstrutura 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: 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

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!

PyGTK e sua documentao


Posted by InFog | maio 3rd, 2009 Filed in Aulas, python 19 Comments

Ol pessoal! Aqui vamos ns para mais uma aula de Python! Mas antes disso eu gostaria de lembra-los que a vaquinha para nos ajudar na viagem de lua de mel ainda est rolando! J tivemos algumas contribuies e eu agradeo muito aos que ajudaram, mas infelizmente ainda estamos longe at mesmo de 10% do valor =( Se voc quiser ajudar tambm basta clicar na simptica vaquinha abaixo e doar.

Dado o recado vamos aula! 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. 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:

1 #!/usr/bin/env python 2 # -*- coding=utf-8 -*3 import pygtk 4 import gtk 5 class CJanela(): 6 7 8 9 10 11 12 13 14 15 16 17 18 19 """ 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() __doc__ = """ Classe CJanela, desenha uma janela com um label e um boto em uma caixa vertical.

20 janela = CJanela() 21 gtk.main()


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 m ouse 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 sinaisenter 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:

1 #!/usr/bin/env python 2 # -*- coding=utf-8 -*3 import pygtk 4 import gtk 5 class CJanela(): 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 """ 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!") __doc__ = """ Classe CJanela, desenha uma janela com um label e um boto em uma caixa vertical.

26 janela = CJanela() 27 gtk.main()


Vejam o resultado:

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! E no se esquea de contribuir com a nossa Vakinha!