segunda-feira, 29 de dezembro de 2008

Dicionários

Uma das estruturas de dados mais interessantes que podemos utilizar com a linguagem Python são os dicionários.

Os dicionários são como ligações entre uma chave e um valor, por exemplo, se tivermos várias pessoas podemos identificá-las com números. Os números serão então as chaves e as pessoas que estes representam serão os valores. Vejamos como isto funciona no interpretador:

>>> pessoas = {1: 'Paulo', 5: 'Vitor', 3: 'Bruno'}
>>> print pessoas[1]
Paulo
>>> print pessoas[3]
Bruno

Neste exemplo criamos um dicionário com 3 chaves, cada uma "apontando" para um valor, neste caso uma string com o nome de uma pessoa. Note que utilizamos números para as chaves, mas nada impede que sejam utilizados outros tipos como chave. No entanto, apenas os tipos imutáveis devem ser utilizados como chave de um dicionário. Já os valores pode ser de qualquer tipo. Vamos a mais um exemplo:

>>> altura = {'paulo': 1.72, 'vitor': 1.80, 'bruno': 1.75}
>>> print altura['paulo']
1.72

Neste exemplo utilizamos strings como chaves e números reais como valores. As strings em Python, ao contrário do que se pode imaginar, são imutáveis. Ou seja, não se pode alterar uma string uma vez que esta esteja definida. Caso uma alteração seja necessária, uma nova string é criada para que a operação seja realizada.

Esta semana, como estamos entre as festas de Natal e ano novo, vou manter o post um pouco menor que o habitual. Como exercício proponho ao leitor que crie alguns dicionários utilizando tuplas como chave e listas como valores. Uma ideia seria que a tupla fosse formada pelo dia e mês e a lista formada pelos nomes de pessoas com aniversário neste dia e mês.

Aguardem mais um post na próxima semana!

segunda-feira, 22 de dezembro de 2008

Instalando o Interpretador Python no Windows

No meu primeiro post eu indico a versão 2.5.2 do interpretador Python para seguir este tutorial, mas recentemente foi lançada a versão 2.5.3, que apenas corrige alguns problemas da versão 2.5.2, sendo assim, como foi mantida a compatibilidade, a versão 2.5.3 é a mais indicada no momento.

Este post está relacionado a uma reclamação de um amigo meu que diz ter encontrado dificuldade para baixar e instalar a versão 2.5.2 do interpretador Python no windows. Como ele é um "usuário" de computadores e tem pouca ou nenhuma experiência com programação, teve esta dificuldade inicial. Vou explicar, então, como instalar a versão 2.5.3 do interpretador.

Apesar de para a maioria dos programadores instalar o interpretador ser considerada uma tarefa simples, aparentemente para as pessoas "normais" isto não se faz verdade.

Bom, então vamos aos passos para a instalação:

1. Fazer o download do interpretador. Para isto, vou colocar o link direto para o arquivo de instalação. A extensão é ".msi" mesmo, o que alguns vão considerar estranho. Segue o link:  python-2.5.3.msi

2. Ao terminar o download, localize a pasta onde este foi salvo e execute-o, ou simplesmente selecione executar na caixa de diálogo de download.

3. Depois, basta seguir os passos da instalação:

Pronto! O interpretador está instalado!

Nos próximos dias escrevo o próximo post continuando o tutorial.

quarta-feira, 17 de dezembro de 2008

O Projeto

Hoje vou descrever o projeto que tenho em mente para este mini-curso online. Este consiste em um jogo de damas, que é um dos jogos de tabuleiros mais tradicionais do mundo. Este jogo é ideal por ter regras simples o suficiente para o propósito deste projeto.

Vou descrever os detalhes do jogo, o que facilitará na hora de entender as estruturas de dados utilizadas posteriormente, quando estivermos trabalhando no projeto em si.

  1. O tabuleiro é formado por 8 colunas e 8 linhas. Cada casa do tabuleiro tem uma cor, branca ou preta. As cores das casas são alternadas.
  2. São dois jogadores. Cada jogador tem a sua disposição 12 peças, onde as peças de um jogador tem uma cor diferente da do outro, uma cor mais clara e outra mais escura.
  3. Na posição inicial, os jogadores irão dispor suas peças sobre as casas negras em regiões opostas do tabuleiro, ocupando assim as casas negras das 3 últimas linhas do seu lado do tabuleiro.
  4. O movimento das peças será sempre na diagonal, e sempre ocupando uma casa negra e sempre avançando para frente.
  5. O ato de "comer" uma peça do adversário consiste em pular sobre esta pedra, obedecendo o movimento em diagonal e para frente, desde que a casa que será ocupada ao final do movimento esteja livre.
  6. É permitido "comer" mais de uma peça em um movimento, desde que se obedeça a regra número 5 entre os pulos.
  7. Vence o jogador que eliminar todas as peças do adversário
  8. Caso alguma peça do jogador atinja a última linha do lado oposto do tabuleiro, esta peça automaticamente é convertida em uma "Dama"
  9. As Damas devem obedecer as mesmas regras do movimento que as demais peças, com exceção que estas podem tanto avançar como retroceder no tabuleiro.

