Monday, October 31, 2016

Aula 6 prev

Preparando a aula 6

Devido a fatores externos nossa aula 6 foi adiada mais uma vez. Enquanto a aula regular não ocorre sugiro aos que assistem o curso baixarem os notebooks referentes ao assunto daquela aula e estudarem por conta própria.

Os notebooks são estes, na ordem:
As instruções sobre como fazer o download de notebooks Jupyter e usá-los foram dadas em diversos posts anteriores.

Aqueles que por alguma razão não consigam os notebooks dos links acima podem usar suas cópias HTML na barra direita deste blog. Entretanto como são páginas estáticas vocês vão precisar digitar e executar todos exemplos no IDLE.

Em breve vou postar aqui uma série sobre o download e organização de dados da CD, incluindo uso de comandos para baixar páginas HTML da internet, como unzipar arquivos .zip e como manipular arquivos e diretórios

Tuesday, October 11, 2016

Aula 5

Aula 5 - Tipos de dados set e list

 Os tópicos da aula 5 foram exercícios com listas, o tipo de dados set (conjuntos) e list comprehensions (listcomp).

Foi também implementado um exemplo símples de análise de texto. O Jupyter notebook deste exemplo pode ser baixado aqui. Você vai precisar dos arquivos texto para seguir este exercício. Os links foram dados no post anterior. Baixe estes arquivos e coloque-os no mesmo diretório onde colocar o Jupyter notebook.

Se não puder usar o Jupyter notebook uma cópia HTML estática está nos Recursos, na barra direita do blog.

Nestas cinco aulas iniciais cobrimos mais ou menos os capítulos 1, 2 e 4 do livro de referência (Automate the Boring Stuff...).




Relembremos como usar um Jupyter notebook:

  • baixe um notebook usando um link neste blog, tal como este aqui 
  •  aparece um texto no browser, como isto aqui:

{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Usando list, set e str para análise de um texto\n",
    "\n",
    "Nesta lição vamos exercitar uso de listas, conjuntos e strings c....
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Vamos ler o texto, que está no arquivo 'cienciapolitica.txt'."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
..................................................
.........................
  • copie este texto e cole no editor Notepad (por exemplo).
  • salve o texto do editor usando um sufixo .ipynb no arquivo salvo
 Ao abrir o Jupyter notebook navegue até o arquivo salvo, que será visto como um notebook "normal"

Sunday, October 9, 2016

Aula 5 prev

Preparando a aula 5

Na aula 5 vamos apresentar um tipo de dados nativo do Python que implementa o conceito de "conjunto": o tipo set

Veremos tambem o importante conceito de comprehensions e generative expressions, que fazem o Python ser agradável e eficiente de programar. 

Finalmente veremos um exemplo ilustrativo com uma análise de texto simples. Para isto você vai precisar dos arquivos de stopwords e também de arquivo com o texto exemplo, que podem ser baixados aqui e aqui






Monday, October 3, 2016

Aula4

Aula 4


Na aula #4 revimos alguns tipos de dados básicos: str (string), tuple e list.

Fizemos alguns exercícios de programação, inclusive uma versão do exemplo3@aula1. O objetivo foi mostrar como a implementação no espírito pythonista é espetacularmente mais simples.





Dado um texto, conte o número de palavras que contém a letra a e a letra b

Solução força-bruta:

''' Conta o numero de palavras nde um texto que contenha a letra a e a letra b.
    Percorre o texto caracter por caracter mantendo dois estados:
                     1 => fora de uma palavra
                     2 => dentro de uma palavra
    No estado 2 mantem dois flags, acheiA e acheiB para lembrar
    se achou as letras a e b respectivamente.
    No estado 2 quando ambos flags forem verdadeiros, incrementa
    a contagem de palavras e lembra o feito para evitar contagem
    repetida da mesma palavra.
'''


txt = input()
conta = 0

# flags de controle dos estados
na_palavra = txt[0].isalnum()
acheiA = False
acheiB = False
ja_contei = False

# percorre o texto caracter a caracter
for car in txt:
    # verifica se entrou numa palavra
    if not na_palavra:
            if car.isalnum():
                # entrou numa palavra
                na_palavra = True
    else:
        # estavamos numa palavra: verifica se palavra terminou
        if not car.isalnum():
            # palavra terminou: reseta todos flags
            na_palavra = False
            acheiA = False
            acheiB = False
            ja_contei = False

    # se estamos numa palavra, verifica se caracter é 'a' ou 'b'
    if na_palavra:
        if car == 'a':
            acheiA = True
        if car == 'b':
            acheiB = True
           
        # se palavra contem a e b, incrementa contagem de palavras
        if acheiA and acheiB:
            # mas somente se ainda não tinha contado esta palavra
            if not ja_contei:
                conta = conta + 1
                ja_contei = True

# imprime numero de palavras encontradas

print('Numero de palavras encontradas = ', conta) 



Solução estilo pythonista:

'''
Conta palavras no texto que contenham a letra a e tambem a letra b.
'''


txt = input()
lst = txt.split()
wrd = [x for x in lst if 'a' in x and 'b' in x]

print('Numero de palavras encontrado =', len(wrd)) 






 
Recomendo que leiam os tópicos relevantes em Recursos. Leiam tambem o texto e exemplos relevantes no tutorial oficial do Python

Depositei o material da aula 4 no dropbox, aqui