Aprendendo a programar em python

Python é uma linguagem de programação de alto nível, com uma sintaxe muito simples e relativamente fácil de aprender. As grandes vantagens do Python, a meu ver, são a alta produtividade, a farta documentação e a facilidade de manutenção.

Estamos acostumados a pensar em programação como algo a ser feito por um profissional contratado exatamente para isso. Eu não gosto muito dessa visão. Saber programar é algo tão útil e valioso que mesmo sabendo muito pouco sobre o assunto você pode ter grandes ganhos de produtividade em praticamente qualquer tarefa que requeira o uso de um computador. Saber programar é como saber fazer contas ou saber escrever: é útil para um conjunto tão grande de tarefas que é razoável supor que quase todos ganhariam em saber um pouco sobre o assunto.

É certo que sempre será necessário contratar um especialista para resolver tarefas complexas. Todos sabem que é importante usar fita isolante para evitar que um fio desencapado cause acidentes. Mesmo assim quase todos chamam um eletricista quando se trata de fazer um trabalho mais sério. Da mesma forma, praticamente todo mundo sabe redigir suas próprias cartas, mas preferiria contratar um revisor caso decidisse publicar um livro.

Aprender a programar é provavelmente útil para todos os que fazem tarefas de escritório, incluindo pesquisadores, economistas, sociólogos, burocratas, contadores, advogados, etc. É certo, também, que não é um conhecimento trivial, exige certo esforço. Não hesite em contratar um profissional se isto parecer necessário, mas se o seu trabalho consiste em rotineiramente usar um banco de dados (ou criar um), rotineiramente capturar dados de uma grande série de sites, ou buscar dados em um grande conjunto de arquivos, você provavelmente realizaria estas tarefas de forma muito mais fácil e rápida com um bocado de conhecimento sobre programação.

Outro motivo para aprener a programar, provavelmente muito mais importante, é que é divertido. É um ótimo hobby porque você pode fazer em praticamente qualquer lugar, com muito ou pouco tempo livre, porque você aprende lógica, exercita a mente e faz coisas úteis e interessantes.

Primeiros passos em Python

Vou partir do princípio de que você está usando Linux. Se estiver no Windows, pesquise sobre como instalar o Python. Sugiro instalar o python3.

No Linux abra um terminal e digite python3. Pronto, agora você já está usando python. Vamos começar com uma tarefa ao mesmo tempo simples e útil: suponha que você precisa somar diversos números para tomar uma decisão, por exemplo, você está pensano em fazer uma viagem e quer escolher o destino. Daí você quer somar tudo para tomar sua decisão. Acontece que enquanto pesquisa por um destino você esquece os dados do outro e acaba se perdendo nessa confusão. No terminal python, digite o seguinte:


dias_de_viagem = 4
hotel_pro_cachorro = 70