Estas são as regras do jogo. Note que, apesar de o jogo ser bastante simples, existem várias regras.

Com o projeto definido, vamos á parte que nos interessa: programar!

Vou começar explicando os tipos de dados que nós temos acesso na linguagem Python. Entre os tipos básicos temos: inteiros, strings e valores reais.

Os dados inteiros são os números inteiros, positivos e negativos, incluindo o zero. String é o tipo de dados que armazena texto. E os valores reais são os dados que armazenam números com casas decimais, conhecidos como de ponto flutuante. Exemplos de inteiros são: 1, 5, 0, -1, 65535, etc. Exemplos de string: "paulo", "maria", "o rato roeu a roupa do rei de roma". E de ponto flutuante: -1.55, 99.9999, 0.12345.

Note que as strings são delimitadas por aspas duplas. No caso da linguagem Python elas também podem ser delimitadas por aspas simples.

Como forma de praticar, podemos utilizar o prompt interativo do interpretador Python:

>>> print 5
5
>>> print 5 + 2
7
>>> print 'Joao Paulo'
Joao Paulo
>>> print 1.5
1.5
>>> print 2.5 * 2
5.0
>>> print 'Joao' + " Paulo"
Joao Paulo

Outros tipos de dados são as listas e tuplas. Listas são, como o nome diz, listas de objetos. Podem conter inteiros, strings, ponto flutuante e qualquer outro tipo de objeto, incluindo listas e tuplas. As tuplas são um tipo especial de listas. Estas são imutáveis, o que significa que uma vez definidas não podem ter seu conteúdo alterado. As listas são definidas com colchetes e as tuplas com parenteses. Vejamos abaixo:

>>> print [1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]
>>> print (1, 2, 3, 4, 5)
(1, 2, 3, 4, 5)
>>> print []
[]
>>> print ()
()
>>> print (1,)
(1,)
>>> print [1]
[1]
>>> print [1, [2, 3], 4]
[1, [2, 3], 4]

Podemos notar alguns detalhes acima. Primeiro que podemos definir listas e tuplas vazias. Segundo, para definir uma tupla com apenas um elemento devemos por uma vírgula após o elemento, caso contrário o interpretador entederia isto apenas como um agrupamento normal utilizando parenteses. E, no último exemplo, mostro como incluir uma lista dentro de outra lista. A lista [2, 3] neste caso é o segundo elemento da lista que o contém.

Para terminar o post desta semana, vou introduzir o conceito de variáveis. As variáveis são uma espécie de nome que nós damos aos objetos a fim de identificá-los de forma mais prática. Damos o nome de "atribuição" o ato de ligar um nome a um valor. Vejamos nos exemplos:

>>> nome = 'Joao Paulo'
>>> print nome
Joao Paulo
>>> x = 10
>>> y = 20
>>> print x * y
200
>>> x = 5
>>> print x * y
100
>>> minha_lista = [1, 2, 3, 'Paulo']
>>> print minha_lista
[1, 2, 3, 'Paulo']
>>> print minha_lista[0]
1
>>> print minha_lista[-1]
'Paulo'
>>> minha_lista[1] = 5
>>> print minha_lista
[1, 5, 3, 'Paulo']
>>> del minha_lista[-1]
>>> print minha_lista
[1, 5, 3]

Nos exemplos acima definimos algumas variáveis:

  • nome referenciando a string 'Joao Paulo'
  • x, de valor inteiro, inicialmente 10 e mais a frente alterado para 5
  • y, de valor inteiro 20
  • minha_lista, uma lista com 3 inteiros e uma string

Note que para termos acesso a elementos individuais de uma lista devemos escrever o nome da variável e em seguida o índice do elemento entre colchetes. O índice do primeiro elemento sempre será zero. Como se pode observar, também podemos utilizar índices negativos. Neste caso os índices se referem ao final da lista, sendo que o último item sempre terá índice -1.

Bom, por hoje é isso. Na próxima semana irei descrever como criar scripts e dar uma sequência lógica a um programa.

quarta-feira, 10 de dezembro de 2008

A Arte de Programar Computadores

