SlideShare uma empresa Scribd logo
1 de 31
Baixar para ler offline
Gustavo Noronha Silva
Curso de Python
F´orum Mineiro de Software Livre
Montes Claros
setembro/2003
Sum´ario
Nota de Copyright
Agradecimentos
1 Introdu¸c˜ao p. 6
2 Revis˜ao de Conceitos p. 7
2.1 Linguagem Interpretada vs Compilada . . . . . . . . . . . . . . . . . . p. 7
2.2 Tipagem Forte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 7
2.3 Orienta¸c˜ao a Objeto . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 8
3 M˜ao na massa! p. 9
3.1 O Interpretador Python . . . . . . . . . . . . . . . . . . . . . . . . . . p. 9
3.2 M´odulos, as bibliotecas do Python . . . . . . . . . . . . . . . . . . . . . p. 10
3.3 Se virando no Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 11
3.3.1 A fun¸c˜ao dir() . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 11
3.3.2 PyDoc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 12
3.3.3 Nosso amigo help() . . . . . . . . . . . . . . . . . . . . . . . . . p. 12
3.4 Vari´aveis e mais sintaxe b´asica . . . . . . . . . . . . . . . . . . . . . . . p. 15
3.5 Condi¸c˜oes e Estruturas de Repeti¸c˜ao . . . . . . . . . . . . . . . . . . . p. 16
3.6 Usando um editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 19
4 Tipos de Dados p. 22
4.1 Inteiros e Ponto flutuante . . . . . . . . . . . . . . . . . . . . . . . . . p. 22
4.2 Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 22
4.3 Listas e Tuplas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 23
4.4 Dicion´arios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 25
4.5 Convers˜ao / Casting . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 25
5 Fun¸c˜oes p. 27
5.1 Sintaxe B´asica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 27
5.2 Passagem Avan¸cada de Argumentos . . . . . . . . . . . . . . . . . . . . p. 27
5.3 Retorno da fun¸c˜ao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 28
5.4 Documentando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 28
6 Classes p. 30
6.1 Criando estruturas em Python . . . . . . . . . . . . . . . . . . . . . . . p. 30
6.2 M´etodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 31
6.3 Heran¸ca . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 31
7 Arquivos / IO p. 33
Nota de Copyright
Copyright ( c ) 2003, Gustavo Noronha Silva <kov@debian.org>
Esse curso est´a licenciado sob a GNU FDL (Free Documentation License), fornecida pela
Free Software Foundation.
Agradecimentos
Muito obrigado a Allan Douglas <allan douglas@gmx.net> pela grande ajuda na escrita
desse curso.
6
1 Introdu¸c˜ao
A programa¸c˜ao nos dias atuais est´a centrada em uma briga de gigantes que pretendem
impˆor seus padr˜oes para substituir a linguagem conhecida como “padr˜ao da ind´ustria”,
C++.
Correndo por fora est˜ao linguagens relativamente pouco conhecidas e aclamadas, tal-
vez por serem fruto do esfor¸co de grandes mestres da computa¸c˜ao (como as primeiras
linguagens) e n˜ao por grandes empresas.
Python ´e uma dessas linguagens e traz uma simplicidade indiscut´ıvel, ao mesmo tempo
em que, apesar de ser uma linguagem interpretada, ´e extremamente veloz.
Aqueles que j´a programam h´a tempos com linguagens cheias de controle sint´atico v˜ao
certamente se sentir perdidos num primeiro contato, mas perceber˜ao que Python se adapta
muito bem ao modelo mental do programador e vai se sentir falando com a m´aquina em
pouco tempo.
7
2 Revis˜ao de Conceitos
Python ´e uma linguagem simples, mas ´e constru´ıda em uma base te´orica e t´ecnica
muito complexa. Ela eleva a orienta¸c˜ao a objetos, em alguns casos, ao extremo.
Vamos dar uma revisada em alguns conceitos importantes que nos subsidiar˜ao no
aprendizado de Python.
2.1 Linguagem Interpretada vs Compilada
Python, como j´a foi dito, ´e uma linguagem interpretada, como Perl, Shell Script,
Batch Scripts, entre outras. Isso significa que n˜ao ´e necess´aria a compila¸c˜ao do c´odigo
para que ele seja executado e isso tr´as v´arias vantagens e desvantagens embutidas.
Linguagens compiladas normalmente s˜ao mais r´apidas, porque o c´odigo j´a est´a num
formato que o computador entende. Linguagens interpretadas costumam funcionar de
uma ou outra maneira:
• Compila¸c˜ao Just-In-Time
• Interpreta¸c˜ao pura ou em Bytecode
O Python pode funcionar das duas formas. Vamos usar mais o segundo modelo
durante o curso, mas n˜ao se esque¸ca de conferir o compilador JIT do Python.
2.2 Tipagem Forte
Python ´e uma linguagem de tipagem forte. Isso significa que se uma vari´avel adquire
um determinado tipo n˜ao deixa mais de ser daquele tipo a menos que seja recriada. Isso
o torna diferente de um script Shell, por exemplo, em que nunca se sabe o tipo exato de
uma vari´avel.
8
Apesar da sua tipagem ser forte, a declara¸c˜ao de vari´aveis n˜ao ´e necess´aria e a simples
atribui¸c˜ao de um valor serve para criar ou recriar uma vari´avel. Leve isso em conta quando
programar. Tome muito cuidado com os nomes das vari´aveis.
2.3 Orienta¸c˜ao a Objeto
Dou uma ˆenfase especial a esse conceito, pois j´a vi muita gente dizer que uma lingua-
gem ´e orientada a objetos “porque vocˆe pode criar interfaces gr´aficas”1
. N˜ao tem nada a
ver.
Uma linguagem orientada a objetos coloca como centro nervoso do programa um ou
mais objetos de determinada classe, ao contr´ario das linguagens estruturadas, em que o
processo, ou as estruturas de dados s˜ao o centro e vocˆe chama fun¸c˜oes que atuam sobre
esses elementos.
Isso n˜ao significa, ´e claro, que n˜ao se pode criar aplica¸c˜oes com interfaces gr´aficas com
Python ou com qualquer outra linguagem orientada ou n˜ao a objetos.
Python ´e uma linguagem orientada a objetos, e nela quase tudo ´e um objeto. At´e
mesmo as vari´aveis que representam os tipos mais b´asicos, como inteiro e caractere s˜ao
objetos, tˆem seus m´etodos e propriedades.
1
Outro conceito extremamente errado e muito difundido ´e que C ´e para aplica¸c˜oes comuns e C++
para interfaces gr´aficas. Talvez seja exatamente uma deriva¸c˜ao do conceito errado que eu cito aqui, j´a
que C++ ´e orientada a objetos e C n˜ao.
9
3 M˜ao na massa!
Vamos ent˜ao come¸car! A primeira coisa a fazer ´e nos familiarizarmos com o interpre-
tador Python, que pode nos ser muito ´util a qualquer momento. Veremos como descobrir
informa¸c˜oes sobre um determinado elemento e como usar o interpretador para testarmos
pequenos trechos de c´odigo.
3.1 O Interpretador Python
O interpretador ´e o programa que executa c´odigo Python. Para execut´a-lo basta abrir
um terminal e digitar ‘python’. Vocˆe ver´a algo desse tipo:
O que vemos nas trˆes primeiras linhas ´e a apresenta¸c˜ao do interpretador. Ele est´a
dizendo “oi!” =D. Basicamente ele informa de que vers˜ao do Python se trata, com que
compilador foi compilado e sugere algumas chamadas b´asicas caso tenha problemas ou
d´uvidas.
10
O >>> ´e o prompt do interpretador. Podemos sair programando em Python agora
mesmo. O interpretador vai executar o c´odigo que escrevermos na hora, e poderemos ver
o resultado.
J´a que o interpretador nos disse “oi” n˜ao sejamos mal-educados, vamos responder a
ele, digitando o seguinte:
>>> print ’Ol´a, Python!’
Ol´a, Python!
´Otimo! Podemos ver que ‘print’ serve para mostrar mensagens na tela. Vocˆe pode
usar aspas simples ou duplas para delimitar a mensagem. A fun¸c˜ao ‘print’ ´e uma excess˜ao
entre as fun¸c˜oes do Python, j´a que ela n˜ao precisa de parenteses. Note, tamb´em, que n˜ao
h´a um caractere delimitador da chamada (como “;” em C e Pascal).
3.2 M´odulos, as bibliotecas do Python
No Python chamamos as cole¸c˜oes de c´odigo que fornecem extens˜oes para a linguagem
de m´odulos. Pode-se fazer uma associa¸c˜ao `as bibliotecas usadas em C (e, na verdade,
algumas vezes os m´odulos s˜ao bibliotecas). Para us´a-los, temos que import´a-los. Mas
cuidado com a balan¸ca comercial, hein! (duh)
O Python procura sempre proteger o chamado espa¸co de nomes e, portanto, sempre
que vocˆe importar um m´odulo ter´a de usar seu nome para chamar fun¸c˜oes e acessar
propriedades que est˜ao dentro dele. Isso pode ser familiar para quem lida com Java ou
C#. Vejamos as trˆes formas de importar m´odulos:
>>> import os
>>> os.getcwd ()
’/home/kov’
>>> from os import getcwd
>>> getcwd ()
’/home/kov’
>>> from os import *
>>> getcwd ()
’/home/kov’
11
A primeira, “import os”, importa o m´odulo como um todo, mas exige que sempre que
vocˆe quiser acessar algo que pertence ao m´odulo vocˆe tenha que adicionar “os.” antes da
fun¸c˜ao ou propriedade. O segundo, “from os import getcwd”, importa somente aquela
fun¸c˜ao determinada; isso pode usar menos mem´oria e n˜ao ´e mais necess´ario usar “os.”
antes de chamar a fun¸c˜ao; a terceira forma ´e como a segunda, mas ao inv´es de importar
uma s´o fun¸c˜ao, importa todas.
3.3 Se virando no Python
Este documento n˜ao pretende ser uma referˆencia completa sobre o Python. Ent˜ao,
como obter ajuda? Como descobrir quais s˜ao as funcionalidades presentes nesta lingua-
gem? Como “se virar”?
3.3.1 A fun¸c˜ao dir()
O Python tem uma fun¸c˜ao chamada dir(). Ela fornece `a linguagem a capacidade de
reflex˜ao, presente em linguagens como Java. Isso significa que vocˆe pode listar o conte´udo
de m´odulos e qualquer outro tipo de objeto1
. Isso ajuda a saber sobre o que queremos
ajuda, por exemplo. Vamos ver como funciona:
>>> dir (__builtins__)
(...)
’reduce’, ’reload’, ’repr’, ’round’, ’setattr’, ’slice’,
’staticmethod’, ’str’, ’sum’, ’super’, ’tuple’, ’type’, ’unichr’,
’unicode’, ’vars’, ’xrange’, ’zip’]
>>> import sys
>>> dir (sys)
(...)
’prefix’, ’ps1’, ’ps2’, ’setcheckinterval’, ’setdlopenflags’,
’setprofile’, ’setrecursionlimit’, ’settrace’, ’stderr’, ’stdin’,
’stdout’, ’version’, ’version_info’, ’warnoptions’]
>>> dir("umastring")
(...)
rip’, ’replace’, ’rfind’, ’rindex’, ’rjust’, ’rstrip’, ’split’,
1
M´odulos s˜ao objetos, depois de importados, e quase tudo em Python ´e um objeto, at´e uma string!
12
’splitlines’, ’startswith’, ’strip’, ’swapcase’, ’title’, ’translate’,
’upper’, ’zfill’]
Isso significa que o espa¸co de nomes builtins , carrega aquelas fun¸c˜oes ou proprie-
dades2
, que o m´odulo sys tem aquelas listadas, e que vocˆe pode usar aqueles m´etodos em
qualquer string.
3.3.2 PyDoc
pydoc ´e um software que acompanha a distribui¸c˜ao oficial do Python. Ele permite
acesso `a documenta¸c˜ao presente nas docstrings3
dos objetos.
H´a v´arios modos de utiliza-lo, um dos mais ´uteis ´e chamando-o para que monte um
pequeno servidor HTTP. Digite em um terminal:
$ pydoc -p 1234
pydoc server ready at http://localhost:1234/
Ele criar´a um servidor que pode ser acessado pelo endere¸co http://localhost:1234. A
p´agina ´e produzida automaticamente, e lista os m´odulos Python instalados. Clicando-se
em um dos m´odulos pode-se visualizar quais s˜ao a fun¸c˜oes (m´etodos) dispon´ıveis, sua
sintaxe e tamb´em uma breve descri¸c˜ao.
3.3.3 Nosso amigo help()
O interpretador Python oferece um mecanismo de ajuda simples e eficiente. Ele provˆe
uma fun¸c˜ao help(), que permite acessar parte da documenta¸c˜ao oficial Python e o PyDoc.
Ele poder´a ser chamado para uma sess˜ao interativa:
>>> help()
(Apresenta¸c~ao)
help>
help> ´e o prompt do help. Tudo o que vocˆe digitar a partir de agora, ser´a interpretado
pelo help. Digite ‘quit’ para sair. Para visualizar a documenta¸c˜ao docstring de um m´odulo,
basta digitar o nome do m´odulo:
2
Uma propriedade, normalmente, ´e uma vari´avel.
3
As docstrings s˜ao textos inclu´ıdos no in´ıcio da defini¸c˜ao de uma classe ou fun¸c˜ao documentando-as.
Veja mais detalhes na se¸c˜ao 5.4 do cap´ıtulo sobre Fun¸c˜oes, p´agina 28.
13
help> os
Help on module os:
NAME
os - OS routines for Mac, DOS, NT, or Posix depending on what system
we’re on.
(...)
Use as setas do teclado para ir para baixo/cima e aperte ‘q’ para sair. Para saber
quais s˜ao os modulos dispon´ıveis, digite ‘modules’:
help> modules
Please wait a moment while I gather a list of all available modules...
ArrayPrinter asyncore linuxaudiodev sgmllib
BaseHTTPServer atexit locale sha
Bastion audiodev logging (package) shelve
CDROM audioop macpath shlex
(...)
Para procurar um m´odulo por palavra-chave, digite ‘module palavra’ e o help retornar´a
uma lista de modulos que correspondem `aquela palavra.
Al´em da documenta¸c˜ao dos m´odulos, o help permite que vocˆe obtenha ajuda em
determinados t´opicos. Os assuntos s˜ao variados, v˜ao desde a descri¸c˜ao dos tipos b´asicos
at´e como fazer o debugging de um programa. Digite ‘topics’ para ver quais s˜ao os topicos
dispon´ıveis.
Esqueceu qual a sintaxe do if ou de outra palavra-chave? N˜ao tema! O help tamb´em
oferece um r´apido acesso `a gram´atica das palavras-chave, com uma breve descri¸c˜ao de seu
uso. No help, digite ‘keywords’ para saber quais s˜ao as palavras-chaves. E para acessar
sua documenta¸c˜ao, ´e s´o digitar o nome:
help> if
7.1 The if statement
14
The if statement is used for conditional execution:
if_stmt ::= "if" expression[1] ":" suite[2]
( "elif" expression[3] ":" suite[4] )*
["else" ":" suite[5]]
(...)
O help() pode ser chamado fora de um sess˜ao interativa. Para obter a documenta¸c˜ao
de um m´odulo ou fun¸c˜ao, ´e necess´ario, primeiramente, import´a-lo:
>>> import os
>>> help(os.open)
Help on built-in function open:
open(...)
open(filename, flag [, mode=0777]) -> fd
Open a file (for low level IO).
Para acessar a ajuda das palavras-chaves e dos t´opicos, ´e preciso chamar o help deli-
mitando o nome do t´opico ou palavra-chave com aspas:
>>> help(’TRUTHVALUE’)
2.2.1 Truth Value Testing
Any object can be tested for truth value, for use in an if or while
condition or as operand of the Boolean operations below. The following
values are considered false:
(...)
3.4 Vari´aveis e mais sintaxe b´asica
Vamos continuar usando o interpretador. Agora vamos ver um pouco sobre vari´aveis.
Vari´aveis s˜ao estruturas simples que servem para guardar dados. Como eu j´a disse, n˜ao ´e
necess´ario declarar vari´aveis em Python. Vamos dar uma olhada ent˜ao:
15
>>> variavel = 1
>>> print variavel
1
>>> variavel
1
A primeira linha coloca 1 na vari´avel de nome variavel. A segunda linha mostra
variavel na tela e a terceira retorna o valor de variavel. ´E muito importante fazer distin¸c˜ao
entre essas duas ´ultimas.
Um programador deve saber que normalmente toda “afirma¸c˜ao” que ´e feita em um
programa ´e, na verdade, uma express˜ao, na maioria das linguagens. Em Python, sempre.
Sempre existe uma avalia¸c˜ao do valor e um retorno do valor. O sentido pr´atico disso ´e
que o segundo 1 n˜ao seria realmente mostrado na tela em um programa de verdade, ele
seria retornado para nada.
As opera¸c˜oes com n´umeros s˜ao feitas como em outras linguagens:
>>> soma = 1 + 1
>>> print soma
2
>>> mult = soma * 3
>>> print mult
6
J´a que estamos lidando com vari´aveis, vamos ver como usar o print para coisas mais
complexas. Vamos mostrar vari´aveis com ele. Existem v´arias formas. Observe:
>>> soma = 2 + 2
>>> print "A soma ´e: " + str(soma)
A soma ´e: 4
>>> print "A soma ´e, na verdade: %d" % (soma)
A soma ´e, na verdade: 4
A primeira forma deve ser comum a quem programa em VB ou PHP, por exemplo. A
segunda deve causar boas lembran¸cas aos programadores de C =). Eu, particularmente,
prefiro a segunda forma, mas a primeira nos ensina duas coisas importantes: 1) ´e poss´ıvel
16
somar strings (e, veremos mais a frente, outros tipos de dados, tamb´em!) e 2) os tipos
em Python s˜ao fortes, vocˆe tem que converter o inteiro para string se quiser concatenar
os dois.
Vamos analizar melhor a segunda. Entre aspas temos o que chamamos de formato,
que ´e a defini¸c˜ao do que aparecer´a na tela. A string “%d” significa que ali ser´a colocado
um inteiro. Depois do formato colocamos um separador (um “%”) e, entre parˆenteses
uma lista separada por v´ırgulas, das vari´aveis que queremos que substituam os c´odigos.
Vamos ver mais um exemplo:
>>> meunome="Gustavo"
>>> minhaidade=20
>>> print "Oi, eu sou %s e tenho %d anos!" % (meunome, minhaidade)
Oi, eu sou Gustavo e tenho 20 anos!
3.5 Condi¸c˜oes e Estruturas de Repeti¸c˜ao
Anets de come¸carmos a se¸c˜ao propriamente dita, ´e necess´ario entender como o Python
marca o in´ıcio e o final de blocos. Aqueles acostumados com C e Pascal estar˜ao acostu-
mados com coisas do tipo:
if (variavel == 10)
{
printf ("´E 10!!!n");
}
Ou
if (variavel = 10) then
begin
writeln ("´E 10!!!");
end;
O Python, para o desgosto de alguns, n˜ao tem estruturas sint´aticas de abertura e
fechamento de blocos. O Python usa a indenta¸c˜ao para definir o in´ıcio e t´ermino de
blocos. O problema aqui ´e que muitos programadores n˜ao tˆem h´abito de fazer uma
17
indenta¸c˜ao consistente. A vantagem do Python ´e que ele obriga o programador a ter uma
indenta¸c˜ao consistente. =)
Portanto, para come¸car um bloco de condi¸c˜ao, ´e necess´ario um n´ıvel de indenta¸c˜ao.
Para indentar, pressione a tecla tab. Um exemplo:
>>> variavel = 10
>>> if variavel == 10:
... print "´E 10!!"
...
´E 10!!
Duas coisas importantes a serem observadas: 1) quando o Python espera que vocˆe
inicie um bloco, o interpretador muda o prompt para “...” e 2) para mostrar que um bloco
acabou (no interpretador) basta dar enter sem indentar uma linha depois de ter escrito
seu bloco. Num programa de verdade n˜ao ´e necess´ario adicionar uma linha em branco
para terminar um bloco, basta n˜ao indentar a linha seguinte. N´os veremos isso melhor
mais a frente.
Outra coisa importante: como eu disse inicialmente, no Python toda “afirmativa”
´e uma express˜ao. Mas, diferentemente do C, o Python n˜ao aceita atribui¸c˜oes em con-
textos que devem ser somente usados para express˜oes de condi¸c˜ao. Por exemplo, como
vimos, o Python usa o operador “==” para compara¸c˜oes. Se eu fizer if variavel = 10 o
interpretador ir´a emitir um erro, porque atribui¸c˜oes n˜ao s˜ao permitidas em um if.
Vocˆe pode fazer testes de condi¸c˜ao mais complexos com Python, tamb´em:
>>> a = 2
>>> b = 6
>>> if variavel == 10 and a == 2:
... print "aaa"
... elif b == 6:
... print "bbb"
... else:
... print "ccc"
...
aaa
18
Outros operadores podem ser usados, como “or” para rela¸c˜ao entre compara¸c˜oes, e
“! =”, “<”, “>”, “<=” e assim por diante, para rela¸c˜ao entre vari´aveis e valores.
Um loop for (para) em Python se parece muito com o estilo Pascal de for. Ele exige
um tipo de dado mais complexo, que n´os veremos mais para frente, que ´e a lista. Mas
por enquanto vamos ver o b´asico do for:
>>> for contador in range (0, 3):
... print contador
...
0
1
2
A fun¸c˜ao range serve para retornar uma lista que contenha o intervalo dado pelos
n´umeros especificados. Preste muita aten¸c˜ao. O primeiro n´umero que vocˆe especificar
sempre entra no intervalo, o ´ultimo nunca. Em matem´atica poder´ıamos representar isso
assim: [0, 3[.
Um while segue, essencialmente a mesma l´ogica de qualquer outro while que eu j´a vi:
>>> contador = 3
>>> while contador > 0:
... print "Python!"
... contador = contador - 1
...
Python!
Python!
Python!
3.6 Usando um editor
Sim! Vamos parar de usar o interpretador diretamente para criar nossos c´odigos e
vamos passar para um editor, o que nos permitir´a salvar nossos programas. Isso n˜ao
significa que vamos esquecer o interpretador daqui para frente: muito pelo contr´ario! O
interpretador vai ser quem rodar´a, efetivamente, o programa criado, e tamb´em o usaremos
para obter ajuda e testar pequenos peda¸cos de c´odigo enquanto programamos.
19
Podemos usar qualquer editor que seja capaz de salvar texto puro. Isso significa qual-
quer editor, provavelmente. Muitas pessoas tˆem a id´eia errada de que ´e necess´ario um
programa espec´ıfico para programar. Muitas pessoas tamb´em cometem o erro de chamar
esses programas de “compiladores”. Na verdade esses programas s˜ao chamados IDE’s
(Integrated Development Environmet). H´a diversos IDE’s para Python e n´os conhecere-
mos um mais `a frente. No entanto, por agora, vamos escolher qualquer editor simples e
come¸car!
Algumas conven¸c˜oes para as quais devemos atentar: os arquivos execut´aveis Python
normalmente n˜ao tˆem extens˜ao, para manter a coerˆencia com o resto do sistema. Os que
tˆem usam “.py” como extens˜ao. Os arquivos podem ser “byte-compilados”4
e, nesse caso,
receber˜ao a extens˜ao “.pyc”.
Outra conven¸c˜ao importante ´e que todo script Python deve come¸car com uma linha
contendo a “string m´agica” (#!) e a localiza¸c˜ao do interpretador, para que o sistema
saiba como executar o script5
. Normalmente essa linha ser´a:
#!/usr/bin/python
Essa ´e uma boa hora para dizer, tamb´em, que em Python os coment´arios s˜ao feitos
com o s´ımbolo #. Tudo que vier depois de um # e antes de uma quebra de linha ´e um
coment´ario.
Ent˜ao vamos colocar nosso primeiro exemplo para funcionar... abra seu editor e
escreva o seguinte:
#!/usr/bin/python
# define que a variavel ’variavel’ conter´a o valor 10
variavel = 10
if variavel == 10: # se vari´avel for igual a 10
while variavel > 0: # enquanto a vari´avel for maior que 0
print variavel # mostrar a vari´avel
variavel = variavel - 1 # e, claro, diminuir seu valor
4
Pr´e-processados pelo interpretador para se tornar o “assembly” usado por ele, aumentando a veloci-
dade de processamento sem perder a portabilidade.
5
Isso n˜ao tem validade no Windows... somente em sistemas Unix-like, como o GNU/Linux, o MacOSX,
FreeBSD, HP-UX e outros, j´a que isso ´e uma conven¸c˜ao Unix.
20
# fim do programa!!
Os coment´arios est˜ao a´ı s´o pra vocˆe aprender a us´a-los =). Eles n˜ao s˜ao, ´e claro,
necess´arios. Depois de salvar o arquivo com um nome qualquer, “teste1.py” por exemplo,
abra um terminal e execute os seguintes comandos:
$ chmod +x teste1.py
$ ./teste1.py
O primeiro comando d´a permiss˜oes de execu¸c˜ao ao arquivo, o segundo o executa. O
resultado deve ser:
python@beterraba:~$ ./teste1.py
10
9
(...)
1
python@beterraba:~$
Hora da brincadeira!! Pegue seu editor preferido e fa¸ca testes com o que j´a aprendeu
da linguagem!
21
4 Tipos de Dados
O Python fornece, al´em dos tipos b´asicos de dados, alguns tipos mais avan¸cados e
complexos que podem ser usados com muita facilidade. Quem j´a teve que usar uma lista
encadeada sabe o quanto ´e complicado implementar esse tipo de estrutura do zero. O
Python facilita muito as coisas, e n´os vamos explorar essas capacidades agora!
4.1 Inteiros e Ponto flutuante
Lidar com n´umeros em Python ´e bem f´acil. Como j´a vimos, o Python detecta o tipo
do dado no momento em que ele ´e atribu´ıdo `a vari´avel. Isso significa que:
>>> inteiro = 10
>>> ponto_flutuante = 10.0
>>> print ’um inteiro: %d, um ponto flutuante: %f’ % (inteiro, ponto_flutuante)
um inteiro: 10, um ponto flutuante: 10.000000
4.2 Strings
Lidar com strings em Python ´e muito simples. O que faz com que o Python “detecte”
o tipo string s˜ao as aspas, simples ou duplas. Vejamos:
>>> meu_nome = "Gustavo"
>>> meu_nick = ’kov’
>>> print "Meu nome ´e: %s, meu nick ´e %s!" % (meu_nome, meu_nick)
Meu nome ´e: Gustavo, meu nick ´e kov!
Como disse anteriormente, quase tudo em Python ´e um objeto. Isso significa que uma
string tem m´etodos! Sim! Observe:
22
>>> nome = "kov"
>>> nome.upper ()
’KOV’
>>> "kov".upper ()
’KOV’
Note, no entanto, uma coisa muito importante: uma string em Python ´e sempre uma
constante! Vocˆe nunca modifica uma string, o que vocˆe pode fazer ´e reatribu´ı-la. Isso
significa que se vocˆe quiser que a string continue em letras mai´usculas dali para frente
vocˆe deve fazer “nome = nome.upper ()”. N´os veremos mais sobre como conhecer os
m´etodos dispon´ıveis.
Para acessar partes espec´ıficas da string, vocˆe pode usar a nota¸c˜ao de “fatias”. ´E
importante entender bem essa nota¸c˜ao, porque ela ´e muito ´util em v´arias oportunidades
e com alguns outros tipos de dados.
>>> nome = ’Software Livre’
>>> nome
’Software Livre’
>>> nome[1]
’o’
>>> nome[1:5]
’oftw’
>>> nome[:-1]
’Software Livr’
4.3 Listas e Tuplas
Agora o tipo de dados que serve como vetor e listas encadeadas. Chamamos de lista
uma lista que pode ser modificada dinamicamente e de tupla uma lista im´ovel.
Vamos ver as opera¸c˜oes principais com listas:
>>> lista = [] # os [] fazem com que ’lista’ seja iniciada como lista
>>> lista.append (’kov’)
>>> lista = [’kov’, ’spuk’, ’o_0’]
>>> len(lista)
23
3
>>> lista.insert (2, ’agney’)
>>> print lista
[’kov’, ’spuk’, ’agney’, ’o_0’]
>>> lista.pop ()
’o_0’
>>> print lista
[’kov’, ’spuk’, ’agney’]
>>> lista.remove (’spuk’)
>>> print lista
[’kov’, ’agney’]
Note que todas as opera¸c˜oes b´asicas de lista encadeada s˜ao contempladas pela imple-
menta¸c˜ao de listas do Python. A terceira linha mostra como inicializar uma vari´avel com
uma lista pr´e-criada. A quarta mostra como obter o tamanho da lista usando a fun¸c˜ao
len() 1
. Nesse exemplo usamos strings na lista, mas uma lista pode conter qualquer tipo
de dado, inclusive listas, possibilitando a cria¸c˜ao simples de ´arvores, inclusive.
Algo importante de se notar ´e que d´a para usar a lista do Python como pilha, usando os
m´etodos append() e pop(). Outra deriva¸c˜ao importante desse exemplo ´e ver que uma lista
em Python ´e indexada, como um vetor. Podemos usar “lista[0]” para acessar o primeiro
´ıtem da lista2
, e podemos usar esse ´ındice para inserir n´os em posi¸c˜oes espec´ıficas.
As listas tˆem outros m´etodos de extermo interesse, como o sort(), que serve para
ordenar a lista. ´E sentar e explorar as possibilidades!
As tuplas funcionam quase do mesmo modo que as listas, com a excess˜ao de que
s˜ao listas que n˜ao s˜ao modific´aveis. Elas s˜ao bastante usada como retorno de algumas
fun¸c˜oes, portanto ´e bom explor´a-las. Vocˆe reconhece uma tupla por sua similaridade com
uma lista, mas ao inv´es de usar [] uma tupla usa parˆenteses. Um exemplo r´apido:
>>> tupla = (1, 35)
>>> tupla[0]
1
>>> tupla
(1, 35)
1
Note que a fun¸c˜ao len() pode ser usada em outros tipos de dados, como strings, por exemplo
2
Em Python, como em C, ´ındices sempre come¸cam do 0.
24
4.4 Dicion´arios
Quem j´a ouviu falar de Hash tables vai se sentir familiarizado com os dicion´arios rapi-
damente. Os dicion´arios em Python s˜ao, literalmente, estruturas de dados que permitem
“traduzir” uma chave para um valor. Seu uso ´e muito simples:
>>> linguagem = {}
>>> linguagem[’nome’] = ’Python’
>>> linguagem[’tipo’] = ’scripting’
>>> linguagem[2] = 100
>>> linguagem[2]
100
>>> linguagem[’tipo’]
’scripting’
4.5 Convers˜ao / Casting
Python usa tipagem forte. Isso significa que se uma vari´avel cont´em um inteiro ela
n˜ao pode simplesmente ser usada como se fosse uma vari´avel de ponto flutuante. Para
esse tipo de coisas ´e necess´ario fazer uma convers˜ao. Aqui est˜ao exemplos:
>>> a = 10
>>> str (a)
’10’
>>> float (a)
10.0
>>> int (’25’)
25
25
5 Fun¸c˜oes
5.1 Sintaxe B´asica
Fun¸c˜oes em python tem uma sintaxe muito parecida com qualquer outra linguagem. O
uso de parˆenteses ´e obrigat´orio, mesmo que n˜ao aja argumentos, ao contr´ario de algumas,
com a ´unica excess˜ao da fun¸c˜ao interna print.
Declarar uma fun¸c˜ao em Python ´e muito simples:
>>> def minha_funcao (argumento):
... print argumento
...
>>> minha_funcao (’123kokoko!’)
123kokoko!
Como pode ser visto, o bloco que implementa a fun¸c˜ao tamb´em ´e demarcado pela
indenta¸c˜ao.
5.2 Passagem Avan¸cada de Argumentos
Os argumentos n˜ao tˆem tipo declarado, o que d´a uma grande flexibilidade. Os ar-
gumentos podem ter valores padr˜ao, tamb´em, e vocˆe pode dar valores espec´ıficos para
argumentos opcionais fora da localiza¸c˜ao deles, nesses casos. Vejamos:
>>> def mostra_informacoes (obrigatorio, nome = ’kov’, idade=20):
... print "obrigatorio: %snnome: %snidade: %d" % (obrigatorio, nome, idade)
...
>>> mostra_informacoes (’123’)
obrigatorio: 123
26
nome: kov
idade: 20
>>> mostra_informacoes (’123’, idade = 10)
obrigatorio: 123
nome: kov
idade: 10
5.3 Retorno da fun¸c˜ao
Para retornar um (ou mais) valores em uma fun¸c˜ao basta usar a declara¸c˜ao return.
Vocˆe pode, inclusive, retornar diversos valores e, como na passagem de parˆametros, n˜ao
precisa declarar o tipo de dado retornado:
>>> def soma_e_multiplica (x, y):
... a = x + y
... b = x * y
... return a, b
...
>>> c, d = soma_e_multiplica (4, 5)
>>> print c
9
>>> print d
20
5.4 Documentando
Uma caracter´ıstica interessante do Python ´e a possibilidade de documentar c´odigo no
pr´oprio c´odigo, sem usar ferramentas externas. Basta colocar uma string envolvida por
sequˆencias de trˆes aspas:
>>> def funcao (x):
... """
... funcao (x) -> inteiro
...
... recebe um inteiro, multiplica ele por si mesmo
27
... e retorna o resultado
... """
... return x * x
...
>>> help (funcao)
Help on function funcao in module __main__:
funcao(x)
funcao (x) -> inteiro
recebe um inteiro, multiplica ele por si mesmo
e retorna o resultado
28
6 Classes
Classes s˜ao como id´eias. S˜ao um dos pilares da orienta¸c˜ao a objetos. Se pensarmos
como fil´osofos podemos associar um objeto (ou uma instˆancia, o que ´e mais correto no
caso do Python) a um ente concreto, um indiv´ıduo. O exemplo cl´assico ´e pensar em
ser humano, uma classe, e Jos´e da Silva, um exemplar dessa classe, uma instˆancia dessa
classe.
6.1 Criando estruturas em Python
No Pascal s˜ao conhecidos como registros, no C como estruturas ou structs. O Python
por incr´ıvel que pare¸ca n˜ao tem uma estrutura de dado como essa. Para implementar
algo similar a um registro ´e necess´ario usar uma classe.
A sintaxe ´e muito simples:
>>> class registro:
... nome = ""
... idade = 0
...
>>> r = registro ()
>>> r.nome = "kov"
>>> r.idade = 10
>>> print r.nome
kov
A ´unica diferen¸ca existente entre uma classe e uma estrutura, quando se usa assim,
´e que vocˆe pode criar novos “membros” dentro da classe a qualquer momento, bastando
atribuir algo.
29
6.2 M´etodos
Definir m´etodos em classes Python ´e uma quest˜ao de definir uma fun¸c˜ao dentro da
classe (a indenta¸c˜ao marca o bloco, lembre-se). O importante ´e que o nome que vocˆe
passar como primeiro argumento para um m´etodo representa o pr´oprio objeto (an´alogo
ao this de outras linguagens), mas n˜ao precisa ser passado como argumento quando for
chamar o m´etodo. Um exemplo:
>>> class humano:
... def falar (self, oque):
... self.print (oque)
... def imprimir (self, oque):
... print oque
...
>>> eu = humano ()
>>> eu.falar ("qualquer coisa")
qualquer coisa
Existe um m´etodo especial para toda classe, chamado init . Esse m´etodo ´e an´alogo
ao construtor de outras linguagens. Ele ´e chamado quando vocˆe instancia um objeto, e
os argumentos passados na chamada de instancia¸c˜ao s˜ao passados para esse m´etodo.
6.3 Heran¸ca
O Python permite heran¸ca de classes. Podemos, ent˜ao, definir uma nova classe que
herda as caracter´ısticas de registro e humano, que definimos acima assim:
>>> class coisa (registro,humano):
... def coisar (self):
... print "eu coiso, tu coisas, ele coisa..."
...
>>> c = coisa ()
>>> c.falar ("abc")
abc
´E claro, ´e poss´ıve herdar uma classe apenas, bastando colocar seu nome entre parˆenteses.
30
7 Arquivos / IO
Lidar com arquivos em Python ´e coisa muito simples. Uma das primeiras coisas que
eu procuro fazer quando aprendo uma linguagem ´e abrir, ler e gravar em um arquivo,
ent˜ao vamos ver aqui como fazer. Um arquivo aberto ´e um objeto, para criar esse objeto
usando a fun¸c˜ao open, que ser´a muito familiar para programadores da linguagem C:
>>> arq = open (’/tmp/meuarquivo.txt’, ’w’)
>>> arq.write (’meu teste de escrever em arquivonmuito legal’)
>>> arq.close ()
O primeiro argumento de open ´e o nome do arquivo, e o segundo ´e o modo como ele
ser´a aberto. Os modos poss´ıveis s˜ao: “w” para apagar o que existir e abrir para escrita
(cria o arquivo se n˜ao existir); “w+” faz o mesmo que “w”, mas abre para escrita e leitura;
“r”, abre para leitura; “a” abre o arquivo para escrita, mantendo o conte´udo e posiciona
o cursor no final do arquivo; “a+” faz o mesmo que “a”, mas abre para leitura e escrita.
O m´etodo write da instˆancia do objeto arq est´a sendo usado para gravar a string
no arquivo. Vocˆe pode usar a mesma nota¸c˜ao usada com print entre os parˆametros do
m´etodo (na verdade vocˆe pode usar a nota¸c˜ao do print em qualquer lugar que receba uma
string).
Para ler um arquivo:
>>> arq = open (’/tmp/meuarquivo.txt’)
>>> arq.read ()
’meu teste de escrever em arquivonmuito legal’
>>> arq.readline ()
’’
>>> arq.seek(0)
>>> arq.readline ()
31
’meu teste de escrever em arquivon’
Como podemos ver, n˜ao ´e necess´ario especificar o modo de abertura quando s´o se
quer ler. A fun¸c˜ao open assume o segundo argumento como sendo “r”. O m´etodo read()
lˆe o arquivo completo, como podemos ver, e qualquer tentativa de leitura resulta em uma
string vazia, como vemos na quarta linha. O m´etodo seek() serve para posicionar o cursor
no arquivo e a readline() serve para ler uma linha apenas. O m´etodo close() seria usado
nesse caso, tamb´em.

Mais conteúdo relacionado

Mais procurados

Curso python
Curso pythonCurso python
Curso pythonTiago
 
Python - Introdução Básica
Python - Introdução BásicaPython - Introdução Básica
Python - Introdução BásicaChristian Perone
 
2016/01/27 - Aprendendo a programar com Python
2016/01/27 - Aprendendo a programar com Python2016/01/27 - Aprendendo a programar com Python
2016/01/27 - Aprendendo a programar com PythonJardel Weyrich
 
Python - Guia de bolso
Python - Guia de bolsoPython - Guia de bolso
Python - Guia de bolsoJean Lopes
 
Algoritmos e programacao_em_python
Algoritmos e programacao_em_pythonAlgoritmos e programacao_em_python
Algoritmos e programacao_em_pythonArtur Santos
 
Apresentação python fábio jr alves
Apresentação python   fábio jr alvesApresentação python   fábio jr alves
Apresentação python fábio jr alvesGrupython Ufla
 
Python - Programação funcional
Python - Programação funcionalPython - Programação funcional
Python - Programação funcionalfabiocerqueira
 
Apostila de Introdução aos Algoritmos - usando o Visualg
Apostila de Introdução aos Algoritmos - usando o VisualgApostila de Introdução aos Algoritmos - usando o Visualg
Apostila de Introdução aos Algoritmos - usando o VisualgRegis Magalhães
 
Python - Programando em alto nível
Python - Programando em alto nívelPython - Programando em alto nível
Python - Programando em alto nívelIgor Sobreira
 
Shell Script - Luz e trevas
Shell Script - Luz e trevasShell Script - Luz e trevas
Shell Script - Luz e trevasOsvaldo Filho
 
Introdução ao Deep Learning com o TensorFlow
Introdução ao Deep Learning com o TensorFlowIntrodução ao Deep Learning com o TensorFlow
Introdução ao Deep Learning com o TensorFlowMauro Pichiliani
 
PHP não é coisa de moleque
PHP não é coisa de molequePHP não é coisa de moleque
PHP não é coisa de molequeVagner Rodrigues
 
Windows Registry Fixer (WRF): Automação na Criação de scripts para Controle d...
Windows Registry Fixer (WRF): Automação na Criação de scripts para Controle d...Windows Registry Fixer (WRF): Automação na Criação de scripts para Controle d...
Windows Registry Fixer (WRF): Automação na Criação de scripts para Controle d...joselopes1984
 
Curso de shell
Curso de shellCurso de shell
Curso de shellTiago
 

Mais procurados (17)

Python - Introdução
Python - IntroduçãoPython - Introdução
Python - Introdução
 
Curso python
Curso pythonCurso python
Curso python
 
Python - Introdução Básica
Python - Introdução BásicaPython - Introdução Básica
Python - Introdução Básica
 
2016/01/27 - Aprendendo a programar com Python
2016/01/27 - Aprendendo a programar com Python2016/01/27 - Aprendendo a programar com Python
2016/01/27 - Aprendendo a programar com Python
 
Python - Guia de bolso
Python - Guia de bolsoPython - Guia de bolso
Python - Guia de bolso
 
Algoritmos e programacao_em_python
Algoritmos e programacao_em_pythonAlgoritmos e programacao_em_python
Algoritmos e programacao_em_python
 
Apresentação python fábio jr alves
Apresentação python   fábio jr alvesApresentação python   fábio jr alves
Apresentação python fábio jr alves
 
Python - Programação funcional
Python - Programação funcionalPython - Programação funcional
Python - Programação funcional
 
Apostila de Introdução aos Algoritmos - usando o Visualg
Apostila de Introdução aos Algoritmos - usando o VisualgApostila de Introdução aos Algoritmos - usando o Visualg
Apostila de Introdução aos Algoritmos - usando o Visualg
 
Curso de Python e Django
Curso de Python e DjangoCurso de Python e Django
Curso de Python e Django
 
Python - Programando em alto nível
Python - Programando em alto nívelPython - Programando em alto nível
Python - Programando em alto nível
 
Shell Script - Luz e trevas
Shell Script - Luz e trevasShell Script - Luz e trevas
Shell Script - Luz e trevas
 
Introdução ao Deep Learning com o TensorFlow
Introdução ao Deep Learning com o TensorFlowIntrodução ao Deep Learning com o TensorFlow
Introdução ao Deep Learning com o TensorFlow
 
PHP não é coisa de moleque
PHP não é coisa de molequePHP não é coisa de moleque
PHP não é coisa de moleque
 
Windows Registry Fixer (WRF): Automação na Criação de scripts para Controle d...
Windows Registry Fixer (WRF): Automação na Criação de scripts para Controle d...Windows Registry Fixer (WRF): Automação na Criação de scripts para Controle d...
Windows Registry Fixer (WRF): Automação na Criação de scripts para Controle d...
 
Python for zombies (very basic level)
Python for zombies (very basic level)Python for zombies (very basic level)
Python for zombies (very basic level)
 
Curso de shell
Curso de shellCurso de shell
Curso de shell
 

Destaque

Agua instalaciones sanitarias en los edificios [arq. luis lópez]
Agua instalaciones sanitarias en los edificios [arq. luis lópez]Agua instalaciones sanitarias en los edificios [arq. luis lópez]
Agua instalaciones sanitarias en los edificios [arq. luis lópez]Miguel Yepez
 
Aire en tuberia
Aire en tuberiaAire en tuberia
Aire en tuberiadiana diaz
 
Manual del-constructor-popular
Manual del-constructor-popularManual del-constructor-popular
Manual del-constructor-popularNati Bogado
 
4 estadísticas de las imágenes satelitales
4 estadísticas de las imágenes satelitales4 estadísticas de las imágenes satelitales
4 estadísticas de las imágenes satelitalesJenny Andrea
 
Agua instalaciones sanitarias en los edificios Arq Luis Lopez
Agua instalaciones sanitarias en los edificios Arq Luis LopezAgua instalaciones sanitarias en los edificios Arq Luis Lopez
Agua instalaciones sanitarias en los edificios Arq Luis LopezJavier Chacín
 
La escala en los mapas
La escala en los mapasLa escala en los mapas
La escala en los mapasInés Abella
 
6 mejoramientos y realces
6 mejoramientos y realces6 mejoramientos y realces
6 mejoramientos y realcesJenny Andrea
 
5 algebra de imágenes
5 algebra de imágenes5 algebra de imágenes
5 algebra de imágenesJenny Andrea
 
Instalaciones sanitarias
Instalaciones sanitariasInstalaciones sanitarias
Instalaciones sanitariashannalamia
 
Manual de autoconstruccion mi casa apasco
Manual de autoconstruccion mi casa apascoManual de autoconstruccion mi casa apasco
Manual de autoconstruccion mi casa apascocharls666
 
6 mejoramientos y realces
6 mejoramientos y realces6 mejoramientos y realces
6 mejoramientos y realcesJenny Andrea
 

Destaque (20)

Curso de python
Curso de pythonCurso de python
Curso de python
 
Agua instalaciones sanitarias en los edificios [arq. luis lópez]
Agua instalaciones sanitarias en los edificios [arq. luis lópez]Agua instalaciones sanitarias en los edificios [arq. luis lópez]
Agua instalaciones sanitarias en los edificios [arq. luis lópez]
 
Intertemporalidad
IntertemporalidadIntertemporalidad
Intertemporalidad
 
7 filtros
7 filtros7 filtros
7 filtros
 
Foto Interpretación
Foto Interpretación Foto Interpretación
Foto Interpretación
 
Aire en tuberia
Aire en tuberiaAire en tuberia
Aire en tuberia
 
Manual del-constructor-popular
Manual del-constructor-popularManual del-constructor-popular
Manual del-constructor-popular
 
Aguas blancas
Aguas blancasAguas blancas
Aguas blancas
 
4 estadísticas de las imágenes satelitales
4 estadísticas de las imágenes satelitales4 estadísticas de las imágenes satelitales
4 estadísticas de las imágenes satelitales
 
Agua instalaciones sanitarias en los edificios Arq Luis Lopez
Agua instalaciones sanitarias en los edificios Arq Luis LopezAgua instalaciones sanitarias en los edificios Arq Luis Lopez
Agua instalaciones sanitarias en los edificios Arq Luis Lopez
 
Cartilla de urbanismo
Cartilla de urbanismoCartilla de urbanismo
Cartilla de urbanismo
 
Manual vlvulas ventosa
Manual vlvulas ventosaManual vlvulas ventosa
Manual vlvulas ventosa
 
Mapas y Escalas
Mapas y EscalasMapas y Escalas
Mapas y Escalas
 
Manual hidrahulica
Manual hidrahulicaManual hidrahulica
Manual hidrahulica
 
La escala en los mapas
La escala en los mapasLa escala en los mapas
La escala en los mapas
 
6 mejoramientos y realces
6 mejoramientos y realces6 mejoramientos y realces
6 mejoramientos y realces
 
5 algebra de imágenes
5 algebra de imágenes5 algebra de imágenes
5 algebra de imágenes
 
Instalaciones sanitarias
Instalaciones sanitariasInstalaciones sanitarias
Instalaciones sanitarias
 
Manual de autoconstruccion mi casa apasco
Manual de autoconstruccion mi casa apascoManual de autoconstruccion mi casa apasco
Manual de autoconstruccion mi casa apasco
 
6 mejoramientos y realces
6 mejoramientos y realces6 mejoramientos y realces
6 mejoramientos y realces
 

Semelhante a Curso python

Aula 01 python
Aula 01 pythonAula 01 python
Aula 01 pythonTiago
 
Aprenda a programar-luciano_ramalho
Aprenda a programar-luciano_ramalhoAprenda a programar-luciano_ramalho
Aprenda a programar-luciano_ramalhoFelipeDi
 
Aprenda a programar-luciano_ramalho
Aprenda a programar-luciano_ramalhoAprenda a programar-luciano_ramalho
Aprenda a programar-luciano_ramalhoWeldir Fernando Dias
 
Algoritmia para o site do 10gi marcelo e ricardo
Algoritmia para o site do 10gi marcelo e ricardoAlgoritmia para o site do 10gi marcelo e ricardo
Algoritmia para o site do 10gi marcelo e ricardozedaesquina98
 
Aprenda a programar-luciano_ramalho
Aprenda a programar-luciano_ramalhoAprenda a programar-luciano_ramalho
Aprenda a programar-luciano_ramalhoUbirajara Cavaco
 
Aprenda a programar-luciano_ramalho
Aprenda a programar-luciano_ramalhoAprenda a programar-luciano_ramalho
Aprenda a programar-luciano_ramalhoandreluizlugon
 
Engenharia rever sa mentebinaria
Engenharia rever sa   mentebinariaEngenharia rever sa   mentebinaria
Engenharia rever sa mentebinariaPatrese Renan
 
Visualg 1231617089791929-2
Visualg 1231617089791929-2Visualg 1231617089791929-2
Visualg 1231617089791929-2jaoozinhoqi123
 
Linguagem de Programação Python
Linguagem de Programação PythonLinguagem de Programação Python
Linguagem de Programação PythonJunior Sobrenome
 
Apostila de poo em c++
Apostila de poo em c++Apostila de poo em c++
Apostila de poo em c++Lindomar ...
 
Apostila de poo em c++
Apostila de poo em c++Apostila de poo em c++
Apostila de poo em c++Lindomar ...
 
Cientista da computacao usando python
Cientista da computacao usando pythonCientista da computacao usando python
Cientista da computacao usando pythonJean Lopes
 
Introdução à Programação de Computadores com Python
Introdução à Programação de Computadores com PythonIntrodução à Programação de Computadores com Python
Introdução à Programação de Computadores com PythonSidney Roberto
 
Aprenda a programar python
Aprenda a programar pythonAprenda a programar python
Aprenda a programar pythonLourenço Junior
 

Semelhante a Curso python (20)

Aula 01 python
Aula 01 pythonAula 01 python
Aula 01 python
 
Documentação de uma linguagem de progração
Documentação de uma linguagem de prograçãoDocumentação de uma linguagem de progração
Documentação de uma linguagem de progração
 
Aprenda a programar-luciano_ramalho
Aprenda a programar-luciano_ramalhoAprenda a programar-luciano_ramalho
Aprenda a programar-luciano_ramalho
 
Aprenda a programar-luciano_ramalho
Aprenda a programar-luciano_ramalhoAprenda a programar-luciano_ramalho
Aprenda a programar-luciano_ramalho
 
Algoritmia para o site do 10gi marcelo e ricardo
Algoritmia para o site do 10gi marcelo e ricardoAlgoritmia para o site do 10gi marcelo e ricardo
Algoritmia para o site do 10gi marcelo e ricardo
 
Aprenda a programar-luciano_ramalho
Aprenda a programar-luciano_ramalhoAprenda a programar-luciano_ramalho
Aprenda a programar-luciano_ramalho
 
Aprenda a programar-luciano_ramalho
Aprenda a programar-luciano_ramalhoAprenda a programar-luciano_ramalho
Aprenda a programar-luciano_ramalho
 
Apostila
ApostilaApostila
Apostila
 
Engenharia rever sa mentebinaria
Engenharia rever sa   mentebinariaEngenharia rever sa   mentebinaria
Engenharia rever sa mentebinaria
 
Visualg 1231617089791929-2
Visualg 1231617089791929-2Visualg 1231617089791929-2
Visualg 1231617089791929-2
 
Visualg
VisualgVisualg
Visualg
 
Linguagem de Programação Python
Linguagem de Programação PythonLinguagem de Programação Python
Linguagem de Programação Python
 
Apostila de poo em c++
Apostila de poo em c++Apostila de poo em c++
Apostila de poo em c++
 
Apostila de poo em c++
Apostila de poo em c++Apostila de poo em c++
Apostila de poo em c++
 
Apple mac-osx
Apple mac-osxApple mac-osx
Apple mac-osx
 
Cientista da computacao usando python
Cientista da computacao usando pythonCientista da computacao usando python
Cientista da computacao usando python
 
Introdução à Programação de Computadores com Python
Introdução à Programação de Computadores com PythonIntrodução à Programação de Computadores com Python
Introdução à Programação de Computadores com Python
 
Aprenda a programar python
Aprenda a programar pythonAprenda a programar python
Aprenda a programar python
 
Visu alg ref
Visu alg refVisu alg ref
Visu alg ref
 
Apostila visualgv25
Apostila visualgv25Apostila visualgv25
Apostila visualgv25
 

Mais de Tiago

Programacao php moodle
Programacao php moodleProgramacao php moodle
Programacao php moodleTiago
 
Apostila cdtc dotproject
Apostila cdtc dotprojectApostila cdtc dotproject
Apostila cdtc dotprojectTiago
 
6572501 ldp-apostila-de-turbo-pascal
6572501 ldp-apostila-de-turbo-pascal6572501 ldp-apostila-de-turbo-pascal
6572501 ldp-apostila-de-turbo-pascalTiago
 
Guia rapido de_pascal
Guia rapido de_pascalGuia rapido de_pascal
Guia rapido de_pascalTiago
 
Python bge
Python bgePython bge
Python bgeTiago
 
Threading in c_sharp
Threading in c_sharpThreading in c_sharp
Threading in c_sharpTiago
 
Retirar acentos de_determinado_texto_em_c_sharp
Retirar acentos de_determinado_texto_em_c_sharpRetirar acentos de_determinado_texto_em_c_sharp
Retirar acentos de_determinado_texto_em_c_sharpTiago
 
Remover caracteres especiais_texto_em_c_sharp
Remover caracteres especiais_texto_em_c_sharpRemover caracteres especiais_texto_em_c_sharp
Remover caracteres especiais_texto_em_c_sharpTiago
 
Obter ip da_internet_em_c_sharp
Obter ip da_internet_em_c_sharpObter ip da_internet_em_c_sharp
Obter ip da_internet_em_c_sharpTiago
 
Metodo using no_c_sharp
Metodo using no_c_sharpMetodo using no_c_sharp
Metodo using no_c_sharpTiago
 
Introdução ao c# para iniciantes
Introdução ao c# para iniciantesIntrodução ao c# para iniciantes
Introdução ao c# para iniciantesTiago
 
Interfaces windows em c sharp
Interfaces windows em c sharpInterfaces windows em c sharp
Interfaces windows em c sharpTiago
 
Filestream sistema arquivos
Filestream  sistema arquivosFilestream  sistema arquivos
Filestream sistema arquivosTiago
 
Curso linux professor rafael
Curso linux professor rafaelCurso linux professor rafael
Curso linux professor rafaelTiago
 
Curso de shell
Curso de shellCurso de shell
Curso de shellTiago
 
Controle lpt em_c_sharp
Controle lpt em_c_sharpControle lpt em_c_sharp
Controle lpt em_c_sharpTiago
 
Classes csharp
Classes csharpClasses csharp
Classes csharpTiago
 
C# o basico
C#   o basicoC#   o basico
C# o basicoTiago
 
C# classes
C#   classesC#   classes
C# classesTiago
 
Csharp ebook
Csharp ebookCsharp ebook
Csharp ebookTiago
 

Mais de Tiago (20)

Programacao php moodle
Programacao php moodleProgramacao php moodle
Programacao php moodle
 
Apostila cdtc dotproject
Apostila cdtc dotprojectApostila cdtc dotproject
Apostila cdtc dotproject
 
6572501 ldp-apostila-de-turbo-pascal
6572501 ldp-apostila-de-turbo-pascal6572501 ldp-apostila-de-turbo-pascal
6572501 ldp-apostila-de-turbo-pascal
 
Guia rapido de_pascal
Guia rapido de_pascalGuia rapido de_pascal
Guia rapido de_pascal
 
Python bge
Python bgePython bge
Python bge
 
Threading in c_sharp
Threading in c_sharpThreading in c_sharp
Threading in c_sharp
 
Retirar acentos de_determinado_texto_em_c_sharp
Retirar acentos de_determinado_texto_em_c_sharpRetirar acentos de_determinado_texto_em_c_sharp
Retirar acentos de_determinado_texto_em_c_sharp
 
Remover caracteres especiais_texto_em_c_sharp
Remover caracteres especiais_texto_em_c_sharpRemover caracteres especiais_texto_em_c_sharp
Remover caracteres especiais_texto_em_c_sharp
 
Obter ip da_internet_em_c_sharp
Obter ip da_internet_em_c_sharpObter ip da_internet_em_c_sharp
Obter ip da_internet_em_c_sharp
 
Metodo using no_c_sharp
Metodo using no_c_sharpMetodo using no_c_sharp
Metodo using no_c_sharp
 
Introdução ao c# para iniciantes
Introdução ao c# para iniciantesIntrodução ao c# para iniciantes
Introdução ao c# para iniciantes
 
Interfaces windows em c sharp
Interfaces windows em c sharpInterfaces windows em c sharp
Interfaces windows em c sharp
 
Filestream sistema arquivos
Filestream  sistema arquivosFilestream  sistema arquivos
Filestream sistema arquivos
 
Curso linux professor rafael
Curso linux professor rafaelCurso linux professor rafael
Curso linux professor rafael
 
Curso de shell
Curso de shellCurso de shell
Curso de shell
 
Controle lpt em_c_sharp
Controle lpt em_c_sharpControle lpt em_c_sharp
Controle lpt em_c_sharp
 
Classes csharp
Classes csharpClasses csharp
Classes csharp
 
C# o basico
C#   o basicoC#   o basico
C# o basico
 
C# classes
C#   classesC#   classes
C# classes
 
Csharp ebook
Csharp ebookCsharp ebook
Csharp ebook
 

Último

AD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptx
AD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptxAD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptx
AD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptxkarinedarozabatista
 
interfaces entre psicologia e neurologia.pdf
interfaces entre psicologia e neurologia.pdfinterfaces entre psicologia e neurologia.pdf
interfaces entre psicologia e neurologia.pdfIvoneSantos45
 
PROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdf
PROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdfPROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdf
PROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdfMarianaMoraesMathias
 
Mapa mental - Classificação dos seres vivos .docx
Mapa mental - Classificação dos seres vivos .docxMapa mental - Classificação dos seres vivos .docx
Mapa mental - Classificação dos seres vivos .docxBeatrizLittig1
 
GÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
GÊNERO TEXTUAL - TIRINHAS - Charges - CartumGÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
GÊNERO TEXTUAL - TIRINHAS - Charges - CartumAugusto Costa
 
CRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASB
CRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASBCRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASB
CRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASBAline Santana
 
Slide língua portuguesa português 8 ano.pptx
Slide língua portuguesa português 8 ano.pptxSlide língua portuguesa português 8 ano.pptx
Slide língua portuguesa português 8 ano.pptxssuserf54fa01
 
historia Europa Medieval_7ºano_slides_aula12.ppt
historia Europa Medieval_7ºano_slides_aula12.ppthistoria Europa Medieval_7ºano_slides_aula12.ppt
historia Europa Medieval_7ºano_slides_aula12.pptErnandesLinhares1
 
VARIEDADES LINGUÍSTICAS - 1. pptx
VARIEDADES        LINGUÍSTICAS - 1. pptxVARIEDADES        LINGUÍSTICAS - 1. pptx
VARIEDADES LINGUÍSTICAS - 1. pptxMarlene Cunhada
 
activIDADES CUENTO lobo esta CUENTO CUARTO GRADO
activIDADES CUENTO  lobo esta  CUENTO CUARTO GRADOactivIDADES CUENTO  lobo esta  CUENTO CUARTO GRADO
activIDADES CUENTO lobo esta CUENTO CUARTO GRADOcarolinacespedes23
 
Aula de História Ensino Médio Mesopotâmia.pdf
Aula de História Ensino Médio Mesopotâmia.pdfAula de História Ensino Médio Mesopotâmia.pdf
Aula de História Ensino Médio Mesopotâmia.pdfFernandaMota99
 
PLANOS E EIXOS DO CORPO HUMANO.educacao física pptx
PLANOS E EIXOS DO CORPO HUMANO.educacao física pptxPLANOS E EIXOS DO CORPO HUMANO.educacao física pptx
PLANOS E EIXOS DO CORPO HUMANO.educacao física pptxSamiraMiresVieiradeM
 
A horta do Senhor Lobo que protege a sua horta.
A horta do Senhor Lobo que protege a sua horta.A horta do Senhor Lobo que protege a sua horta.
A horta do Senhor Lobo que protege a sua horta.silves15
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...azulassessoria9
 
DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -
DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -
DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -Aline Santana
 
Bullying - Atividade com caça- palavras
Bullying   - Atividade com  caça- palavrasBullying   - Atividade com  caça- palavras
Bullying - Atividade com caça- palavrasMary Alvarenga
 
RedacoesComentadasModeloAnalisarFazer.pdf
RedacoesComentadasModeloAnalisarFazer.pdfRedacoesComentadasModeloAnalisarFazer.pdf
RedacoesComentadasModeloAnalisarFazer.pdfAlissonMiranda22
 
Ácidos Nucleicos - DNA e RNA (Material Genético).pdf
Ácidos Nucleicos - DNA e RNA (Material Genético).pdfÁcidos Nucleicos - DNA e RNA (Material Genético).pdf
Ácidos Nucleicos - DNA e RNA (Material Genético).pdfJonathasAureliano1
 

Último (20)

AD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptx
AD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptxAD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptx
AD2 DIDÁTICA.KARINEROZA.SHAYANNE.BINC.ROBERTA.pptx
 
interfaces entre psicologia e neurologia.pdf
interfaces entre psicologia e neurologia.pdfinterfaces entre psicologia e neurologia.pdf
interfaces entre psicologia e neurologia.pdf
 
PROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdf
PROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdfPROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdf
PROGRAMA DE AÇÃO 2024 - MARIANA DA SILVA MORAES.pdf
 
Mapa mental - Classificação dos seres vivos .docx
Mapa mental - Classificação dos seres vivos .docxMapa mental - Classificação dos seres vivos .docx
Mapa mental - Classificação dos seres vivos .docx
 
GÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
GÊNERO TEXTUAL - TIRINHAS - Charges - CartumGÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
GÊNERO TEXTUAL - TIRINHAS - Charges - Cartum
 
CRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASB
CRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASBCRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASB
CRÔNICAS DE UMA TURMA - TURMA DE 9ºANO - EASB
 
Slide língua portuguesa português 8 ano.pptx
Slide língua portuguesa português 8 ano.pptxSlide língua portuguesa português 8 ano.pptx
Slide língua portuguesa português 8 ano.pptx
 
historia Europa Medieval_7ºano_slides_aula12.ppt
historia Europa Medieval_7ºano_slides_aula12.ppthistoria Europa Medieval_7ºano_slides_aula12.ppt
historia Europa Medieval_7ºano_slides_aula12.ppt
 
VARIEDADES LINGUÍSTICAS - 1. pptx
VARIEDADES        LINGUÍSTICAS - 1. pptxVARIEDADES        LINGUÍSTICAS - 1. pptx
VARIEDADES LINGUÍSTICAS - 1. pptx
 
CINEMATICA DE LOS MATERIALES Y PARTICULA
CINEMATICA DE LOS MATERIALES Y PARTICULACINEMATICA DE LOS MATERIALES Y PARTICULA
CINEMATICA DE LOS MATERIALES Y PARTICULA
 
Bullying, sai pra lá
Bullying,  sai pra láBullying,  sai pra lá
Bullying, sai pra lá
 
activIDADES CUENTO lobo esta CUENTO CUARTO GRADO
activIDADES CUENTO  lobo esta  CUENTO CUARTO GRADOactivIDADES CUENTO  lobo esta  CUENTO CUARTO GRADO
activIDADES CUENTO lobo esta CUENTO CUARTO GRADO
 
Aula de História Ensino Médio Mesopotâmia.pdf
Aula de História Ensino Médio Mesopotâmia.pdfAula de História Ensino Médio Mesopotâmia.pdf
Aula de História Ensino Médio Mesopotâmia.pdf
 
PLANOS E EIXOS DO CORPO HUMANO.educacao física pptx
PLANOS E EIXOS DO CORPO HUMANO.educacao física pptxPLANOS E EIXOS DO CORPO HUMANO.educacao física pptx
PLANOS E EIXOS DO CORPO HUMANO.educacao física pptx
 
A horta do Senhor Lobo que protege a sua horta.
A horta do Senhor Lobo que protege a sua horta.A horta do Senhor Lobo que protege a sua horta.
A horta do Senhor Lobo que protege a sua horta.
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
 
DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -
DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -
DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -
 
Bullying - Atividade com caça- palavras
Bullying   - Atividade com  caça- palavrasBullying   - Atividade com  caça- palavras
Bullying - Atividade com caça- palavras
 
RedacoesComentadasModeloAnalisarFazer.pdf
RedacoesComentadasModeloAnalisarFazer.pdfRedacoesComentadasModeloAnalisarFazer.pdf
RedacoesComentadasModeloAnalisarFazer.pdf
 
Ácidos Nucleicos - DNA e RNA (Material Genético).pdf
Ácidos Nucleicos - DNA e RNA (Material Genético).pdfÁcidos Nucleicos - DNA e RNA (Material Genético).pdf
Ácidos Nucleicos - DNA e RNA (Material Genético).pdf
 

Curso python

  • 1. Gustavo Noronha Silva Curso de Python F´orum Mineiro de Software Livre Montes Claros setembro/2003
  • 2. Sum´ario Nota de Copyright Agradecimentos 1 Introdu¸c˜ao p. 6 2 Revis˜ao de Conceitos p. 7 2.1 Linguagem Interpretada vs Compilada . . . . . . . . . . . . . . . . . . p. 7 2.2 Tipagem Forte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 7 2.3 Orienta¸c˜ao a Objeto . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 8 3 M˜ao na massa! p. 9 3.1 O Interpretador Python . . . . . . . . . . . . . . . . . . . . . . . . . . p. 9 3.2 M´odulos, as bibliotecas do Python . . . . . . . . . . . . . . . . . . . . . p. 10 3.3 Se virando no Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 11 3.3.1 A fun¸c˜ao dir() . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 11 3.3.2 PyDoc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 12 3.3.3 Nosso amigo help() . . . . . . . . . . . . . . . . . . . . . . . . . p. 12 3.4 Vari´aveis e mais sintaxe b´asica . . . . . . . . . . . . . . . . . . . . . . . p. 15 3.5 Condi¸c˜oes e Estruturas de Repeti¸c˜ao . . . . . . . . . . . . . . . . . . . p. 16 3.6 Usando um editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 19 4 Tipos de Dados p. 22 4.1 Inteiros e Ponto flutuante . . . . . . . . . . . . . . . . . . . . . . . . . p. 22
  • 3. 4.2 Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 22 4.3 Listas e Tuplas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 23 4.4 Dicion´arios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 25 4.5 Convers˜ao / Casting . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 25 5 Fun¸c˜oes p. 27 5.1 Sintaxe B´asica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 27 5.2 Passagem Avan¸cada de Argumentos . . . . . . . . . . . . . . . . . . . . p. 27 5.3 Retorno da fun¸c˜ao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 28 5.4 Documentando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 28 6 Classes p. 30 6.1 Criando estruturas em Python . . . . . . . . . . . . . . . . . . . . . . . p. 30 6.2 M´etodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 31 6.3 Heran¸ca . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p. 31 7 Arquivos / IO p. 33
  • 4. Nota de Copyright Copyright ( c ) 2003, Gustavo Noronha Silva <kov@debian.org> Esse curso est´a licenciado sob a GNU FDL (Free Documentation License), fornecida pela Free Software Foundation.
  • 5. Agradecimentos Muito obrigado a Allan Douglas <allan douglas@gmx.net> pela grande ajuda na escrita desse curso.
  • 6. 6 1 Introdu¸c˜ao A programa¸c˜ao nos dias atuais est´a centrada em uma briga de gigantes que pretendem impˆor seus padr˜oes para substituir a linguagem conhecida como “padr˜ao da ind´ustria”, C++. Correndo por fora est˜ao linguagens relativamente pouco conhecidas e aclamadas, tal- vez por serem fruto do esfor¸co de grandes mestres da computa¸c˜ao (como as primeiras linguagens) e n˜ao por grandes empresas. Python ´e uma dessas linguagens e traz uma simplicidade indiscut´ıvel, ao mesmo tempo em que, apesar de ser uma linguagem interpretada, ´e extremamente veloz. Aqueles que j´a programam h´a tempos com linguagens cheias de controle sint´atico v˜ao certamente se sentir perdidos num primeiro contato, mas perceber˜ao que Python se adapta muito bem ao modelo mental do programador e vai se sentir falando com a m´aquina em pouco tempo.
  • 7. 7 2 Revis˜ao de Conceitos Python ´e uma linguagem simples, mas ´e constru´ıda em uma base te´orica e t´ecnica muito complexa. Ela eleva a orienta¸c˜ao a objetos, em alguns casos, ao extremo. Vamos dar uma revisada em alguns conceitos importantes que nos subsidiar˜ao no aprendizado de Python. 2.1 Linguagem Interpretada vs Compilada Python, como j´a foi dito, ´e uma linguagem interpretada, como Perl, Shell Script, Batch Scripts, entre outras. Isso significa que n˜ao ´e necess´aria a compila¸c˜ao do c´odigo para que ele seja executado e isso tr´as v´arias vantagens e desvantagens embutidas. Linguagens compiladas normalmente s˜ao mais r´apidas, porque o c´odigo j´a est´a num formato que o computador entende. Linguagens interpretadas costumam funcionar de uma ou outra maneira: • Compila¸c˜ao Just-In-Time • Interpreta¸c˜ao pura ou em Bytecode O Python pode funcionar das duas formas. Vamos usar mais o segundo modelo durante o curso, mas n˜ao se esque¸ca de conferir o compilador JIT do Python. 2.2 Tipagem Forte Python ´e uma linguagem de tipagem forte. Isso significa que se uma vari´avel adquire um determinado tipo n˜ao deixa mais de ser daquele tipo a menos que seja recriada. Isso o torna diferente de um script Shell, por exemplo, em que nunca se sabe o tipo exato de uma vari´avel.
  • 8. 8 Apesar da sua tipagem ser forte, a declara¸c˜ao de vari´aveis n˜ao ´e necess´aria e a simples atribui¸c˜ao de um valor serve para criar ou recriar uma vari´avel. Leve isso em conta quando programar. Tome muito cuidado com os nomes das vari´aveis. 2.3 Orienta¸c˜ao a Objeto Dou uma ˆenfase especial a esse conceito, pois j´a vi muita gente dizer que uma lingua- gem ´e orientada a objetos “porque vocˆe pode criar interfaces gr´aficas”1 . N˜ao tem nada a ver. Uma linguagem orientada a objetos coloca como centro nervoso do programa um ou mais objetos de determinada classe, ao contr´ario das linguagens estruturadas, em que o processo, ou as estruturas de dados s˜ao o centro e vocˆe chama fun¸c˜oes que atuam sobre esses elementos. Isso n˜ao significa, ´e claro, que n˜ao se pode criar aplica¸c˜oes com interfaces gr´aficas com Python ou com qualquer outra linguagem orientada ou n˜ao a objetos. Python ´e uma linguagem orientada a objetos, e nela quase tudo ´e um objeto. At´e mesmo as vari´aveis que representam os tipos mais b´asicos, como inteiro e caractere s˜ao objetos, tˆem seus m´etodos e propriedades. 1 Outro conceito extremamente errado e muito difundido ´e que C ´e para aplica¸c˜oes comuns e C++ para interfaces gr´aficas. Talvez seja exatamente uma deriva¸c˜ao do conceito errado que eu cito aqui, j´a que C++ ´e orientada a objetos e C n˜ao.
  • 9. 9 3 M˜ao na massa! Vamos ent˜ao come¸car! A primeira coisa a fazer ´e nos familiarizarmos com o interpre- tador Python, que pode nos ser muito ´util a qualquer momento. Veremos como descobrir informa¸c˜oes sobre um determinado elemento e como usar o interpretador para testarmos pequenos trechos de c´odigo. 3.1 O Interpretador Python O interpretador ´e o programa que executa c´odigo Python. Para execut´a-lo basta abrir um terminal e digitar ‘python’. Vocˆe ver´a algo desse tipo: O que vemos nas trˆes primeiras linhas ´e a apresenta¸c˜ao do interpretador. Ele est´a dizendo “oi!” =D. Basicamente ele informa de que vers˜ao do Python se trata, com que compilador foi compilado e sugere algumas chamadas b´asicas caso tenha problemas ou d´uvidas.
  • 10. 10 O >>> ´e o prompt do interpretador. Podemos sair programando em Python agora mesmo. O interpretador vai executar o c´odigo que escrevermos na hora, e poderemos ver o resultado. J´a que o interpretador nos disse “oi” n˜ao sejamos mal-educados, vamos responder a ele, digitando o seguinte: >>> print ’Ol´a, Python!’ Ol´a, Python! ´Otimo! Podemos ver que ‘print’ serve para mostrar mensagens na tela. Vocˆe pode usar aspas simples ou duplas para delimitar a mensagem. A fun¸c˜ao ‘print’ ´e uma excess˜ao entre as fun¸c˜oes do Python, j´a que ela n˜ao precisa de parenteses. Note, tamb´em, que n˜ao h´a um caractere delimitador da chamada (como “;” em C e Pascal). 3.2 M´odulos, as bibliotecas do Python No Python chamamos as cole¸c˜oes de c´odigo que fornecem extens˜oes para a linguagem de m´odulos. Pode-se fazer uma associa¸c˜ao `as bibliotecas usadas em C (e, na verdade, algumas vezes os m´odulos s˜ao bibliotecas). Para us´a-los, temos que import´a-los. Mas cuidado com a balan¸ca comercial, hein! (duh) O Python procura sempre proteger o chamado espa¸co de nomes e, portanto, sempre que vocˆe importar um m´odulo ter´a de usar seu nome para chamar fun¸c˜oes e acessar propriedades que est˜ao dentro dele. Isso pode ser familiar para quem lida com Java ou C#. Vejamos as trˆes formas de importar m´odulos: >>> import os >>> os.getcwd () ’/home/kov’ >>> from os import getcwd >>> getcwd () ’/home/kov’ >>> from os import * >>> getcwd () ’/home/kov’
  • 11. 11 A primeira, “import os”, importa o m´odulo como um todo, mas exige que sempre que vocˆe quiser acessar algo que pertence ao m´odulo vocˆe tenha que adicionar “os.” antes da fun¸c˜ao ou propriedade. O segundo, “from os import getcwd”, importa somente aquela fun¸c˜ao determinada; isso pode usar menos mem´oria e n˜ao ´e mais necess´ario usar “os.” antes de chamar a fun¸c˜ao; a terceira forma ´e como a segunda, mas ao inv´es de importar uma s´o fun¸c˜ao, importa todas. 3.3 Se virando no Python Este documento n˜ao pretende ser uma referˆencia completa sobre o Python. Ent˜ao, como obter ajuda? Como descobrir quais s˜ao as funcionalidades presentes nesta lingua- gem? Como “se virar”? 3.3.1 A fun¸c˜ao dir() O Python tem uma fun¸c˜ao chamada dir(). Ela fornece `a linguagem a capacidade de reflex˜ao, presente em linguagens como Java. Isso significa que vocˆe pode listar o conte´udo de m´odulos e qualquer outro tipo de objeto1 . Isso ajuda a saber sobre o que queremos ajuda, por exemplo. Vamos ver como funciona: >>> dir (__builtins__) (...) ’reduce’, ’reload’, ’repr’, ’round’, ’setattr’, ’slice’, ’staticmethod’, ’str’, ’sum’, ’super’, ’tuple’, ’type’, ’unichr’, ’unicode’, ’vars’, ’xrange’, ’zip’] >>> import sys >>> dir (sys) (...) ’prefix’, ’ps1’, ’ps2’, ’setcheckinterval’, ’setdlopenflags’, ’setprofile’, ’setrecursionlimit’, ’settrace’, ’stderr’, ’stdin’, ’stdout’, ’version’, ’version_info’, ’warnoptions’] >>> dir("umastring") (...) rip’, ’replace’, ’rfind’, ’rindex’, ’rjust’, ’rstrip’, ’split’, 1 M´odulos s˜ao objetos, depois de importados, e quase tudo em Python ´e um objeto, at´e uma string!
  • 12. 12 ’splitlines’, ’startswith’, ’strip’, ’swapcase’, ’title’, ’translate’, ’upper’, ’zfill’] Isso significa que o espa¸co de nomes builtins , carrega aquelas fun¸c˜oes ou proprie- dades2 , que o m´odulo sys tem aquelas listadas, e que vocˆe pode usar aqueles m´etodos em qualquer string. 3.3.2 PyDoc pydoc ´e um software que acompanha a distribui¸c˜ao oficial do Python. Ele permite acesso `a documenta¸c˜ao presente nas docstrings3 dos objetos. H´a v´arios modos de utiliza-lo, um dos mais ´uteis ´e chamando-o para que monte um pequeno servidor HTTP. Digite em um terminal: $ pydoc -p 1234 pydoc server ready at http://localhost:1234/ Ele criar´a um servidor que pode ser acessado pelo endere¸co http://localhost:1234. A p´agina ´e produzida automaticamente, e lista os m´odulos Python instalados. Clicando-se em um dos m´odulos pode-se visualizar quais s˜ao a fun¸c˜oes (m´etodos) dispon´ıveis, sua sintaxe e tamb´em uma breve descri¸c˜ao. 3.3.3 Nosso amigo help() O interpretador Python oferece um mecanismo de ajuda simples e eficiente. Ele provˆe uma fun¸c˜ao help(), que permite acessar parte da documenta¸c˜ao oficial Python e o PyDoc. Ele poder´a ser chamado para uma sess˜ao interativa: >>> help() (Apresenta¸c~ao) help> help> ´e o prompt do help. Tudo o que vocˆe digitar a partir de agora, ser´a interpretado pelo help. Digite ‘quit’ para sair. Para visualizar a documenta¸c˜ao docstring de um m´odulo, basta digitar o nome do m´odulo: 2 Uma propriedade, normalmente, ´e uma vari´avel. 3 As docstrings s˜ao textos inclu´ıdos no in´ıcio da defini¸c˜ao de uma classe ou fun¸c˜ao documentando-as. Veja mais detalhes na se¸c˜ao 5.4 do cap´ıtulo sobre Fun¸c˜oes, p´agina 28.
  • 13. 13 help> os Help on module os: NAME os - OS routines for Mac, DOS, NT, or Posix depending on what system we’re on. (...) Use as setas do teclado para ir para baixo/cima e aperte ‘q’ para sair. Para saber quais s˜ao os modulos dispon´ıveis, digite ‘modules’: help> modules Please wait a moment while I gather a list of all available modules... ArrayPrinter asyncore linuxaudiodev sgmllib BaseHTTPServer atexit locale sha Bastion audiodev logging (package) shelve CDROM audioop macpath shlex (...) Para procurar um m´odulo por palavra-chave, digite ‘module palavra’ e o help retornar´a uma lista de modulos que correspondem `aquela palavra. Al´em da documenta¸c˜ao dos m´odulos, o help permite que vocˆe obtenha ajuda em determinados t´opicos. Os assuntos s˜ao variados, v˜ao desde a descri¸c˜ao dos tipos b´asicos at´e como fazer o debugging de um programa. Digite ‘topics’ para ver quais s˜ao os topicos dispon´ıveis. Esqueceu qual a sintaxe do if ou de outra palavra-chave? N˜ao tema! O help tamb´em oferece um r´apido acesso `a gram´atica das palavras-chave, com uma breve descri¸c˜ao de seu uso. No help, digite ‘keywords’ para saber quais s˜ao as palavras-chaves. E para acessar sua documenta¸c˜ao, ´e s´o digitar o nome: help> if 7.1 The if statement
  • 14. 14 The if statement is used for conditional execution: if_stmt ::= "if" expression[1] ":" suite[2] ( "elif" expression[3] ":" suite[4] )* ["else" ":" suite[5]] (...) O help() pode ser chamado fora de um sess˜ao interativa. Para obter a documenta¸c˜ao de um m´odulo ou fun¸c˜ao, ´e necess´ario, primeiramente, import´a-lo: >>> import os >>> help(os.open) Help on built-in function open: open(...) open(filename, flag [, mode=0777]) -> fd Open a file (for low level IO). Para acessar a ajuda das palavras-chaves e dos t´opicos, ´e preciso chamar o help deli- mitando o nome do t´opico ou palavra-chave com aspas: >>> help(’TRUTHVALUE’) 2.2.1 Truth Value Testing Any object can be tested for truth value, for use in an if or while condition or as operand of the Boolean operations below. The following values are considered false: (...) 3.4 Vari´aveis e mais sintaxe b´asica Vamos continuar usando o interpretador. Agora vamos ver um pouco sobre vari´aveis. Vari´aveis s˜ao estruturas simples que servem para guardar dados. Como eu j´a disse, n˜ao ´e necess´ario declarar vari´aveis em Python. Vamos dar uma olhada ent˜ao:
  • 15. 15 >>> variavel = 1 >>> print variavel 1 >>> variavel 1 A primeira linha coloca 1 na vari´avel de nome variavel. A segunda linha mostra variavel na tela e a terceira retorna o valor de variavel. ´E muito importante fazer distin¸c˜ao entre essas duas ´ultimas. Um programador deve saber que normalmente toda “afirma¸c˜ao” que ´e feita em um programa ´e, na verdade, uma express˜ao, na maioria das linguagens. Em Python, sempre. Sempre existe uma avalia¸c˜ao do valor e um retorno do valor. O sentido pr´atico disso ´e que o segundo 1 n˜ao seria realmente mostrado na tela em um programa de verdade, ele seria retornado para nada. As opera¸c˜oes com n´umeros s˜ao feitas como em outras linguagens: >>> soma = 1 + 1 >>> print soma 2 >>> mult = soma * 3 >>> print mult 6 J´a que estamos lidando com vari´aveis, vamos ver como usar o print para coisas mais complexas. Vamos mostrar vari´aveis com ele. Existem v´arias formas. Observe: >>> soma = 2 + 2 >>> print "A soma ´e: " + str(soma) A soma ´e: 4 >>> print "A soma ´e, na verdade: %d" % (soma) A soma ´e, na verdade: 4 A primeira forma deve ser comum a quem programa em VB ou PHP, por exemplo. A segunda deve causar boas lembran¸cas aos programadores de C =). Eu, particularmente, prefiro a segunda forma, mas a primeira nos ensina duas coisas importantes: 1) ´e poss´ıvel
  • 16. 16 somar strings (e, veremos mais a frente, outros tipos de dados, tamb´em!) e 2) os tipos em Python s˜ao fortes, vocˆe tem que converter o inteiro para string se quiser concatenar os dois. Vamos analizar melhor a segunda. Entre aspas temos o que chamamos de formato, que ´e a defini¸c˜ao do que aparecer´a na tela. A string “%d” significa que ali ser´a colocado um inteiro. Depois do formato colocamos um separador (um “%”) e, entre parˆenteses uma lista separada por v´ırgulas, das vari´aveis que queremos que substituam os c´odigos. Vamos ver mais um exemplo: >>> meunome="Gustavo" >>> minhaidade=20 >>> print "Oi, eu sou %s e tenho %d anos!" % (meunome, minhaidade) Oi, eu sou Gustavo e tenho 20 anos! 3.5 Condi¸c˜oes e Estruturas de Repeti¸c˜ao Anets de come¸carmos a se¸c˜ao propriamente dita, ´e necess´ario entender como o Python marca o in´ıcio e o final de blocos. Aqueles acostumados com C e Pascal estar˜ao acostu- mados com coisas do tipo: if (variavel == 10) { printf ("´E 10!!!n"); } Ou if (variavel = 10) then begin writeln ("´E 10!!!"); end; O Python, para o desgosto de alguns, n˜ao tem estruturas sint´aticas de abertura e fechamento de blocos. O Python usa a indenta¸c˜ao para definir o in´ıcio e t´ermino de blocos. O problema aqui ´e que muitos programadores n˜ao tˆem h´abito de fazer uma
  • 17. 17 indenta¸c˜ao consistente. A vantagem do Python ´e que ele obriga o programador a ter uma indenta¸c˜ao consistente. =) Portanto, para come¸car um bloco de condi¸c˜ao, ´e necess´ario um n´ıvel de indenta¸c˜ao. Para indentar, pressione a tecla tab. Um exemplo: >>> variavel = 10 >>> if variavel == 10: ... print "´E 10!!" ... ´E 10!! Duas coisas importantes a serem observadas: 1) quando o Python espera que vocˆe inicie um bloco, o interpretador muda o prompt para “...” e 2) para mostrar que um bloco acabou (no interpretador) basta dar enter sem indentar uma linha depois de ter escrito seu bloco. Num programa de verdade n˜ao ´e necess´ario adicionar uma linha em branco para terminar um bloco, basta n˜ao indentar a linha seguinte. N´os veremos isso melhor mais a frente. Outra coisa importante: como eu disse inicialmente, no Python toda “afirmativa” ´e uma express˜ao. Mas, diferentemente do C, o Python n˜ao aceita atribui¸c˜oes em con- textos que devem ser somente usados para express˜oes de condi¸c˜ao. Por exemplo, como vimos, o Python usa o operador “==” para compara¸c˜oes. Se eu fizer if variavel = 10 o interpretador ir´a emitir um erro, porque atribui¸c˜oes n˜ao s˜ao permitidas em um if. Vocˆe pode fazer testes de condi¸c˜ao mais complexos com Python, tamb´em: >>> a = 2 >>> b = 6 >>> if variavel == 10 and a == 2: ... print "aaa" ... elif b == 6: ... print "bbb" ... else: ... print "ccc" ... aaa
  • 18. 18 Outros operadores podem ser usados, como “or” para rela¸c˜ao entre compara¸c˜oes, e “! =”, “<”, “>”, “<=” e assim por diante, para rela¸c˜ao entre vari´aveis e valores. Um loop for (para) em Python se parece muito com o estilo Pascal de for. Ele exige um tipo de dado mais complexo, que n´os veremos mais para frente, que ´e a lista. Mas por enquanto vamos ver o b´asico do for: >>> for contador in range (0, 3): ... print contador ... 0 1 2 A fun¸c˜ao range serve para retornar uma lista que contenha o intervalo dado pelos n´umeros especificados. Preste muita aten¸c˜ao. O primeiro n´umero que vocˆe especificar sempre entra no intervalo, o ´ultimo nunca. Em matem´atica poder´ıamos representar isso assim: [0, 3[. Um while segue, essencialmente a mesma l´ogica de qualquer outro while que eu j´a vi: >>> contador = 3 >>> while contador > 0: ... print "Python!" ... contador = contador - 1 ... Python! Python! Python! 3.6 Usando um editor Sim! Vamos parar de usar o interpretador diretamente para criar nossos c´odigos e vamos passar para um editor, o que nos permitir´a salvar nossos programas. Isso n˜ao significa que vamos esquecer o interpretador daqui para frente: muito pelo contr´ario! O interpretador vai ser quem rodar´a, efetivamente, o programa criado, e tamb´em o usaremos para obter ajuda e testar pequenos peda¸cos de c´odigo enquanto programamos.
  • 19. 19 Podemos usar qualquer editor que seja capaz de salvar texto puro. Isso significa qual- quer editor, provavelmente. Muitas pessoas tˆem a id´eia errada de que ´e necess´ario um programa espec´ıfico para programar. Muitas pessoas tamb´em cometem o erro de chamar esses programas de “compiladores”. Na verdade esses programas s˜ao chamados IDE’s (Integrated Development Environmet). H´a diversos IDE’s para Python e n´os conhecere- mos um mais `a frente. No entanto, por agora, vamos escolher qualquer editor simples e come¸car! Algumas conven¸c˜oes para as quais devemos atentar: os arquivos execut´aveis Python normalmente n˜ao tˆem extens˜ao, para manter a coerˆencia com o resto do sistema. Os que tˆem usam “.py” como extens˜ao. Os arquivos podem ser “byte-compilados”4 e, nesse caso, receber˜ao a extens˜ao “.pyc”. Outra conven¸c˜ao importante ´e que todo script Python deve come¸car com uma linha contendo a “string m´agica” (#!) e a localiza¸c˜ao do interpretador, para que o sistema saiba como executar o script5 . Normalmente essa linha ser´a: #!/usr/bin/python Essa ´e uma boa hora para dizer, tamb´em, que em Python os coment´arios s˜ao feitos com o s´ımbolo #. Tudo que vier depois de um # e antes de uma quebra de linha ´e um coment´ario. Ent˜ao vamos colocar nosso primeiro exemplo para funcionar... abra seu editor e escreva o seguinte: #!/usr/bin/python # define que a variavel ’variavel’ conter´a o valor 10 variavel = 10 if variavel == 10: # se vari´avel for igual a 10 while variavel > 0: # enquanto a vari´avel for maior que 0 print variavel # mostrar a vari´avel variavel = variavel - 1 # e, claro, diminuir seu valor 4 Pr´e-processados pelo interpretador para se tornar o “assembly” usado por ele, aumentando a veloci- dade de processamento sem perder a portabilidade. 5 Isso n˜ao tem validade no Windows... somente em sistemas Unix-like, como o GNU/Linux, o MacOSX, FreeBSD, HP-UX e outros, j´a que isso ´e uma conven¸c˜ao Unix.
  • 20. 20 # fim do programa!! Os coment´arios est˜ao a´ı s´o pra vocˆe aprender a us´a-los =). Eles n˜ao s˜ao, ´e claro, necess´arios. Depois de salvar o arquivo com um nome qualquer, “teste1.py” por exemplo, abra um terminal e execute os seguintes comandos: $ chmod +x teste1.py $ ./teste1.py O primeiro comando d´a permiss˜oes de execu¸c˜ao ao arquivo, o segundo o executa. O resultado deve ser: python@beterraba:~$ ./teste1.py 10 9 (...) 1 python@beterraba:~$ Hora da brincadeira!! Pegue seu editor preferido e fa¸ca testes com o que j´a aprendeu da linguagem!
  • 21. 21 4 Tipos de Dados O Python fornece, al´em dos tipos b´asicos de dados, alguns tipos mais avan¸cados e complexos que podem ser usados com muita facilidade. Quem j´a teve que usar uma lista encadeada sabe o quanto ´e complicado implementar esse tipo de estrutura do zero. O Python facilita muito as coisas, e n´os vamos explorar essas capacidades agora! 4.1 Inteiros e Ponto flutuante Lidar com n´umeros em Python ´e bem f´acil. Como j´a vimos, o Python detecta o tipo do dado no momento em que ele ´e atribu´ıdo `a vari´avel. Isso significa que: >>> inteiro = 10 >>> ponto_flutuante = 10.0 >>> print ’um inteiro: %d, um ponto flutuante: %f’ % (inteiro, ponto_flutuante) um inteiro: 10, um ponto flutuante: 10.000000 4.2 Strings Lidar com strings em Python ´e muito simples. O que faz com que o Python “detecte” o tipo string s˜ao as aspas, simples ou duplas. Vejamos: >>> meu_nome = "Gustavo" >>> meu_nick = ’kov’ >>> print "Meu nome ´e: %s, meu nick ´e %s!" % (meu_nome, meu_nick) Meu nome ´e: Gustavo, meu nick ´e kov! Como disse anteriormente, quase tudo em Python ´e um objeto. Isso significa que uma string tem m´etodos! Sim! Observe:
  • 22. 22 >>> nome = "kov" >>> nome.upper () ’KOV’ >>> "kov".upper () ’KOV’ Note, no entanto, uma coisa muito importante: uma string em Python ´e sempre uma constante! Vocˆe nunca modifica uma string, o que vocˆe pode fazer ´e reatribu´ı-la. Isso significa que se vocˆe quiser que a string continue em letras mai´usculas dali para frente vocˆe deve fazer “nome = nome.upper ()”. N´os veremos mais sobre como conhecer os m´etodos dispon´ıveis. Para acessar partes espec´ıficas da string, vocˆe pode usar a nota¸c˜ao de “fatias”. ´E importante entender bem essa nota¸c˜ao, porque ela ´e muito ´util em v´arias oportunidades e com alguns outros tipos de dados. >>> nome = ’Software Livre’ >>> nome ’Software Livre’ >>> nome[1] ’o’ >>> nome[1:5] ’oftw’ >>> nome[:-1] ’Software Livr’ 4.3 Listas e Tuplas Agora o tipo de dados que serve como vetor e listas encadeadas. Chamamos de lista uma lista que pode ser modificada dinamicamente e de tupla uma lista im´ovel. Vamos ver as opera¸c˜oes principais com listas: >>> lista = [] # os [] fazem com que ’lista’ seja iniciada como lista >>> lista.append (’kov’) >>> lista = [’kov’, ’spuk’, ’o_0’] >>> len(lista)
  • 23. 23 3 >>> lista.insert (2, ’agney’) >>> print lista [’kov’, ’spuk’, ’agney’, ’o_0’] >>> lista.pop () ’o_0’ >>> print lista [’kov’, ’spuk’, ’agney’] >>> lista.remove (’spuk’) >>> print lista [’kov’, ’agney’] Note que todas as opera¸c˜oes b´asicas de lista encadeada s˜ao contempladas pela imple- menta¸c˜ao de listas do Python. A terceira linha mostra como inicializar uma vari´avel com uma lista pr´e-criada. A quarta mostra como obter o tamanho da lista usando a fun¸c˜ao len() 1 . Nesse exemplo usamos strings na lista, mas uma lista pode conter qualquer tipo de dado, inclusive listas, possibilitando a cria¸c˜ao simples de ´arvores, inclusive. Algo importante de se notar ´e que d´a para usar a lista do Python como pilha, usando os m´etodos append() e pop(). Outra deriva¸c˜ao importante desse exemplo ´e ver que uma lista em Python ´e indexada, como um vetor. Podemos usar “lista[0]” para acessar o primeiro ´ıtem da lista2 , e podemos usar esse ´ındice para inserir n´os em posi¸c˜oes espec´ıficas. As listas tˆem outros m´etodos de extermo interesse, como o sort(), que serve para ordenar a lista. ´E sentar e explorar as possibilidades! As tuplas funcionam quase do mesmo modo que as listas, com a excess˜ao de que s˜ao listas que n˜ao s˜ao modific´aveis. Elas s˜ao bastante usada como retorno de algumas fun¸c˜oes, portanto ´e bom explor´a-las. Vocˆe reconhece uma tupla por sua similaridade com uma lista, mas ao inv´es de usar [] uma tupla usa parˆenteses. Um exemplo r´apido: >>> tupla = (1, 35) >>> tupla[0] 1 >>> tupla (1, 35) 1 Note que a fun¸c˜ao len() pode ser usada em outros tipos de dados, como strings, por exemplo 2 Em Python, como em C, ´ındices sempre come¸cam do 0.
  • 24. 24 4.4 Dicion´arios Quem j´a ouviu falar de Hash tables vai se sentir familiarizado com os dicion´arios rapi- damente. Os dicion´arios em Python s˜ao, literalmente, estruturas de dados que permitem “traduzir” uma chave para um valor. Seu uso ´e muito simples: >>> linguagem = {} >>> linguagem[’nome’] = ’Python’ >>> linguagem[’tipo’] = ’scripting’ >>> linguagem[2] = 100 >>> linguagem[2] 100 >>> linguagem[’tipo’] ’scripting’ 4.5 Convers˜ao / Casting Python usa tipagem forte. Isso significa que se uma vari´avel cont´em um inteiro ela n˜ao pode simplesmente ser usada como se fosse uma vari´avel de ponto flutuante. Para esse tipo de coisas ´e necess´ario fazer uma convers˜ao. Aqui est˜ao exemplos: >>> a = 10 >>> str (a) ’10’ >>> float (a) 10.0 >>> int (’25’) 25
  • 25. 25 5 Fun¸c˜oes 5.1 Sintaxe B´asica Fun¸c˜oes em python tem uma sintaxe muito parecida com qualquer outra linguagem. O uso de parˆenteses ´e obrigat´orio, mesmo que n˜ao aja argumentos, ao contr´ario de algumas, com a ´unica excess˜ao da fun¸c˜ao interna print. Declarar uma fun¸c˜ao em Python ´e muito simples: >>> def minha_funcao (argumento): ... print argumento ... >>> minha_funcao (’123kokoko!’) 123kokoko! Como pode ser visto, o bloco que implementa a fun¸c˜ao tamb´em ´e demarcado pela indenta¸c˜ao. 5.2 Passagem Avan¸cada de Argumentos Os argumentos n˜ao tˆem tipo declarado, o que d´a uma grande flexibilidade. Os ar- gumentos podem ter valores padr˜ao, tamb´em, e vocˆe pode dar valores espec´ıficos para argumentos opcionais fora da localiza¸c˜ao deles, nesses casos. Vejamos: >>> def mostra_informacoes (obrigatorio, nome = ’kov’, idade=20): ... print "obrigatorio: %snnome: %snidade: %d" % (obrigatorio, nome, idade) ... >>> mostra_informacoes (’123’) obrigatorio: 123
  • 26. 26 nome: kov idade: 20 >>> mostra_informacoes (’123’, idade = 10) obrigatorio: 123 nome: kov idade: 10 5.3 Retorno da fun¸c˜ao Para retornar um (ou mais) valores em uma fun¸c˜ao basta usar a declara¸c˜ao return. Vocˆe pode, inclusive, retornar diversos valores e, como na passagem de parˆametros, n˜ao precisa declarar o tipo de dado retornado: >>> def soma_e_multiplica (x, y): ... a = x + y ... b = x * y ... return a, b ... >>> c, d = soma_e_multiplica (4, 5) >>> print c 9 >>> print d 20 5.4 Documentando Uma caracter´ıstica interessante do Python ´e a possibilidade de documentar c´odigo no pr´oprio c´odigo, sem usar ferramentas externas. Basta colocar uma string envolvida por sequˆencias de trˆes aspas: >>> def funcao (x): ... """ ... funcao (x) -> inteiro ... ... recebe um inteiro, multiplica ele por si mesmo
  • 27. 27 ... e retorna o resultado ... """ ... return x * x ... >>> help (funcao) Help on function funcao in module __main__: funcao(x) funcao (x) -> inteiro recebe um inteiro, multiplica ele por si mesmo e retorna o resultado
  • 28. 28 6 Classes Classes s˜ao como id´eias. S˜ao um dos pilares da orienta¸c˜ao a objetos. Se pensarmos como fil´osofos podemos associar um objeto (ou uma instˆancia, o que ´e mais correto no caso do Python) a um ente concreto, um indiv´ıduo. O exemplo cl´assico ´e pensar em ser humano, uma classe, e Jos´e da Silva, um exemplar dessa classe, uma instˆancia dessa classe. 6.1 Criando estruturas em Python No Pascal s˜ao conhecidos como registros, no C como estruturas ou structs. O Python por incr´ıvel que pare¸ca n˜ao tem uma estrutura de dado como essa. Para implementar algo similar a um registro ´e necess´ario usar uma classe. A sintaxe ´e muito simples: >>> class registro: ... nome = "" ... idade = 0 ... >>> r = registro () >>> r.nome = "kov" >>> r.idade = 10 >>> print r.nome kov A ´unica diferen¸ca existente entre uma classe e uma estrutura, quando se usa assim, ´e que vocˆe pode criar novos “membros” dentro da classe a qualquer momento, bastando atribuir algo.
  • 29. 29 6.2 M´etodos Definir m´etodos em classes Python ´e uma quest˜ao de definir uma fun¸c˜ao dentro da classe (a indenta¸c˜ao marca o bloco, lembre-se). O importante ´e que o nome que vocˆe passar como primeiro argumento para um m´etodo representa o pr´oprio objeto (an´alogo ao this de outras linguagens), mas n˜ao precisa ser passado como argumento quando for chamar o m´etodo. Um exemplo: >>> class humano: ... def falar (self, oque): ... self.print (oque) ... def imprimir (self, oque): ... print oque ... >>> eu = humano () >>> eu.falar ("qualquer coisa") qualquer coisa Existe um m´etodo especial para toda classe, chamado init . Esse m´etodo ´e an´alogo ao construtor de outras linguagens. Ele ´e chamado quando vocˆe instancia um objeto, e os argumentos passados na chamada de instancia¸c˜ao s˜ao passados para esse m´etodo. 6.3 Heran¸ca O Python permite heran¸ca de classes. Podemos, ent˜ao, definir uma nova classe que herda as caracter´ısticas de registro e humano, que definimos acima assim: >>> class coisa (registro,humano): ... def coisar (self): ... print "eu coiso, tu coisas, ele coisa..." ... >>> c = coisa () >>> c.falar ("abc") abc ´E claro, ´e poss´ıve herdar uma classe apenas, bastando colocar seu nome entre parˆenteses.
  • 30. 30 7 Arquivos / IO Lidar com arquivos em Python ´e coisa muito simples. Uma das primeiras coisas que eu procuro fazer quando aprendo uma linguagem ´e abrir, ler e gravar em um arquivo, ent˜ao vamos ver aqui como fazer. Um arquivo aberto ´e um objeto, para criar esse objeto usando a fun¸c˜ao open, que ser´a muito familiar para programadores da linguagem C: >>> arq = open (’/tmp/meuarquivo.txt’, ’w’) >>> arq.write (’meu teste de escrever em arquivonmuito legal’) >>> arq.close () O primeiro argumento de open ´e o nome do arquivo, e o segundo ´e o modo como ele ser´a aberto. Os modos poss´ıveis s˜ao: “w” para apagar o que existir e abrir para escrita (cria o arquivo se n˜ao existir); “w+” faz o mesmo que “w”, mas abre para escrita e leitura; “r”, abre para leitura; “a” abre o arquivo para escrita, mantendo o conte´udo e posiciona o cursor no final do arquivo; “a+” faz o mesmo que “a”, mas abre para leitura e escrita. O m´etodo write da instˆancia do objeto arq est´a sendo usado para gravar a string no arquivo. Vocˆe pode usar a mesma nota¸c˜ao usada com print entre os parˆametros do m´etodo (na verdade vocˆe pode usar a nota¸c˜ao do print em qualquer lugar que receba uma string). Para ler um arquivo: >>> arq = open (’/tmp/meuarquivo.txt’) >>> arq.read () ’meu teste de escrever em arquivonmuito legal’ >>> arq.readline () ’’ >>> arq.seek(0) >>> arq.readline ()
  • 31. 31 ’meu teste de escrever em arquivon’ Como podemos ver, n˜ao ´e necess´ario especificar o modo de abertura quando s´o se quer ler. A fun¸c˜ao open assume o segundo argumento como sendo “r”. O m´etodo read() lˆe o arquivo completo, como podemos ver, e qualquer tentativa de leitura resulta em uma string vazia, como vemos na quarta linha. O m´etodo seek() serve para posicionar o cursor no arquivo e a readline() serve para ler uma linha apenas. O m´etodo close() seria usado nesse caso, tamb´em.