total_gasto = dias_de_viagem*hotel_pro_cachorro
print("Total necessário: "+str(total_gasto)

Viu só, não foi tão difícil. E você já aprendeu um bocado sobre programação. Vamos por partes. Primeiramente você declarou duas variáveis: dias_de_viagem e hotel_pro_cachorro e atribuiu a elas determinados valores. Os nomes de variáveis não podem conter espaços, por isso usamos o "_". O símbolo de igual "=" serve para atribuir o valor para a variável. Assim, você guardou o valor 4 na variável dias_de_viagem e o valor 70 na variável hotel_pro_cachorro.

O próximo passo foi criar uma nova variável que contivesse o valor do hotel multiplicado pelos dias de viagem. Aqui você precisou usar o operador de multiplicação *. Este é um dos mais estranhos. Para somar (+), subtrair (-) e dividir (/) usamos os símbolos com os quais já estamos acostumados.

O último passo deve ter sido o mais difícil. Você mandou o python "imprimir" (print) na tela. Em programação normalmente chamamos o ato de criar o texto na tela de "print" ou "echo". Em python chamamos de "print". Print é uma função. Você executou sua primeira função! Para executar uma função nós colocamos parênteses após o nome dela e dentro dos parênteses colocamos os parâmetros. Assim, dentro dos parênteses da função print colocamos como parâmetro o que queremos que o python imprima.

Note que dentro do parênteses há um texto entre aspas. O texto entre aspas é simplesmente um texto. Chamamos isso de "string", ou seja, string é basicamente um texto. Os números não estão entre aspas. Por isso o computador não os trata como texto, mas como números, e é capaz de somá-los, dividi-los, etc. Note, no entanto, que nós somamos o texto "Total necessário: " com o total_gasto, ou seja, somamos um texto com um número. O python não gosta disso porque ele não sabe somar números com textos, isso não faz sentido. Por isso, antes de somar o número com o texto, tivemos de transformar o número em um texto e para isso usamos a função str(). A função str(total_gasto) converteu o número 280 na string "280" e assim nós pudemos somar o resultado da função com a outra string.

Dicionários e funções

Bem, dava para ter feito isso numa calculadora. Algumas até aceitam variáveis. E se eu precisasse armazenar vários números para só depois somar tudo? Vamos tentar fazer algo mais útil. Digite o seguinte:


fortaleza={'hotel':300, 'passagem': 520, 'alimentacao': 120}
florianopolis={'hotel':320, 'passagem': 420, 'alimentacao': 320}
gramado={'hotel':500, 'passagem': 580, 'alimentacao': 220}
guaruja={'hotel':300, 'passagem': 120, 'alimentacao': 180}
dias_de_viagem = 3
hotel_do_cachorro = 70

def total_viagem(cidade, dias, hotel_cachorro):
  return (cidade['hotel']*dias)+cidade['passagem']+(cidade['alimentacao']*dias)+(hotel_cachorro*dias)

print(total_viagem(fortaleza, dias_de_viagem, hotel_do_cachorro))
print(total_viagem(florianopolis, dias_de_viagem, hotel_do_cachorro))
print(total_viagem(gramado, dias_de_viagem, hotel_do_cachorro))
print(total_viagem(guaruja, dias_de_viagem, hotel_do_cachorro))

Ufa, agora você sabe os valores totais de cada uma das cidades levando em consideração diversos gastos diferentes. Além disso aprendeu mais alguns conceitos importantes do python. Vamos rever passo a passo.

Nas primeiras linhas, as que criam as variáveis com nomes de cidades, estamos usando uma estrutura conhecida no python como dicionário. Em outras linguagens estruturas parecidas recebem o nome de arrays ou vetores. Trata-se de uma estrutura contendo chaves e valores, ou seja, para cada chave temos um valor. Assim, na variável fortaleza, a chave "hotel" tem o valor 300. Dicionários são criados usando o símbolo "chave" {}, os itens são separados por vírgulas e entre cada chave e seu valor usamos um ponto-e-vírgula.

Em seguida nós criamos nossa própria função, chamada de total_viagem. Uma função é basicamente um pedaço de código que podemos invocar em qualquer outro momento no código. Nossa função recebe os parâmetros "cidade", "dias" e "hotel_cachorro". Isto quer dizer que a primeira coisa que passarem para nossa função receberá dentro da função o nome "cidade", a segunda coisa receberá o nome "dias" e a terceira o nome "hotel_cachorro". O que nossa função faz é devolver o resultado de uma operação. O comando "return" serve para devolver um resultado para quem chamou a função. O resultado que queremos devolver é um pouco complicado de se ler, mas é basicamente a soma dos valores de uma cidade em particular, multiplicando pelos dias quando necessário. Note que ao chamar cidade['hotel'] nós estamos usando a chave "hotel" na variável cidade para receber de volta o valor que essa chave tem.

Releia com atenção o código acima e você verá que consegue entender bastante bem.

Salvando seu código

O código agora já está um bocado complexo e acho que vale a pena salvar em um arquivo. Abra um editor de texto (não um processador como o Word, mas sim um editor como o gedit ou notepad++. O Sublime e o Atom são dois editores muito usados hoje em dia) cole o código e o salve com o nome viagem.py. Para rodar o seu código, no terminal, navegue até a pasta onde você salvou o arquivo e digite


python3 viagem.py

Legibilidade do código

A forma como está escrita a soma (tudo na mesma linha) atrapalha um bocado. Vamos melhorar isso:


def total_viagem(cidade, dias, hotel_cachorro):
  gastos_hotel = cidade['hotel']*dias
  gastos_locomocao = cidade['passagem']
  gastos_alimentacao = cidade['alimentacao']*dias
  gastos_cachorro = hotel_cachorro*dias
  return gastos_hotel+gastos_locomocao+gastos_alimentacao+gastos_cachorro

Note que esta segunda versão da função é um pouco mais longa, mas também é bem mais fácil de entender. Este é um dos mais importantes princípios da programação: escreva código legível, fácil de compreender. Isto porque apesar de o computador entender bem o código cumprido que tínhamos antes, corremos o sério risco de errar alguma coisa quando precisarmos alterar o código. Imagine, por exemplo, que você queira mudar sua função para multiplicar por dois os gastos com passagens para ver quanto fica para duas pessoas. Na primeira versão era difícil saber exatamente onde você deveria multiplicar. Nesta segunda versão é bem mais fácil. Pensando bem, podemos melhorar um pouco mais nossa função.


def total_viagem(cidade, dias, hotel_cachorro):
  """Retorna o valor total estimado para uma dada cidade

     considerando diárias, locomoção, hospedagem e gastos com animal de estimação
  """
  gastos_hotel = cidade['hotel']*dias
  gastos_locomocao = cidade['passagem']
  gastos_alimentacao = cidade['alimentacao']*dias
  gastos_cachorro = hotel_cachorro*dias
  return gastos_hotel+gastos_locomocao+gastos_alimentacao+gastos_cachorro

Nesta nova versão incluímos uma string logo abaixo da declaração da função. Esta string é conhecida como "docstring" porque ela explica para que serve a função. Repare que ela não é atribuída a nenhuma variável. Além disso ela começa com três aspas ao invés de uma. Isto porque strings que começam com três aspas podem conter quebra de linha (enters) e as demais strings não

Classes, instâncias e métodos

Nosso código já funciona, mas tem vários problemas. Todas vez que quisermos criar um novo registro de uma cidade precisamos criar um novo dicionário e sempre corremos o risco de errar alguma coisa. Quando programamos em python normalmente utilizamos orientação a objetos para facilitar a criação do código. Trata-se de uma forma de programar que consiste em criar estruturas similares às do mundo real para que o código fique mais legível, mais fácil de escrever e de dar manutenção. Vejamos o código a seguir, que faz a mesma coisa...


class Viagem():
  def __init__(self, hotel, passagem, alimentacao):
    self.preco_hotel = hotel
    self.preco_passagem = passagem
    self.preco_alimentacao = alimentacao
  def custo_total(self, dias):
    total = self.preco_hotel*dias
    total+= self.preco_passagem
    total+= self.preco_alimentacao*dias
    return total

def total_cachorro(dias):
  hotel_do_cachorro = 70
  return dias*hotel_do_cachorro

def total_viagem(cidade, dias):
  return cidade.custo_total(dias) + total_cachorro(dias)

fortaleza = Viagem(300, 529, 120)
print(total_viagem(fortaleza, 3))
print(total_viagem(fortaleza, 5))

florianopolis= Viagem(320, 420, 320)
print(total_viagem(florianopolis, 3))
print(total_viagem(florianopolis, 5))

gramado= Viagem(500, 580, 220)
print(total_viagem(gramado, 3))
print(total_viagem(gramado, 5))

guaruja= Viagem(300, 120, 180)
print(total_viagem(guaruja, 3))
print(total_viagem(guaruja, 5))

Agora vamos tentar entender cada passo. Nas primeiras linhas nós criamos uma Classe. Uma classe é uma representação de um objeto, uma coisa que tem atributos (preço de hotel e preço de passagem) e funções (calcular o custo total). As classes nos ajudam a escrever um código mais parecido com o que nós pensamos no dia a dia. A nossa classe Viagem contém os parâmetros que sabemos que as viagens realmente tem. Note que o nome da classe começa com letra maiúscula.

Mais abaixo, quando criamos as variáveis com os nomes das cidades, usamos a classe Viagem para dizer que aquelas variáveis são instâncias da classe Viagem. Assim, fortaleza, no código é uma instância de Viagem, e por isso tem todos os parâmetros e funções que viagem tem.

A palavra self no código acima tem um significado especial. Ela se refere ao próprio objeto onde aparece. Assim, quando na função custo_total usamos self.preco_hotel, estamos nos referindo ao preço do hotel desta viagem. A cada nova viagem que criarmos este preço poderá ser diferente.

For loolp

Vamos fazer uma simples mudança neste código para ficar mais elegante. Vamos deixar as fuções como estão.



fortaleza = Viagem(300, 529, 120)
florianopolis= Viagem(320, 420, 320)
gramado= Viagem(500, 580, 220)
guaruja= Viagem(300, 120, 180)

for cidade in (fortaleza, florianopolis, gramado, guaruja):
  print(total_viagem(cidade, 3))
  print(total_viagem(cidade, 5))

Aqui substituímos um código que se repetia por um loop. Um loop é basicamente uma repetição de código, então na verdade não mudamos nada, mas deixamos muito mais simples de se ler.

Em python você escreve um loop do tipo for digitando o seguinte: "for" seguido do nome que você quer dar para cada iteração, seguido de "in" seguido de uma lista. Nós ainda não falamos de listas em python. Uma lista é uma sequência de elementos separados por vírgula. Normalmente colocamos parênteses ao redor para facilitar a leitura.

Loops são extremamente úteis e podem se tornar muito complicados. Neste momento, sugiro que você leia com atenção o loop acima e crie um outro você mesmo para assimilar o conceito. Existem outras formas de loop em python.

comments powered by Disqus