O  que é programar?
Apesar de parecer estranho, muitas pessoas não sabem - ou não entendem, o que significa programar um computador. Faço analogia aos antigos vídeo cassetes. Nestes aparelhos uma pessoa poderia "programá-lo" para que o mesmo gravasse um determinado canal por um período de tempo específicado. Ou seja, o usuário, utilizando algumas regras, informa ao aparelho uma ação que este deve tomar. Programar um computador é algo parecido, respeitadas as devidas proporções.
Você que está lendo este blog neste momento também está utilizando alguns programas que foram escritos por alguns milhares de programadores mundo afora. Se você utiliza o Windows, saiba que este é um programa especial escrito pelos programadores da Microsoft. Usando o Internet Explorer? Este também é um programa escrito pelo pessoal da Microsoft. Não usa Windows? Que tal o Linux? O Firefox? 
Todos são programas escritos por programadores. O caso do Linux é bem interessante, pois este é escrito por milhares de programadores espalhados pelo mundo de forma colaborativa, utilizando a Internet para sincronizar seus esforços. Tanto o Linux como o Windows são programas especiais, denominados "Sistemas Operacionais". Os sistemas operacionais nada mais são que um suporte para que os programas que usamos no dia a dia. 
Resumindo, programar um computador é determinar quais ações este deve tomar, seguindo uma sequência lógica.
Eu sou uma pessoa que gosto muito de praticar, e acredito que um aprendizado só é completo se envolver uma boa dose de prática. Sendo assim, vamos à prática!
Caso você não entenda alguns dos termos que utilizarei nos parágrafos a seguir, não se espante, eles farão sentido mais tarde.
A primeira coisa que devemos fazer é instalar o interpretador da linguagem Python. Faça o download clicando aqui. Neste curso, utilizaremos a versão 2.5.2 do interpretador, embora já existam versões mais novas. Não se preocupe, o motivo para não utilizar a versão mais recente é puramente didática.
Uma vez instalado, devemos executar o interpretador. Se você utiliza o Windows, pode encontrar o interpretador no menu Iniciar, dentro da pasta Programas / Python 2.5. Selecione o item "Python (Command Line)". Caso utilize Linux ou Mac OS X, abra um terminal e digite "python", sem as aspas, seguido da tecla "enter", ou "return" no caso do Mac OS X.
Você terá na tela algo parecido com isto:
Python 2.5.2 (r252:60911, Jun  5 2008, 11:31:51)
[GCC 4.0.1 (Apple Inc. build 5465)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>
Este é o "prompt" do interpretador. Aqui podemos escrever e testar programas de forma interativa, ou seja, as ações são executadas na medida que nós as escrevemos, linha a linha.
Como é tradição no ensino de linguagems de programação, o primeiro programa que escrevemos é conhecido como "Hello World" ou "Olá Mundo". O objetivo deste primeiro programa apenas é fazer com que o computador imprima na tela este texto. Em Python, isto não poderia ser mais simples, basta digitar, após o ">>> ":
print "Hello World"
Seguido da tecla "enter". Como resposta, o interpretador irá imprimir o texto "Hello World", exatamente como esperado. Incrível, não? Pois é, bem vindo ao mundo da programação! Você é agora o mais novo programador de computadores!
Por enquanto é só. A minha ideia inicial era escrever mais detalhes sobre o projeto que pretendo desenvolver durante este "curso". Mas me alonguei demais na teoria. Fica a promessa para a próxima semana. Mas posso adiantar que o projeto tem como objetivo escrever um jogo multiplayer, um jogo simples - damas, afinal este é um curso introdutório! Mas não se deixem enganar, tal projeto irá envolver muitas técnicas de programação.
Ficamos por aqui! Até a semana que vem.

quinta-feira, 4 de dezembro de 2008

Post Inaugural

Aprendendo a Programar com Python
Este Blog é fruto de algumas observações que tenho feito conversando com bons amigos. Um dos que me influenciaram foi Astênio Araujo. Numa conversa durante o jantar em comemoração à colação de grau de um amigo em comum, Edmilson Barreto, ele me contou como o seu blog obteve um relativo sucesso, e a dica foi "escreva sobre algo que você tenha interesse". 
Mas este não foi o único motivador para a criação deste blog, foi apenas o motivador para tomar a ação! Eu sempre tive interesse em escrever algo voltado para a programação e, nos últimos anos, tenho convivido com a linguagem Python, a qual acho uma excelente escolha para quem está começando a programar. 
Já ministrei alguns mini-cursos sobre Python enquanto era aluno de graduação na UFRN, onde os participantes se mostrarem empolgados com o resultado que pode ser obtido com a dedicação de apenas algumas horas. 
Por fim, recentemente um outro amigo me procurou para saber a respeito de cursos na área, pois ele tem interesse em dar os primeiros passos em direção à arte da programação de computadores. Após alguma procura, verificamos que na nossa cidade apenas um curso utiliza a linguagem Python, voltada para a progração de aplicações WEB, que é ministrado pela Diginet.
Este blog visa então, satisfazer minha vontade pessoal e dar mais uma opção a quem quer se aventurar neste novo mundo. Outro objetivo deste blog é testar minha disciplina pessoal.
A ideia é publicar posts semanais, sempre introduzindo um novo conceito e propondo um exercício quando possível. Serão estabelecidas algumas metas - sejam elas de curto ou médio prazo - para que possamos ter um caminho bem definido.
Por enquanto é só! Na próxima semana irei escrever um pouco sobre o que é programar e descrever o projeto que tenho em mente para realizar durante essa jornada.