Thursday, May 26, 2016

Módulos

Módulos, exceções e arquivos

 Uma vez escrito, um script pode ser salvo em arquivo com terminação ".py" (py de Python). O mesmo vale para script com definições de funções.

Um arquivo .py é chamado de módulo e aqui vem a parte interessante: um módulo pode ser incorporado em outro script, fazendo sua importação via o comando import.

import meu_modulo
Para isto dar certo o módulo deve estar no diretório corrente, ou no caminho de busca do Python. Uma vez importado o módulo todas suas funções passam a fazer parte do script importador, podendo ser chamadas e usadas normalmente.

Coleções de módulos são agrupadas num package. O mesmo import pode importar a coleção inteira numa só vez.

 


Quando escrevemos um programa uma série de coisas são assumidas sobre o meio ambiente onde ele vai rodar. Por exemplo ao baixar um arquivo pela internet assumimos que a url é correta e bem formada, que o site ainda existe e funciona, que a página html está lá e será encontrada, etc.

Na prática qualquer destas hipóteses pode falhar. O mesmo pode acontecer ao ler um arquivo que assumimos ser  codificado num dado padrão, mas que pode estar em outro resultando em leitura de lixo ou até travamento do programa.

Para gerenciar este tipo de problema existe o mecanismo de exception  (exceção) no Python. O programador que cria o acesso à internet ou cria o leitor de arquivos, ao encontrar uma situação como descrito cria um objeto exceção disponível para o usuário e lança um aviso de exceção, o que interrompe a execução do programa e volta a execução para o programa usuário.

Usando o comando try e seu par, except  é possível ler o objeto exceção lançado e tomar providências de acordo, por exemplo imprimir mensagem de anomalia.

 


Estes tópicos e ainda uma introdução à leitura de arquivos estão no novo notebook que disponibilizei aqui.

Monday, May 23, 2016

Funções

Funções

Funçoes são procedimentos conceitualmente autônomos, isto é tem um propósito próprio bem definido. A grande diferença é que funções podem ser chamadas recebendo dados externos na forma de seus argumentos, e podem retornar valores e objetos resultantes de sua computação.

Todas as variáveis que funções utilizam tem escôpo local, isto é não são visíveis nem acessíveis pelo programa que as invoca.  Toda a comunicação entre o mundo da função e o mundo do programa é via argumentos na entrada e valores retornados na saída.

Funções são super importantes por diversas razões, entre as quais:

  • decompõem o problema maior em blocos conceituais menores, facilitando a programação
  • podem ser reutilizadas em outros programas, tornando programar mais eficiente e mais fácil
  • tornam o programa mais fácil de depurar por partes
Em Python funções são objetos de primeira classe e podem ser manipuladas como tal. 

Coloquei no Dropbox um notebook sobre funções aqui.
 

Sunday, May 22, 2016

Loops

Loops podem ser complicados

Vamos escrever um loop (termo para repetição, universalmente adotado) para percorrer uma lista imprimindo seus elementos. Coisa simples agora que você conhece os comandos básicos do Python.

L = [1, 2, 3, 4, 5]
for x in L:
        print(x)
            print('Fim.')
 
A saida deste sript é:
1
2
3
4
5
Fim.

Agora vamos modificar o script ligeiramente e eu gostaria que você estudasse o que acontece e tivesse uma explicação clara do ocorrido. Se você tiver IDLE instalado digite o script e observe sua execução:

L = [1, 2, 3, 4, 5]
    c = 6
for x in L:
                if x < 10:
           L.append(c)
           c = c + 1
       print(x)
        print('Fim.')
A saida observada será:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Veremos o que houve em post futuro. (Dica: você está mexendo no limite da repetição).

Agora analise o que ocorre no script abaixo, quase igual ao anterior:
L = [1, 2, 3, 4, 5]
    c = 6
for x in L[:5]:
                if x < 10:
           L.append(c)
           c = c + 1
       print(x)
            print('Fim.')
Que saida vamos obter? Digite o código no IDLE e execute. O que você esperava é o que ocorre?

(dica: Quando voce fatia (slice) a lista para obter L[:5] o Python faz uma cópia deste pedaço da lista L original. Portanto você passa a ter a lista L original e uma cópia de pedaço, L[:5] )
 

Friday, May 20, 2016

Comandos do Python

Comandos

Neste notebook introduzimos os comandos básicos do Python.

O notebook pode ser baixado aqui.

