Introdução:
OK, Ok, eu sei que vai depender do contexto, de quem está ensinando, de quem está aprendendo, do propósito da aula, etc.
Vou contextualizar para vocês:
Turma de Sistemas de Informação e Análise e Desenvolvimento de Software, 3º Semestre, experiência de linguagem de programação anterior: C.
Objetivo:
Demonstrar o quanto Python é fácil e versátil.
Sobre o Professor:
A aula sobre Python foi ministrada pelo meu amigo e especialista na linguagem João S. O. Bueno <gwidion at gmail dot com>
Qualquer absurdo escrito abaixo é responsabilidade minha, já que essas são minhas anotações e o João pode ter dito banana e eu escrevi tamarina.
Diferenças entre as linguagens:
C --> Compilado
Python --> Bit Code --> Acessa a VM e depois acessa o Hardware
Java --> Bit Code --> Acessa a VM e depois acessa o Hardware
C e Java --> Linguagens Estáticas
Python, Php, Javascript --> Dinâmicas
Python você não declara as variáveis para depois usar, você cria e sai usando. Surgiu em 1991
Sites sobre Python:
http://python.org e http://www.python.org.br
Começando a brincadeira:
Estavamos em um laboratório com CentOS 5, e a versão do python bem desatualizada, mas vamos em frente.
$ python
Python 2.4.3 (#1, Feb 22 2012, 16:06:13)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-52)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
Soma:
>>> 2+2
4
Exponenciação:
>>> 2 ** 4
16
Criar uma string:
>>> 'qualquer coisa'
'qualquer coisa'
>>> "qualquer coisa"
'qualquer coisa'
>>>
Definindo Variáveis:
>>> a=10
>>> a
10
>>> a="deo"
>>> a
'deo'
>>> a="faculdade "
>>> b="politecnica"
>>> a+b
'faculdade politecnica'
Não posso somar texto com número:
>>> "50" + 50
Traceback (most recent call last):
File "<stdin>", line 1, in ?
TypeError: cannot concatenate 'str' and 'int' objects
>>>
Converter dados:
>>> int("10")+20
30
Transformei o texto em inteiro e somei, poderia ter lido de um arquivo texto por exemplo.
Inverso do anterior:
>>> str(20)+"20"
'2020'
Importar a biblioteca para manipulação de comandos do SO:
>>> import os
Mostra o arquivo que contem as funções:
>>> os
<module 'os' from '/usr/lib/python2.4/os.pyc'>
Listar os arquivos do diretório corrente:
>>> os.listdir(".")
['.redhat', '.nautilus', '.viminfo', 'upgrade.log.syslog', '.mysql_history', 'install.log.syslog', '.ICEauthority', '.eggcups', '.gconf', '.bashrc', '.thumbnails', '.dmrc', '.tcshrc', '.recently-used', '.evolution', '.config', '.gnome2_private', '.recently-used.xbel', '.bash_logout', '.cshrc', '.gnome', '.gstreamer-0.10', '\npolicamp\nping www.polysolve.com\nPS1=C:z> ', '.xsession-errors', '.metacity', 'Desktop', '.bash_profile', 'install.log', '.gtkrc-1.2-gnome2', 'anaconda-ks.cfg', '.themes', '.icons', '.Trash', '.esd_auth', '.mozilla', '.gnome2', '.gconfd', 'upgrade.log', '.bash_history', '.openoffice.org2.0']
Pegando informações de um vetor:
>>> arquivos=os.listdir(".")
>>> arquivos[0]
'.redhat'
>>> arquivos[20]
'.gnome'
Arquivos 0,1,2:
>>> arquivos[0:3]
['.redhat', '.nautilus', '.viminfo']
Lista em Python:
>>> b=[1,2,3]
>>> b
[1, 2, 3]
>>> b[0]
1
Em Python tudo são objetos, por isso o "+" se comporta de uma maneira para texto e outra para número.
Chamando métodos:
os.listdir
os --> módulo
listdir --> método
Convertendo para maiúsculas:
>>> b="policamp"
>>> b.upper()
'POLICAMP'
>>> b
'policamp'
>>> arquivos[30]
'.themes'
>>> arquivos[30].upper()
'.THEMES'
Lista de todos os métodos disponíveis para o objeto, uso o dir.
>>> dir (b)
['__add__', '__class__', '__contains__', '__delattr__', '__doc__', '__eq__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__getslice__', '__gt__', '__hash__', '__init__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__str__', 'capitalize', 'center', 'count', 'decode', 'encode', 'endswith', 'expandtabs', 'find', 'index', 'isalnum', 'isalpha', 'isdigit', 'islower', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'replace', 'rfind', 'rindex', 'rjust', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
strip remove espaços em branco:
>>> c = " campinas "
>>> c
' campinas '
>>> c.strip()
'campinas'
Verificar se todos são alfanuméricos: isalpha:
>>> "abcd".isalpha()
True
>>> "abcd5".isalpha()
False
Multiplicar string:
>>> "qwe"*5
'qweqweqweqweqwe'
Ver tamanho da string:
>>> a="Policamp campinas - teste"
>>> len(a)
25
>>> len(b)
25000000
Ver objeto da string:
>>> b[1]
'o'
>>> b[0:100]
'Policamp campinas - testePolicamp campinas - testePolicamp campinas - testePolicamp campinas - teste'
>>>
Programa que pega uma url e conta quantas imagens tem o site (string img):
>>> import urllib
>>> html=urllib.urlopen("http://www.seufuturonapratica.com.br/portal/index.php?id=99").read()
>>> len(html)
55162
>>> print html[0:100]
<!DOCTYPE html
PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<meta http-equiv="Con
>>> html.count("<img")
179
Achar a primeira ocorrencia:
>>> html.find("<img")
4207
Exibir a url:
>>> print html[4207:4350]
<img src="typo3temp/menu/1f118291ac.gif" width="200" height="20" border="0" alt="Avalia��o Institucional" /></a><a href="index.php?id=3036" onf
>>>
LIVRO: O Mínimo Absoluto Que Todo Desenvolvedor De Software Absolutamente, Positivamente Precisa Saber Sobre Unicode E Conjuntos de Caracteres (Sem Desculpas!)
Fonte: http://local.joelonsoftware.com/wiki/O_M%C3%ADnimo_Absoluto_Que_Todo_Desenvolvedor_De_Software_Absolutamente,_Positivamente_Precisa_Saber_Sobre_Unicode_E_Conjuntos_de_Caracteres_%28Sem_Desculpas!%29
>>> print html[4207:4350].decode("latin1")
<img src="typo3temp/menu/1f118291ac.gif" width="200" height="20" border="0" alt="Avaliação Institucional" /></a><a href="index.php?id=3036" onf
Existe o método encode também, além do encode.
Quero pegar todas as url:
split corta o texto:
>>> c="abc, def, fgh"
>>> c.split(",")
['abc', ' def', ' fgh']
>>> imagens=html.split("<img")
>>> len(imagens)
180
>>> print imagens[1]
src="typo3temp/menu/1f118291ac.gif" width="200" height="20" border="0" alt="Avalia��o Institucional" /></a><a href="index.php?id=3036" onfocus="blurLink(this);" >
>>> print imagens[2]
src="typo3temp/menu/3c997a0c3b.gif" width="200" height="20" border="0" alt="CPA" /></a><a href="index.php?id=5811" onfocus="blurLink(this);" >
O For do python percorre elementos de uma sequencia:
>>> for letra in "palavra":
... print letra * 3
...
ppp
aaa
lll
aaa
vvv
rrr
aaa
Nao preciso abrir chaves, mas preciso identar...
Posso cortar dados de uma string também:
>>> "policamp"[2:]
'licamp'
Mostrou a URL de todas as imagens:
>>> for tag in imagens[1:] :
... print tag.split('"')[1]
...
Para aprender uma linguagem precisamos aprender 3 coisas:
for, if e como definir uma função:
IF:
>>> a =1
>>> if a == 1:
... print "a vale 1"
... else:
... print "nao"
...
a vale 1
Definir a Função:
>>> def soma (a, b):
... return a + b
...
>>> soma(4, 5)
9
>>> soma("a", "b")
'ab'
>>> soma("a", 5)
Traceback (most recent call last):
File "<stdin>", line 1, in ?
File "<stdin>", line 2, in soma
TypeError: cannot concatenate 'str' and 'int' objects
>>> def testa(a) :
... if a == 1:
... print "a vale 1"
... elif a < 5:
... print "a eh menor que cinco"
... else:
... print "a eh grande"
...
>>> testa(1)
a vale 1
>>> testa(5)
a eh grande
>>> testa(4)
a eh menor que cinco
$ vi alo.py
# coding:utf-8
print "alô mundo"
$ python alo.py
alô mundo
Capturar dados:
$ vi alo.py
# coding:utf-8
nome = raw_input("seu nome ? ")
print "seu nome é", nome
$ python alo.py
seu nome ? André
seu nome é André
Pegar dados na sequencia inversa:
>>> a = [10,20,40]
>>> a[-1]
40
>>> a[-2]
20
>>> "abcde"[-1]
'e'
Programa que pergunta a url e baixa as imagens:
$ vi alo.py
# coding:utf-8
import urllib
def salva_imagem(url):
try:
dados = urllib.urlopen(url).read()
except:
print "erro para ", url
return
nome = url.split("/")[-1]
arq = open(nome, "wb")
arq.write(dados)
arq.close()
def acha_urls(html):
tag_imagens = html.split("<img")[1:]
res = []
for tag in tag_imagens:
url = tag.split('"')[1]
res.append(url)
return res
pagina = raw_input("URL da qual baixar imagens: ")
html = urllib.urlopen(pagina).read()
imagens = acha_urls(html)
for imagem in imagens:
print imagem
salva_imagem(imagem)
Python com Interface Gráfica:
>>> import gtk
>>> janela = gtk.Window()
>>> botao = gtk.Button("Ok")
>>> def clicado(*args):
... print "click"
...
>>> janela.add(botao)
>>> janela.show()
>>> botao.show()
>>> botao.connect("clicked", clicado)
>>> gtk.mainloop()
Como instalar bibliotecas no Python:
Ele tem um gerenciador de pacotes dele:
# yum install python-setuptolls.noarch
Instalar a biblioteca de Games para Python:
# easy_install pygame
py2exe --> Gera um "exe" do seu ".py" para distribuir para os usuários finais.
.pyc --> python compilado, geralmente o .py esta no mesmo diretorio
Na declaração da função ou na criação do programa, se na primeira linha eu usar
""" --> Documentação de help
bla bla bla
"""" --> Fechei a documentação
Igual o <<Label
bla bla bla
Label --> Em Shell Script
Ver o help:
>>> import os
>>> help(os)
q --> para sair
Orientação a objetos em Python:
>>> class Pessoa(object):
... pass
...
>>> p = Pessoa()
>>> p
<__main__.Pessoa object at 0xb7b78eac>
>>> p.nome = "Joao"
>>> p.nome
'Joao'
>>> class Pessoa(object):
... def __init__(self, nome="", idade=None):
... self.nome = nome
... self.idade = idade
... def __repr__(self):
... return "Pessoa: " + self.nome
def maior_de_idade(self):
if self.idade is None:
raise Exception("Idade nao definida")
return self.idade >= 18
...
>>> p = Pessoa()
>>> p
Pessoa:
>>> p = Pessoa("Daniel")
>>> p
Pessoa: Daniel
>>> p.nome
'Daniel'
>>> p.idade
>>> p.idade = 23
>>> p.idade
23
>>> p.idade = 18
>>> p.maior_de_idade()
True
>>> p2 = Pessoa("Luciana")
>>> p2
Pessoa: Luciana
>>> p2.maior_de_idade()
Traceback (most recent call last):
File "<stdin>", line 1, in ?
File "<stdin>", line 9, in maior_de_idade
Exception: Idade nao definida
Livros sobre Python:
http://www.python.org.br/wiki/AprendaMais
Bom, foi essa a experiência que eu tive em 02:30 hs de aula de Python. Espero que seja tão útil para quem ler quanto foi para mim!
Obrigado João.
Assinar:
Postar comentários (Atom)
Um comentário:
Fica a Dica pra quem gosta de estudar em casa ( ou não tem dinheiro, como eu ) ... http://learnpythonthehardway.org/
Abraços Déo
Postar um comentário