Além de apresentar os comandos if for while break ilustramos resolvendo alguns dos exemplos da lista de exercícios 1.

A versão HTML do notebook está anexada em Recursos.

 

 

Thursday, May 19, 2016

Conjuntos, dicionários e mapeamentos

Ainda tipos de dados nativos

Coloquei no Dropbox mais um notebook Jupyter com texto sobre conjuntos (set), dicionários (dict) e um tópico mais avançado sobre "comprehensions" que é o equivalente em Python 3 do map, lambda em Python 2.

Este notebook pode ser baixado aqui.

Tambem coloquei aqui no blog uma página HTML cópia deste notebook, que pode ser vista nos Recursos na barra direita do blog.

Em Python o tipo de dados set modela a noção de conjunto, ou seja uma coleção de elementos quaisquer onde não existe ordem entre eles e todos são únicos (sem repetição de elementos).

O tipo de dados dict é extremamente útil. Dicionários são pares compostos por chave e valor. Encontrar um valor dada uma chave é uma operação muito rápida e eficiente. A operação reversa (e não unívoca) pode ser bem mais lenta.

Na prática usaremos dicionários frequentemente.





Comprehensions são uma forma de mapear listas, dicionários ou conjuntos em outros similares, aplicando alguma função em cada elemento.

Por exemplo, dada uma lista de números queremos um modo rápido de extrair todos os pares. Isto pode ser feito com um comando, um "list comprehension", da seguinte forma:

 L = [ 1, 2, 3, 4]
 Lpar = [x for x in L if x % 2 == 0]
Num certo sentido isto lembra SQL, não é mesmo?




Com isto cobrimos o básico de tipos de dados e passaremos adiante para comandos do Python.

Breve estaremos em condição de codificar e executar nossos algoritmos em Python.



Wednesday, May 18, 2016

Atraso no incio do curso

Atrasos no início do curso

Devido a fatores diversos o início do curso tem sido postergado. Para aqueles que mostram interesse maior sugiro que tentem começar em casa mesmo, usem este blog como guia e sintam-se a vontade para me consultar por email ou até comentários aqui no blog mesmo.

Tipos de dados

Tipos de dados do Python

Python é uma linguagem orientada a objetos e todos termos num programa representam objetos. Objetos são instâncias do que se chama tipos de dados.

Os tipos de dados mais elementares na linguagem incluem caracteres, números e variáveis.

Outros tipos de dados são pré definidos no interpretador Python e utilíssimos, usamos todo dia. Estes são:
  • strings
  • list
  • tuple
  • set
  • dict (dicionário)
Vamos examinar os três primeiros agora e os dois restantes em post futuro. Coloquei um notebook aqui para vocês baixarem e estudarem. 

Como de hábito anexei a versão HTML na lista de Recursos.




Monday, May 16, 2016

Conceitos básicos do Python

Python: caracteres, números e variáveis

Coloquei no Dropbox um primeiro Jupyter notebook introduzindo caracteres, variáveis e alguns outros conceitos básicos do Python. 

A página pode ser baixada aqui.  

Releia as instruções sobre como baixar os notebooks e como usá-los dadas em posts anteriores. 

Claro está que você já deve ter baixado e instalado com sucesso o Anaconda 3 na sua máquina.

Para as pessoas com dificuldade para baixar este notebook ou executá-lo vou colocar nos Recursos uma versão HTML do notebook. Infelizmente ela é só isto, uma página HTML estática.

Wednesday, May 11, 2016

Jupyter notebook

Jupyter notebook


Jupyter notebooks são páginas visíveis num browser (Firefox, etc) que permitem misturar texto, código executável em Python, imagens, figuras etc.

Este tipo de página é um recurso que permite estudo interativo, onde o leitor pode executar e modificar código e ver os resultados sem sair da página que está lendo.

Neste curso faremos a experiência de usar estes notebooks para nossos textos sobre Python.

À propósito, o nome da aplicação que ativa estes notebooks vem das três linguagens de programação suportadas pelo engine:

Jupyter = Julia + Python + R

Vejamos se o Jupyter esta instalado em seu notebook. Se você baixou Anaconda 3 com sucesso então o Jupyter deve estar instalado. Em todo caso o teste é simples:
  • abra uma janela de comando (Power Shell ou cmd.exe) e digite:
  •  >>jupyter notebook
  • após algum tempo deveriam aparecer uma série de mensagens do systema:
Microsoft Windows [Version 10.0.10586]
(c) 2015 Microsoft Corporation. All rights reserved.

C:\Users\ps>jupyter notebook
[I 20:36:12.075 NotebookApp] Serving notebooks from local directory: C:\Users\ps
[I 20:36:12.079 NotebookApp] 0 active kernels
[I 20:36:12.080 NotebookApp] The IPython Notebook is running at: http://localhost:8888/
[I 20:36:12.083 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[I 20:38:26.353 NotebookApp] Kernel started: 1cd69f62-8ce4-42e4-b51a-0306813efc3f
 Em seguida o seu browser é ativado e nele aparece um tab intitulado Desktop/jupyter, com uma página tendo este logo no cabeçalho:

 
 Se tudo isto ocorrer então parabens, você tem o Jupyter instalado e ativo. Em todo caso voce pode obter mais informação aqui.

Explicaremos no laboratório como usar um notebook destes (é simples). Se você não presenciar existem montes de referências na internet. Aqui tem breve ajuda no site oficial do projeto Jupyter. Existem videos tutoriais no YouTube, como este aqui. Uma referência bem completa que vale a pena ver está aqui.





Vejamos como usar o Jupyter em nossos estudos de Python. Preparei uma página jupyter notebook com mini-aula de web scraping. Faça de conta que é página do curso e treine como usá-la. 

  1. O primeiro passo é baixar o notebook usando o link dado aqui.
  2.  Note que é baixada uma página cheia de códigos e html. Isto é normal.
  3. Use o menu em seu browser para salvar esta página. No Firefox é preciso ativar a barra de menu (botão direito, clique no topo, selecione Menu Bar).
  4. Clicar File\Save Page As...\text files, um nome para a página e o sufixo ".ipynb" (quer dizer "interactive python notebook")
  5. No diretório onde seu browser salvou a página deve haver um arquivo "nome.ipynb".
  6.  Ligue o jupyter como explicado acima e na página que é aberta você pode navegar até o diretório onde salvou o arquivo "nome.ipynb". Clique no arquivo e o notebook jupyter deverá ser aberto no browser.
  7.  Dai em diante estude o conteúdo, execute os códigos e script Python e divirta-se.
  8. À propósito a página que você baixou tem o título

    Reverse engineering a dynamic web page



Uma vez tendo aberto um notebook em seu browser observe o layout do mesmo. No topo você tem um toolbar com menus genéricos para salvar o notebook, editar, help, etc. O menu Cell tem um submenu All Output que por sua vez tem um submenu Clear. Este é útil para limpar e resetar outputs de todas execuções de scripts e comandos Python armazenados no notebook. Recomendo que use-o sempre que abrir um notebook pela primeira vez.

Um notebook é composto essencialmente de dois tipos de células (cells): code cells e markdown cells.

Markdown cells contém texto. O nome markdown vem do tipo de formatação usada para escrever estes textos. Markdown é uma espécie de HTML super simplificado que permite humanos escreverem textos padrão html naturalmente e sem dor. Você pode encontrar mais informação sobre Mardown aqui.

Code cells contém código Python que pode se r executado. Para executar o código em uma célula code clique na mesma e digite "shift + enter".Isto é assim porque o código na célula pode ter muitas linhas e o "enter" simples é reservado para dar uma nova linha no código.

As células de código tem sempre um prefixo In[d] onde d é um número sequencial. Isto simboliza "input", ou seja código que você alimenta no interpretador Python. Assim que o código executar, aparece abaixo a saida do interpretador numa célula texto markdown, prefixada com Out[d] 

Tuesday, May 10, 2016

Inicio da trilha

A trilha começa aqui

Interpretador Python

Você deve ter lido o post sobre Material recomendado. Portanto faça o que lá é sugerido e instale já o pacote Anaconda 3 em seu notebook ou desktop.

É conveniente ter um atalho no desktop para a interface de comando do Windows, "cmd.exe". Melhor ainda é um atalho para a interface de comando avançada, Windows Power Shell.

Sugiro que instale o anaconda diretamente em C:\Anaconda3 Após instalar verifique a documentação para verificar se foi tudo instalado corretamente.

Um teste simples é abrir a interface de comando e digitar:

>Python

Deve aparecer algo como:

PS C:\WINDOWS\system32> python
Python 3.5.1 |Anaconda 2.4.1 (64-bit)| (default, Feb 16 2016, 09:49:46) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>


Digite o seguinte comando e observe a resposta:

>>> print('hello world')
hello world
>>>


Isto demonstra que o interpretador Python foi instalado corretamente e está vivo.

Atalhos no desktop

Uma das primeiras coisas a fazer à seguir é colocar no seu desktop um atalho para o IDLE. O IDLE é uma interface simples para o interpretador Python que você vai usar muito. 

Para criar este atalho navegue para C:\Anaconda3\libs\idlelib e procure um arquivo idle.bat Crie um atalho (botão direito do mouse, criar atalho), mova o atalho para o desktop e renomeie como IDLE (ou como preferir).

OK. 


Precisaremos ainda deixar atalho para o jupyter notebook, mas isto fica para outro post.

Outros programas e pacotes do Python

Outros programas que serão úteis no futuro  incluem o Notepad++ e o XmlNotepad. Se possivel baixe-os e deixe-os instalados. 

O Python conquistou sua popularidade graças às muitas bibliotecas de programas ("modulos", modules) open source escritos por programadores voluntários da academia e da industria. Este repositórios permitem o download gratuito de  ferramentas de software para uso da comunidade.

Vamos precisar de diversos pacotes de módulos, conforme listados na referência Automate the Boring Stuff With Python.

Para baixar tais pacotes e fazer sua instalação existe um programa chamado "pip" que já foi instalado com o Anaconda. Existem outros programas de função similar mas usaremos o pip de preferência.

A utilização é simples: abra a janela de comandos do Power Shell e digite

>pip install nome_do_pacote_desejado

Faça já o teste com estes pacotes, todos usados em exemplos do livro acima:


  • pip install requests
  • pip install beautifulsoup4
  • pip install selenium
  • pip install pprint
  • pip install csv
  • pip install re

Muitos outros pacotes de módulos serão baixados mais adiante.

Python

Python

Uma breve nota histórica. 


Python foi criado por um programador e über hacker holandês, Guido Van Rossum, que depois foi trabalhar na Google onde ficou aperfeiçoando esta linguagem e seu interpretador. Atualmente Guido trabalha no Dropbox.




Originalmente intencionado para Unix/C hackers o nome "Python" vem do grupo comediante inglês Monty Python e nada tinha a ver com cobras.

Os objetivos do Python nas suas palavras:
  • an easy and intuitive language just as powerful as major competitors
  • open source, so anyone can contribute to its development
  • code that is as understandable as plain English
  • suitability for everyday tasks, allowing for short development times
Python é uma das linguagens mais populares e que mais crescem em número de usuários.

Sunday, May 8, 2016

Algoritmos

Algoritmos



Postei três páginas sobre algorítmos. 

Alguns autores usam o termo algorítmo liberalmente para qualquer procedimento. Outros mais precisos (talvez um pouco pedantes?) usam o termo para o que em Matemática se denomina método efetivo ( effective method ). 

Prefiro usar o termo liberalmente como sinônimo de procedimento.

Nas páginas Algoritmos e Algoritmos 1 descrevo o que chamei de padrão iterativo  para solução da maioria dos problemas que você provavelmente verá em seu dia a dia. Esta é uma vasta classe de tarefas que se conformam num paradigma relativamente simples:

É dado um conjunto de objetos e deve-se aplicar um mesmo procedimento para cada objeto deste conjunto.

Daí o nome iterativo para este padrão.

Outros tipos de problemas existem e a página Algoritmos 2 descreve um dos métodos mais poderosos que é o de algoritmos recursivos. Mas é tambem um paradigma relativamente complicado e fácil de induzir a erros.

Não existe uma classificação única para algoritmos. As que existem são parciais e dependem de ponto de vista.

Com estas 3 páginas termino a parte inicial deste módulo referente a pseudo código e algoritmos. Daqui para a frente vamos trabalhar com a linguagem de programação Python.



Ah sim, este é o logo oficial do Python.  

Thursday, May 5, 2016

Exercícios

Nova lista de exercícios

A lista de exercícios 2 já está aqui. Tentem resolver tudo.

Ah sim, uma versão HTML está aqui.

Por enquanto é só.

Wednesday, May 4, 2016

Mais pseudo código

Mais pseudo código

Hoje postei uma página revisitando comandos para usar em nosso pseudo código. A intenção ao formalizar um pouco os comandos que usamos no pseudo código é aproximar mais os termos usados com os termos de uma linguagem de programação, no caso com o Python.

Também depositei uma primeira lista de exercícios no Dropbox. Se você não tem add-on ou extensão Markdown no seu browser existe uma versão HTML da lista aqui. Alias sugiro que instale uma extensão destas, a qualidade da imagem resultante é muito boa. 

Daqui uns dias publico aqui soluções dos exercícios. 

Uma dica: se a página de exercícios versão HTML aparecer com caracteres estranhos mude no seu browser o View\Text Encoding para Unicode. O texto é em Português e acentuação, tilde, etc confundem a codificação padrão  anglo-saxonica. 


Tuesday, May 3, 2016

Pseudo código

Pseudo código

Pseudo código é a descrição informal de um procedimento usando linguagem natural misturada com trechos de programas e fórmulas matemáticas.

E para que serve isto?  No início do processo de programação é comum esboçarmos soluções que depois são modificadas e mesmo descartadas. Usando pseudo código agiliza muito este processo, comparado com programar diretamente numa linguagem de programação.

Pinçando um trecho desta referência:

What is pseudocode? A simplified, half-English, half-code outline of a computer program. It is sometimes given other names, such as Program Definition Language (PDL).
Why use it? Because it can help you to clarify your thoughts, and design a routine properly, before you start to write any code.
One of the hardest things to resist is the temptation to start writing code. Compared to typing source code, designing the functions which will make up a program seems dull. But spending ten minutes to think out carefully the pros and cons of different approaches to the goal can save you hours of time later on.
Another reason to use pseudocode: it turns into comments in your finished program, so you're save much of the task of going back to a finished program and inserting comments.

Vale a pena criar o hábito salutar de rascunhar em pseudo código  o seu procedimento, antes de investir tempo programando em Python ou outra linguagem.

Hoje postei uma página do curso dedicada a pseudo código. Outras mais virão.

Tambem postei aqui outra página introduzindo comandos e procedimentos.

 

Monday, May 2, 2016

Introdução à computação

Introdução à Computação

Na barra lateral direita do blog vocês encontram um ítem chamado Recursos. Ali há vários subtópicos com páginas de conteúdo deste curso.

Hoje postei duas páginas chamadas "Introdução à computação 1 e 2" com matéria de nossa aula piloto. Nos próximos dias postarei outras páginas onde vamos entrar em pseudo-código e bastante exercícios de programação em linguagem natural (ou quase natural). 

Sunday, May 1, 2016

Primeiros passos

Primeiros passos...

É comum ensinar linguagens de programação pulando direto em comandos, tipos de dados, etc.  Neste curso faremos um introito diferente, gastando algum tempo com o que é a real essência de programação de computadores.

Programas podem ser escritos em diversas linguagens, para efetuar a mesma tarefa. Programas em C#, em C++, em Java, scripts em Matlab, scripts em Python, etc. São programas diferentes mas resolvem a mesma tarefa. Ou seja, existe uma comunalidade entre eles. E o que é esta comunalidade?

O que ocorre é que programas são somente a codificação de um procedimento numa dada linguagem de programação. Dado um procedimento podemos escreve-lo em Python ou em outra linguagem.

E o que é um procedimento? Bem, uma receita de cozinha é um exemplo clássico:

  1. Coloque a água para ferver
  2. Quando estiver fervendo coloque o sal, 1 colher de óleo
  3. Quando o macarrão estiver mole, tire do fogo e escorra a água no escorredor de macarrão
  4. Lave o macarrão
  5. Faça o molho de sua preferência em outra panela
Um procedimento é uma sequência ordenada de passos que devem ser executados na ordem dada, tem um inicio e tem um fim e efetuam uma tarefa dada. 

Entretanto procedimentos podem nem sempre terminar, seja pela natureza do problema, seja por algum defeito do procedimento. Um exemplo de tal defeito são instruções em certo shampoo para cabelos:

  1. molhe o cabelo e aplique o shampoo.
  2. enxague e repita.
 Interpretado literalmente por um robô ou computador este procedimento jamais termina (enquanto houver shampoo e água...)



Procedimentos que sempre terminam (ainda que possam demorar muito tempo executando) são chamados de algoritmos.

Nesta primeira parte do curso vamos estudar métodos para exprimir algorítmos e exercitar sua construção. Construir algorítmos é uma arte pois não existem maneiras garantidas de fazê-lo mecanicamente. Portanto a prática constante é essencial para adquirir heurísticas de solução algoritmica de problemas.

George Polya escreveu um pequeno livro maravilhoso sobre como resolver problemas, particularmente problemas matemáticos. How To Solve It. Leitura imperdível (existem versões modernas com coautores respeitáveis)