You are on page 1of 38

Universidade Federal Fluminense Centro Tecnolgico Escola de Engenharia Curso de Engenharia de Telecomunicaes Programa de Educao Tutorial Grupo PET-Tele

Tutorial de Introduo ao Python


(Verso: 2k9) Niteri - RJ Maio / 2009

Sumrio
1 2 3 4 5 6 Caractersticas bsicas da linguagem Obteno e instalao Variveis Operaes matemticas Entrada de Dados Estruturas de controle
6.1 6.2 6.3

2 3 3 4 5 6
6 7 7

If . . . While For . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Listas
7.1 7.2 7.3 7.4 7.5 7.6 Inserindo um novo dado a uma lista . . . . . . . . . . . . . . . Impresso dos contedos da lista . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Determinar em que ordem um elemento aparece na lista Remover um elemento de uma lista

9
11 11 12 12 13 14

Range

Descobrir o tamanho de uma lista . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

8 9

Dicionrio Funes
9.1 9.2 Variveis em funes . . . . . . . . . . . . . . . . . . . . . . . Recursividade . . . . . . . . . . . . . . . . . . . . . . . . . . .

15 16
17 18

10 Mdulos
10.1 Mdulo

Math

20
. . . . . . . . . . . . . . . . . . . . . . . . . . 21 22 25 25 25

10.2 Mdulo io - Manipulao de arquivos . . . . . . . . . . . . . . 10.3 PySQLite: Manipulao de Bancos de Dados . . . . . . . . . . 10.3.1 Introduo . . . . . . . . . . . . . . . . . . . . . . . . . 10.3.2 Comandos bsicos . . . . . . . . . . . . . . . . . . . . .

11 Expresses booleanas

26

Introduo
A idia de um ser humano, enquanto for apenas um pensamento, algo amorfo, que existe por si mesma, no necessitando de nada, alm de si, para descrev-la. Entretanto para compartilh-la com outras pessoas precisamos descrever esta idia com palavras e frases, transformando este pensamento em uma linguagem natural humana. Computadores e outros dispositivos eletrnicos programveis possuem sua prpria forma de pensar, isto , o cdigo binrio. seus componentes. Ento para transmitir uma idia para uma mquina devo me comunicar em zeros e uns? A resposta para esta pergunta um sim e um no. Um sim pois, de fato, a idia que ser recebida pela mquina ser descrita como uma sequncia de zeros e uns. O no se refere a dizer que embora seja possvel traduzir sua idia para uma linguagem natural da mquina (binrio), este no o processo mais comum. A programao diretamente em binrio algo demasiadamente complexo para humanos, pois a forma bsica de expresso do ser humano so as palavras e no sequncias numricas. Para contornar este problema foram criadas as linguagens de programao, que so pontes entre a linguagem natural humana e a linguagem da mquina (binria), mesclando conceitos das linguagens de mquina e natural humana. As linguagens de programao so classicadas em vrios nveis de acordo com sua proximidade com a linguagem humana. Linguagens de baixo nvel tem a funo de descrever uma situao mais prxima do ponto de vista de uma mquina, ao passo que linguagens de alto nvel so concebidas com o propsito de tornar fcil a traduo de um pensamento (algoritmo), se assemelhando com delidade linguagem humana que seria necessria para descrever aquela idia. Neste tutorial descreveremos a linguagem de programao Python cujo objetivo se aproximar bastante da linguagem humana, sendo assim intuitiva, fcil e ao mesmo tempo sendo bastante exvel, se adequando ao uso em diversas situaes. Mquinas seguem instrues determinadas pela energizao (ou no) de determinadas partes em

Caractersticas bsicas da linguagem

Python uma linguagem de programao interpretada, de cdigo-fonte aberto e disponvel para vrios sistemas operacionais. Ser uma linguagem interpretada signica dizer que ao se escrever um programa, este no ser compilado (traduzido para uma linguagem de mquina), mas sim lido por um outro

programa (chamado de interpretador) que traduzir para a mquina o que seu programa quer dizer. O interpretador para Python interativo, ou seja, possvel execut-lo sem fornecer um script (programa) para ele. Ao invs disso, o interpretador disponibilizar uma interface interativa onde possvel inserir os comandos desejados um por um e ver o efeito de cada um deles. Neste tutorial, se encontra a representao  >>> antes da maioria dos comandos apresentados , o que quer dizer que este comando est sendo inserido no interpretador interativo (e sempre abaixo, o resultado gerado).

Obteno e instalao

Caso o usurio esteja utilizando um sistema Linux ou OS X (Apple), o interpretador para Python j vem instalado por padro, sendo apenas necessrio escrever o comando python no seu programa de terminal favorito. Para usurios do sistema operacional Windows, o interpretador para Python deve ser baixado atravs do site http://www.python.org e instalado. Neste ltimo sistema o usurio encontra um utilitrio para fazer o papel de terminal (e editor de python) no Windows, denominado IDLE.

Variveis

Variveis so formas de se armazenar dados para uso posterior, elas podem ser classicadas em 3 tipos bsicos que so mostradas logo abaixo. Quando analisarmos as listas veremos que existem outras variveis mais complexas.

int

- Um nmero inteiro - Um ponto utuante - Uma sequncia de caracteres

oat

string

Ao contrrio da maioria das outras linguagens, em Python, no necessrio declarar as variveis que sero usadas, tampouco denir seu tipo. A prpria sintaxe do dado a ser armazenado identica o tipo da varivel para armazenlo. Por exemplo, caso deseje-se atribuir o valor 3 varivel

A=3. Python saber que A um inteiro (tipo  int ). Por outro lado, se o
valor a ser armazenado fosse 3,2 que um dado do tipo ponto utuante, este deveria ser expresso como

A, basta digitar

A=3.2. Observe que, para Python, A=3 e

B=3.0 so variveis de tipos diferentes e isto deve ser levado em conta ao se realizar certos tipos de manipulaes de dados.

Operaes matemticas
Suas capacidades matemticas se extendem desde

Alm de ser uma poderosa linguagem de programao, Python sabe lidar bem com matemtica. operaes bsicas at operaes com nmeros complexos. Abaixo, vamos comear aprendendo as 4 operaes matemticas bsicas. Lembre-se que  >>> signica a digitao de um comando no interpretador.

omX >>>PCQ S utroX >>>PEQ EI wultiplioX >>>PBQ T hivisoX >>>PGQ H


Na diviso, pode-se optar por resultados como nmeros inteiros (ou o inteiro mais prximo) ou resultado exato (um ponto utuante). Para isso, deve-se fornecer um inteiro (para se obter um inteiro como resultado) ou um ponto utuante (para se obter o resultado exato).

hivisoX >>>PFHGQFH HFTTTTTTTTTTTTTTTTQ


A operao aritimtica de potenciao tambm pode ser feita, assim como a sua inversa, a radiciao.

otenioX >>> PBBQ V


No existe um comando especco para a radiciao em Python (exceto para a raiz quadrada). Entretanto, para obter a raiz n-sima de um nmero basta elev-lo por de nmeros inteiros ou pontos ututante tambm se aplicam a este caso.

1/n onde  n 

o ndice da raiz. As regras para a obteno

diioX >>>VBB@IFHGQFHA PFH

Entrada de Dados

Atravs do comando tamanho da

string

raw_input

podemos receber do usurio uma

pode ser conhecido pelo comando

len() .

string.

>>> nome a rwinput@9higite seu nomeX 9A higite seu nomeX edro >>> nome 9edro9 >>> len@nomeA S >>> sorenome a rwinput@9egor digite o sorenomeX 9A egor digite o sorenomeX eluquerque

oats

Operaes matemticas no podem ser feitas com e inteiros, porm se somarmos

strings,

strings,

apenas com

Python as juntar, num pro-

cesso chamado concatenao e se multiplicarmos uma

string ela ser repetida.

>>> nome C sorenome 9edroeluquerque9 >>>nomeBQ 9edroedroedro9


Se a priori sabemos que o dado digitado pelo usurio no ser uma podemos utilizar como entrada de dados o comando

string,

input():

>>> idde a input@9higite su iddeX 9A higite su iddeX PU >>> ltur a input@9ul su lturX 9A ul su lturX IFUS >>> type@iddeA `type 9int9b >>> type@lturA `type 9)ot9b
Observao: O dado inserido pelo usurio j dinamicamente tipado. Para saber qual foi a varivel atribuda, basta digitar o comando devolver a varivel referente ao objeto entre parnteses.

type() que ele

Estruturas de controle

Os comandos de Python so executados pelo computador, linha por linha e as estruturas de controle permitem ao programador modicar a ordem em que cada comando ser executado bem como se ele ser ou no executado.

6.1

If
if direciona o

Outra estrutura que estudaremos a condicional. O comando

computador a tomar uma deciso, baseado nas condies determinadas. Se a condio for atendida, um bloco de comandos ser executado, caso contrrio, o computador executa outros comandos.

>>>if 5ondioI for verddeirX ... ... ...elseX ... 5loo de omndos Q 5loo de omndos I 5loo de omndos P ...elif 5ondioP for verddeirX

Nessa estrutura podemos utilizar quantas condies interessantes, basta repertimos o

elif

seguido das condies desejadas. Tendo isso em vista, ve-

jamos um programa de adivinha um nmero:

>>>num a PQ >>>dv a H >>>while dv 3a numX ... ... ... ... ... ... ... ... >>>snsir um nmeroX
Como vimos, em Python no necessrio que utilizemos a terminarmos uma estrutra.

dv a input@9snsir um nmeroX 9A if dv ` numX print 9 mior39 elif dv b numX print 9 menor39 elseX print 9o ertou39

tag

end para
Em da prx-

Isto devido a identao do programa.

Python, uma estrutura terminada automaticamente quando a

tag

ima linha comea no incio da linha.

6.2

While
O

Comearemos por uma estrutura de repetio.

loop

while tem como

funo repetir determinado bloco de comando, at que uma determinada condio pare de ser atendida. Para que o bloco seja executado no momento correto, devemos manter uma rgida identao, ou seja, tudo que pertencer ao bloco do

while, deve estar um espao a frente, isto ajuda a deixar o cdigo

legvel e organizado.

>>> while 5ondio for verddeir X ... ... >>> 5ontinuo do progrm
Vejamos, por exemplo, como calcular um nmero fatorial:

5loo de omndos pertenentes o while

>>> resultdo a I >>> num a input@9intre om um nmero inteiroX 9A >>> intre om um nmero inteiroX T >>> while num b IX ... ... ... >>> print numD 9 3 igul 9Dresultdo >>> T3 igul UPH
Se a condio estabelecida no o seu

resultdo a resultdo B num num a num E I

loop

while for sempre verdadeira, como 2 < 1, while 1 em vez de estabelecer

ser innito, pois a condio ser sempre atendida. Caso esse seja

seu desejo, pode-se usar tambm o comando

uma condio qualquer (isso porque segundo a lgica booleana, que ser vista na nona seo, o python interpreta o valor 1 como verdadeiro).

6.3

For
for, em Python, difere do que normalmente se v em outras

O comando

linguagens de programao, onde esse comando tem a nalidade de realizar uma iterao baseada numa progresso aritimtica, percorrendo os nmeros denido pelo usurio, enquanto em Python a iterao feita percorrendo os itens de uma sequncia, seja ela uma lista ou at mesmo uma

string.

Vamos

analisar o cdigo abaixo:

>>> for ontdor in rnge@ID IIAX ... print ontdor


A estrutura acima utiliza uma varivel criada, no caso percorrer cada elemento da lista criada com o comando isso, cada repetio feita pelo

contador, para

loop

range(1,11), com range e

for far com que a varivel contador

aponte para um diferente valor dentro da lista formada pela funo logo em seguida imprima esse valor. A sada que teramos neste caso seria:

I P Q R S T U V W IH
Ou seja, um print de todos os elementos da lista. A funo

for tambm pode ser aplicada com o uso de

strings, observemos

o caso abaixo:

>>> list a 9vid9D RPD 9o universo9D TD 9e9D UD 9tudo9 >>> for item in listX ... print 9y item tul X9Dprint

E obteramos como sada:

y item tul X vid y item tul X RP y item tul X o universo y item tul X T y item tul X e y item tul X U y item tul X tudo
8

Exerccios:

IF ixiir um srie de nmeros @ID PD QD RD SD FFF A em um loop in(nitoF y progrm deve enerrrEse qundo for pressiond um tel espe(D omo um igF PF yter um srie de nmeros do teldo e ordenEls tnto em ordem sendente omo desendenteF pzer o mesmo om um srie de stringsF QF glulr o goe(iente de eynoldsD reeendo os prmetros ns uniddes propridsF sndirD em funo deste oe(ienteD se o )uxo lminr @resultdo inferior PFIHHAD de trnsio @entre PFIHH e RFHHHA ou turulento @im de RFHHHA RF p um rogrm que pe P nmeros inteiros e um nmero relF glule e mostreX
A y produto do doro do primeiro om metde do segundo F A e som do triplo do primeiro om o tereiroF A y tereiro elevdo o uoF

SF p um progrm que ree dois nmeros inteiros e gere os nmeros inteiros que esto no intervlo ompreendido por elesF TF p um progrm que pe um nmero inteiro e determine se ele ou no um nmero primoF m nmero primo quele que divisvel somente por ele mesmo e por IF

Listas

Listas so sequncias de variveis. Aps denidas, podem ser modicadas de vrias maneiras, pois so mutveis. Para denir uma lista basta digitar:

lista = [9,8,7]
O endereamento dos componentes comea no 0. Ento, se voc deseja usar um determinado elemento da lista, basta cham-lo: voc est se referindo ao elemento de posio x na lista. Alguns comandos referentes a listas:

lista[x]. Com isso,

len(lista) informa o tamanho da lista lista.append(x) adiciona o elemento x no nal da sua lista lista.extend([6,5,4]) adiciona uma lista inteira no nal da sua lista lista[y]= x insere o valor y na posio x da lista

Ns j vimos anteriormente que variveis comuns armazenam um nico valor. Entretanto, existem outros tipos de variveis capazes de armazenar mais de um valor. Em Python, chamamos essas variveis com capacidade de armazenamento de listas ou vetores. Vamos explicar a sintaxe de uma lista atravs das linhas de cdigo exibidas abaixo:

>>> meses a 9tneiro9D 9pevereiro9D 9wro9D 9eril9D 9wio9D 9tunho9D 9tulho9D9egosto9D 9etemro9D 9yutE uro9D 9xovemro9D 9hezemro9 >>> while IX ... ... ... qulmes a input@isolh um ms @IEIPAcA if I `a whihone `a IPX print 9y ms 9D mesesqulmes E I

Ao rodar este programa obteremos a seguinte sada como exemplo:

>>> isolh um ms @IEIPAc S y ms wio >>> isolh um ms @IEIPAc IP y ms hezemro >>> isolh um ms @IEIPAc
Primeiramente criamos a nossa lista. A denio de uma lista anloga a de uma varivel qualquer, porm isolando o contedo com colchetes. O uso das aspas (duplas ou simples) apenas necessrio caso estejamos inserindo na lista uma

string, se armazenssemos apenas um nmero, no seria necessrio.

Exemplo:

teste a 9vid9D RPD 9universo9D TD 9e9D U


Depois inserimos o comando entre em

loop.

while 1: que faz com que o nosso programa

O programa vai rodar indenidamente at ser dado o comando

Ctrl+D, ou at que o programa seja fechado. Uma vez nesse feito com a utilizao de um comando

loop, denida

pelo usurio a varivel qual_mes, e depois de um tratamento de erros,

if, nos devolvido o nome do ms

selecionado. Na ltima linha do cdigo utilizamos uma propriedade da lista, que buscar um dado da lista, que se d escrevendo o nome da lista e entre colchetes o nmero referente ao local da lista, onde est o dado requerido (lista[nmero]). Observe que na nossa linha de cdigo, o comando zero.

print

dado pelo ms escolhido menos um, ou seja, indexando as listas partindo do

10

Alm de selecionar um elemento de uma lista, temos algumas outras propriedades que apresentaremos em seguida.

7.1

Inserindo um novo dado a uma lista


.append:

Para inserir um novo dado a uma lista qualquer, chamamos um mtodo chamado

>>>teste a >>>testeFppend@9zero9A >>>testeFppend@9um9A >>>teste 9zero9D9um9


Infelizmente o comando .append s consegue adicionar um dado na lista por vez, mas se quisermos adicionar mais dados podemos simplesmente somar listas, multiplic-las, ou utilizar o comando

.extend:

>>>testeFextend@9dois9D9trs9D >>>som a 9qutro9D9ino9 >>>teste Ca som >>>teste C 9seis9 9zero9D9um9D9dois9D9trs9D9qutro9D9ino9D9seis9 >>>testeBP zero9D9um9D9dois9D9trs9D9qutro9D9ino9D9seis9Dzero9D9um9D9dois9D9trs9D9qutro9D9ino9D9seis9
Observao: o cdigo

teste += soma o mesmo que escrever teste =

teste + soma.

7.2

Impresso dos contedos da lista


teste sem referenciarmos nenhum elemento especco

Ao chamarmos a lista

estamos lidando com todos os elementos da lista. Podemos tambm imprimir somente alguns valores de dentro da lista, necessitando para isso apenas indicar o local:

>>>print 9es vrivis n list teste so 9Dteste es vrivis n list teste so 9zero9D9um9D9dois9D9trs9D9qutro9 >>>print 9es vrivis H e Q d list teste so 9DtesteHD9 e 9DtesteQ

11

es vrivis H e Q d list teste so zero e trs


Podemos tambm utilizar o comando

for.

>>>for vlor in testeX ... print vlor ... zero um dois trs qutro

7.3

Determinar em que ordem um elemento aparece na lista

A funo

.index retorna o ndice da primeira ocorrncia do valor especi-

cado, ou seja, para imprimirmos na tela a posio em que a aparece, utilizaramos o cdigo:

string

quatro

>>>print listFindex@4qutroA R
Observao: importante notar que a lista inicia sua contagem a partir

do 0 (zero) o que explica o nmero 4 obtido acima.

7.4

Remover um elemento de uma lista

Para remover um elemento de uma lista utilizamos o comando ciando o

index, ou posio da lista, onde haver a remoo.

del, referen-

>>>print 9entes list 9teste9 erX 9Dteste entes list 9teste9 erX 9zero9D9um9D9dois9D9trs9D9qutro9 >>>del testeQ >>>print 9egor list 9teste9 X 9Dteste egor list 9teste9 X 9zero9D9um9D9dois9D9qutro9
Podemos obter o mesmo efeito utilizando o mtodo

.remove que procu-

raria a primeira ocorrncia na lista para um dado valor ou

string :

12

>>>list Ca 9um9 >>>print 9entes list 9teste9 erX 9Dteste entes list 9teste9 erX 9zero9D9um9D9dois9D9qutro9D9um9 >>>testeFremove@4umA >>>print 9egor list 9teste9 X 9Dteste egor list 9teste9 X 9zero9D9dois9D9qutro9D9um9

7.5

Descobrir o tamanho de uma lista


len(), como ex-

Para descobrir o tamanho de uma lista, usamos o comando emplicado no cdigo abaixo:

>>>print 9y tmnho d list teste X 9D len@testeA R


Nos dizendo que a lista teste possui 4 variveis.

13

7.6

Range
range gera um vetor contendo nmeros (inteiros) sequnciais, obe-

A funo

decendo a regra de escrita:

range(incio,m)
importante observar que o nmero nalizador descrito acima no includo no vetor, por exemplo:

>>>vetor a rnge@IDIIA >>>print vetor


O cdigo acima nos dar como sada o vetor: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]. Em outras palavras, o ltimo nmero excludo do vetor, portanto o 11 no entra na composio deste. A funo

range aceitar quaisquer nmeros inteiros desde que o nmero

inicial seja maior que o nmero nal, bem como quando apenas o nmero nal passado para a funo, portanto so vlidas as construes:

>>> rnge@ID IHA ID PD QD RD SD TD UD VD W >>> rnge@EQPD EPHA EQPD EQID EQHD EPWD EPVD EPUD EPTD EPSD EPRD EPQD EPPD EPI >>> rnge@SDPIA SD TD UD VD WD IHD IID IPD IQD IRD ISD ITD IUD IVD IWD PH >>> rnge@SA HD ID PD QD R >>> rnge@PID SA
No ltimo exemplo foi retornado um vetor vazio, isso se deu porque o elemento inicial era maior que o nal. Outra caracterstica importante desse comando a de adicionar uma terceira varivel no dos.

range, indicando o incremento entre os nmeros delimita-

>>>rnge@HDPRDRA HD RD VD IPD ITD PHD PR

14

Exerccios:

IF p um progrm que lei um vetor de S nmeros inteiros e mostreEosF PF p um progrm que lei dois vetores om IH elementos dF qere um tereiro vetor de PH elementosD ujos vlores devero ser ompostos pelos elementos interldos dos dois outros vetoresF QF p um progrm que lei R notsD mostre s nots e mdi n telF RF p um progrm que lei um nmero indetermindo de vloresD orrespondentes notsD enerE rndo entrd de ddos qundo for informdo um vlor igul EI @que no deve ser rmzendoAF eps est entrd de ddosD fX
A wostre quntidde de vlores que form lidosF A ixi todos os vlores n ordem em que form informdosD um o ldo do outroF A glule e mostre mdi dos vloresF dA glule e mostre quntidde de vlores im d mdi luldF eA inerre o progrm om um mensgemF

Dicionrio

Um dicionrio um conjunto de elementos que possuem ndices, ou seja, dicionrios so formados por chaves e seus respectivos valores, onde as chaves so os ndices. Para se declarar um dicionrio e os elementos a ele pertecentes, escrevemos:

>>>lulos a { IX9primeiro periodo9 D PX9segundo periodo9 D RX9tereiro periodo9 D VX9quinto periodo9 } >>>print lulos { IX9primeiro periodo9 D PX9segundo periodo9 D RX9tereiro periodo9 D VX9quinto periodo9 } >>>print lulosQ 9tereiro periodo9
Os valores referentes aos ndices podem ser mudados.

>>>lulosR a 9numeros omplexos9


Abaixo, citaremos alguns mtodos dos dicionrios:

keys()

- Retorna uma lista com as chaves do dicionrio - Retorna uma lista com os valores do dicionrio - Retorna uma lista com as chaves e seus respectivos valores - Verica se o dicionrio possui a chave x

values() items()

has_key(x)

15

Exerccios:

IF p um diionrio que ontenh sus refeies e um limento que estej ontido em d um delsF smprim n telF eps issoD mude os limentos pelos seus limentos fvoritosF PF p um diionrio que ontenh os meses do no e um niversrinte por msF epsD pergunte o usurio um niversrinte por ms e troque os vlores do seu lendrio de niversrio pelos do usurioF

Funes

As linguagens de programao em geral tm o intuito de automatizar aes tornando-as mais rpidas. Se houver alguma ao que seja grande e utilizada com frequncia, temos a opo de criar uma funo que cumpra o seu objetivo, reduzindo o espao ocupado pelo nosso programa nal, alm de deix-lo com uma aparncia mais limpa, visto que o tamanho do cdigo ir diminuir. Essas funes tambm so muito teis na tarefa de debuggar o seu cdigo, visto que voc no precisar vasculhar o cdigo atrs do erro, basta entrar na funo e modic-la. Um exemplo de como podemos diminuir um cdigo est descrito abaixo. Se em um determinado problema, precisarmos descobrir se dois valores absolutos so iguais podemos utilizar o cdigo 1 descrito abaixo todas as vezes que precisarmos realizar essa descoberta, ou podemos simplesmente usar o cdigo 2 criando uma funo que cumpra esse objetivo exigindo apenas que apresentemos os valores que devemos analisar. Dado que temos os valores: a = 23 b = -23 Funo 1:

>>> if ` HX ... >>> if ` HX ... ... ... elseX ... print 9ys vlores solutos de 9D D 9 e 9D D 9 so iguis9 a E print 9ys vlores solutos de 9D D 9 e 9D D 9 so iguis9 >>> if aa X a E

16

Funo 2:

>>>def omprsolutos@DAX ... ... ... ... ... ... ... ... ... ...
Abaixo apresentamos a sintaxe necessria para criao de funes utilizando a linguagem Python.

 iss funo retorn se os vlores solutos ds vriveis requerids so iguis   if ` HX a E if ` HX a E if aa X print 9ys vlores solutos de 9D D 9 e 9D D 9 so iguis9 elseX print 9ys vlores solutos de 9D D 9 e 9D D 9 so iguis9

>>>def funo@vrivelIDvrivelPD...DvrivelxAX ... ... loo de omndos return

que ao chamar uma funo, podemos passar a esta alguns parmetros (valores ou

strings ):

funcao(1234,"pet-tele,"UFF-1234), porm em al-

gumas funes ao colocarmos nosso cdigo na seo bloco de comandos, a funo automaticamente denir os parmetros necessrios. Por exemplo, se houver uma funo que faa clculos matemticos, devolvendo um resultado numrico, ser necessrio que todas as variveis chamadas pela funo sejam inteiros ou

oats.

9.1

Variveis em funes
Em Python, as

Em geral, quando estamos eliminando cdigo repetitivo por meio de funes tambm temos algumas variveis repetidas neste cdigo. variveis podem ter tratamentos diferentes em funo de onde se encontram. Todas as variveis que vimos at agora so chamadas de variveis globais, ou seja, em qualquer momento ou em qualquer parte do cdigo do seu programa, voc poder utiliz-las (seja para ler seu contedo ou atribuir valores). Funes tem um tipo especial de variveis que so chamadas de variveis locais. Estas variveis existem apenas dentro da funo, de forma que caso o programador determine uma funo e armazene um certo dado em uma

17

varivel local, ao trmino desta funo a varivel ser destruda, no sendo possvel recuperar seu valor. Mas como ento, pode-se recuperar um valor de uma funo? Para isto usamos o comando

return seguido de algum valor ou uma varivel. Neste

caso, a varivel local esconder a varivel global, enquanto a funo estiver rodando. Um pouco confuso? Ento conra o exemplo abaixo:

>>> a R >>>def printfun@AX ... ... ...


Agora chame a funo mando

a IU print 9in printfun a 9D

print_func() e pea o valor a utilizando o co-

print, seu resultado deve ser este:

>>>printfun@A in printfun a IU >>>print 9 a 9D aR


Com isto, podemos concluir que variveis criadas dentro de uma funo (variveis locais), no afetam as variveis que esto fora dela (variveis globais). As variveis locais existem apenas dentro do espao limitado pela funo, no podendo assim nem ser usada, nem afetar nada fora deste espao.

9.2

Recursividade

A recursividade um tipo de iterao (repetio) na qual uma funo chama a si mesma repetidamente at que uma condio de sada seja satisfeita. Abaixo temos um exemplo de uma funo responsvel por calcular o fatorial de nmeros positivos inteiros e demonstra como uma funo pode chamar a ela mesma utilizando a propriedade recurssiva.

>>>def ftoril@nAX ... ... ... ... >>>print 9P3 a 9Dftoril@PA P3 a P


18

if n `a IX return I return n B ftoril@n E IA

>>>print 9Q3 a 9Dftoril@QA Q3 E T >>>print 9R3 a 9Dftoril@RA R3 a PRXX >>>print 9S3 a 9Dftoril@SA S3 a IPH
Um passo-a-passo de como a funo executada, utilizando o comando

fatorial(n), para n = 3:

1. Quando chamamos a funo

fatorial(3), fornecemos funo o valor

3 para o parmetro de entrada n. 2. O comando continua. 3. Nesta parte a funo pretende retornar o valor seja,

if testa se n menor ou igual a 1, como este no , a funo

n*fatorial(n-1), ou

3*fatorial(2). Entretanto, ela ainda no possui o valor de fato2*fatorial(1). fatorial(1), a funo chama a si mesma mais

rial(2). Para isso, a funo fatorial novamente chamada com n =


2, retornando o valor

4. Como ainda no temos

uma vez para calcul-lo. 5. Com isto, atingimos a condio de sada do

if que est na funo fa-

torial e ento o valor retornado 1.


Vamos fazer uma retrospectiva do que aconteceu ao se executar esta funo: fatorial(3) 3 * fatorial(2) 3 * 2 * fatorial(1) 3 * 2 * 1 = 6 Exerccios:

IF p um progrmD om um funo que neessite de trs rgumentosD e que forne som desses trs rgumentosF PF p um progrm que ree mtrul do usurio e informe o perodo que ele est e em qunto tempo ele ir se formrF QF p um progrmD om um funo que neessite de um rgumentoF e funo retorn o vlor de rtere 99D se seu rgumento for positivoD e 9x9D se seu rgumento for zero ou negtivoF
19

10

Mdulos

Pensando na reutilizao de cdigo, a linguagem Python j possui um conjunto de funes prontas para serem usadas ou agregadas em seus programas. Essas funes esto agrupadas em estruturas denominadas mdu los. Para a utilizao desses mdulos preciso utilizar o comando

import

nome_do_mdulo.
Aps ter importado o mdulo, qualquer funo pertencente a ele pode ser utilizada atravs do comando

nome_do_mdulo.funo(argumento).

possvel importar do mdulo apenas da funo desejada. Para isso, utilizamos o comando

from nome_do_mdulo import funo, e a funo

estar disponvel para utilizao. Voc tambm pode denir o seu prprio mdulo. Deni-se as funes

desejadas e ao nal, voc salva o seu mdulo com a extenso .py . Exemplo: Digite em um editor de texto simples:

5swgFpy def indie@lturDpesoAX im a pesoG@lturBBPA return im def estdo@imAX if im ` PRFWX print 9xywev9 elif PRFW ` im ` PWFWX print 9iy e wes9 elif PWFW ` im ` RHX print 9vsqise yfishehi9 elif im b RHX print 9yfishehi9 elseX print 9weqy hiwes9 def pesoidel@pesoDlturAX a PHB@lturBBPA a PRFWB@lturBBPA

20

print 9eu peso idel se enontr entre 7f e 7f9 7@DA


Agora, salve o seu arquivo como IMC.py . De agora em diante, o mdulo j pode ser utilizado por qualquer programa em Python. Apresentaremos a seguir 3 mdulos interessantes e de grande uso para a maioria dos usurios de Python:

10.1

Mdulo

Math
cmath.
A distino

O mdulo

math

possui funes matemticas para nmeros no complexos.

Existe um mdulo equivalente para nmeros complexos: a fundo a teoria dos complexos.

destes mdulos deve-se ao fato da maioria dos usurios no querer aprender Este mdulo contm funes de representao numrica, logaritimicas, exponenciais, hiperblicas, trigonomtricas e converses angulares e os valores retornados por este mdulo so pontos utuantes. As constantes tado. Abaixo, esto listadas algumas funes desse mdulo:

pi

tem valores denidos nesse mdulo, podendo ser

usadas diretamente pelo nome, a partir do momento que o mdulo impor-

math.factorial(x) math.modf(x) math.exp(x)

- Retorna o valor de x tutorial. Caso x seja nega-

tivo, retorna um erro. - Retorna o valor inteiro e o valor fracionrio de x.

- Retorna e exponencial de x. - Retorna o log de x na base pedida.

math.log(x,base) math.log1p(x) math.sqrt(x)

- Retorna o log natural de x.

- Retorna a raiz quadrada de x. - Converte o ngulo x de radianos para graus. - Converte o ngulo x de graus para radianos.

math.degrees(x) math.radians(x)

As funes trigonomtricas sin(x), cos(x), tan(x) e suas inversas tambm esto contidas nesse mdulo, alm das funes a seguir:

math.hypot(x,y)

- Retorna a norma euclidiana entre x e y, ou seja, a

hipotenusa do tringulo retngulo de catetos x e y.

21

math.atan2(y,x)

- Retorna o valor da arco tangente de y/x.

Os valores retornados das funes trigonomtricas esto em radiano. Para uma lista completa de funes neste mdulo, basta pedir um help(math). Exerccios:

IF pzer um luldor que exeute operes de dioD sutroD multiplioD divisoD qudrdoD uoD riz qudrdD senoD ossenoD tngenteD ftorilD inverso e mduloF PF p um progrm que o reeer um vlor de rioD retorne re e permetro do ruloF QF p um progrm que ree P vlores de tetos e retorneX
A e hipotenusF A ys vlores dos senos e ossenos dos Q ngulos do tringuloF A odos os vlores devero ser mostrdos em rdino e em grusF

10.2

Mdulo io - Manipulao de arquivos

Em algumas situaes ser necessrio que se armazene dados ou ento que se colete dados de algum arquivo, para isso existe um mdulo em python que comunica com o sistema operacional chamado io (input/output). demonstrado abaixo: Desse mdulo o comando principal o comando open, a sintaxe do programa est

>>>

open('endereo/nome do arquivo.extenso','modo de abertura')

Se estiver utilizando um sistema UNIX e o arquivo estiver na mesma pasta em que foi executado o interpretador no necessrio colocar o endereo do arquivo. E os modos de abertura so mostrados abaixo:

r (read)- Abrir o arquivo somente para leitura; a (append)- Abrir o arquivo somente para escrita, nesse modo o texto
somado ao arquivo;

w (write)- Abrir o arquivo somente para escrita, nesse modo o texto substituido A funo

open possui vrios mtodos os mias importantes sero mostrados

abaixo e depois demonstrados:

close() - fecha o arquivo, se no o arquivo no for fechado, ele ir continuar


como um objeto e no poder ser modicado fora do interpretador;

22

closed - Responde com valores booleanos se a conexo foi fechada ou no.


Para criar um novo arquivo se usa o modo

write

(w). Vamos demonstrar

agora como criar um arquivo com extenso txt, como todos os mtodos desse mdulo utliza a sintaxe mostrada acima, declaramos uma varivel que a recebe a funo

open.

Obs.: Antes de escrever esse comando verique se no

existe um arquivo com o mesmo nome, pois se houver esse comando criar substituir esse arquivo por um novo.

>>> rir a open@testeFtxtDwA >>> rirFlose@A >>> editr a open@testeFtxtDA

Com isso criamos um arquivo, utilizando o modo

w, chamado teste.txt,

atribumos a ele a varivel abrir e o fechamos com o mtodo .close. Depois criamos outra varivel que possui a qualidade de editiar o arquivo sem escrever por cima, ou seja, que utiliza o modo

a. Agora vamos explorar os

mtodos existentes quando utilizamos o modo append. Primeiramente utilizaremos o mtodo .write, que serve para adicionar uma string ao nosso arquivo.

>>>editrFwrite@4rello orld34A >>>editrFlose@A >>>editrFlosed


Obs.: o comando closed conrma se a conexo entre o python e o arao arquivo, podemos conrmar isto abrindo o arquivo e lendo ou

quivo foi interrompida. Com esses comandos foi adicionado a string Hello World! ento podemos usar o modo de leitura  r.

>>>lerFopen@4testeFtxt4D4r4A >>>lerFredline@A >>>lerFolse@A

Novamente, criamos uma varivel, no caso a varivel ler, s que desta vez atribumos a ela o modo de leitura, depois utilizamos o mtodo .readline() que l o arquivo linha a linha. Obs.: Depois de alcanar o nal do texto ele devolve uma string vazia, para voltar a ler o arquivo depois disso necessrio

23

que voc abra outra conexo com o arquivo. Agora que j sabemos criar, editar e ler um arquivo vamos criar uma lista de presena.

>>> 5gomeremos rindo o rquivo >>> rir a open@4presenFtxt4D4w4A >>> rirFlose@A >>> 5egor vmos esrever s funes responsveis pel esrit e leitur d noss list de presen >>> 5grimos um funo pr diionr o nome dos lunos list >>> def diionrluno@AX >>> >>> >>> >>> >>> >>> 4e nome do luno presente deve estr entre prnteses 4 5grimos um vrivel pr editr o rquivo luno a rwinput@4ul o nome do lunoc \n4A esrever a open@4presenFtxt4D44A esreverFwrite@lunoC4\n4A esreverFlose@A

>>> 5hepois rimos um funo pr ler os nomes n list >>> def lunopresente@AX >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> elseX print 4iyD digite s ou n4 4heve ser delrdo um inteiro orrespondente linh em que o luno est 4 5grimos um vrivel de pr ler o rquivo leitur a open@4presenFtxt4D4r4A 5xesse so vmos usr o mtodo redlines@A e triuEl um vrivelD dess form vrE ler a leiturFredlines@A print lerIXS luno a rwinput@4hesej ser todos os presentesc sGn \n4A if luno aa 4s4X for nomes in lerX print nomes elif luno aa 4n4X qulluno a input@4ul o nmero do lunoc \n4A print lerqullunoEI

ivel ser um listD em queD d elemento dest list um linh do rquivo

24

10.3
10.3.1

PySQLite: Manipulao de Bancos de Dados


Introduo

O PySQLite um mdulo de Python que utiliza uma biblioteca em C chamada SQLite capaz de operar um banco de dados usando uma variante da linguagem SQL. Esta biblioteca, ao contrrio dos bancos de dados tradicionais, realiza a manipulao direta do arquivo de banco de dados, no necessitando de um servidor (ou um programa-servidor) que intermedie a manipulao do mesmo. Isto faz com que este mdulo seja o ideal para a manipulao de pequenos banco de dados, ou em aplicaes que necessitem de armazenamento interno de dados. Tambm possivel fazer o prottipo de um aplicativo usando o SQLite e em seguida migrar o cdigo para o uso em um banco de dados de maior capacidade como MySQL, PostgreSQL, Oracle, etc.

10.3.2

Comandos bsicos

O PySQLite provido pelo mdulo antes de ser usado.

sqlite, portanto este deve ser importado

import sqlite
A manipulao do banco de dados feita, no atravs de uma aplicao servidora especca para este m, mas sim manipulando diretamente o arquivo de banco de dados. Para isto, deve ser criado um objeto

connect

que funciona

representando o banco de dados que est sendo manipulado:

onexo = sqliteQFonnet@9 GminhoGprGnodeddosFd 9A


OBS.: Caso se necessite do banco de dados apenas temporariamente, pode-se cri-lo na memria, de forma que este ser descartado aps o encerramento do programa.

onexo = sqliteQFonnet@9XmemoryX9A

Em seguida, deve-se criar um objeto cursor, que ser a varivel que nos permitir efetuar operaes sobre a base de dados. Isto pode ser feito chamando-se o mtodo

cursor().

ur = onexoFursor@9XmemoryX9A
Usando o cursor podemos inserir instrues em SQL para a manipulao do banco de dados, criando novas tabelas, localizando, inserindo, removendo e modicando entradas, como seria feito em um banco de dados tradicional.

25

As instrues em SQL devem ser fornecidas como um parmetro ao mtodo

execute() que deve ser aplicado variavel cursor.


algumas aes:

Abaixo temos exemplos de

Criando uma nova tabela no banco de dados:

def ritel@AX FFF sql a giei efvi onttos@id sxiqiD nome egreD fone egreA FFF urFexeute@sqlA
Inserindo um item no banco de dados:

def insereddos@AX FFF insnome = rwinput@9higite o nome do onttoX9A FFF insidde = rwinput@9higite idde do onttoX9A FFF urFexeute@9sxi sxy onttos evi @cDcDcA9D@indD insnomeD insiddeAA FFF onnetionFommit@A
Removendo um item no banco de dados:

def removerddos@AX FFF idrem = rwinput@9higite o indieX9A FFF urFexeute@9hivii pyw onttos rii idac9D@idremAA FFF onnetionFommit@A
Imprimindo os itens de um banco de dados:

def reuperddos@AX FFF sql = ivig B pyw onttos urFexeute @sqlA FFF result = urFfethll@A FFF FFF for ontto in resultX FFF print II FFF print dX c xomeX c sddeX c E c@onttoHDonttoIDonttoPA
Aps efetuar-se cada operao deve-se utilizar o mtodo as alteraes sejam gravadas no banco de dados. Exerccio:

commit()

para que

hesenvolv um progrm que funione omo um list telefniF e tel do no de ddos

dever onter um nmero ndie @inteiroAD um nome @stringA e um telefone @stringAF iste progrm dever ter hilidde de inserirD remover e exiir s entrds registrdsF

11

Expresses booleanas
A lgebra

Ao leitor que no estiver acostumado com o ttulo acima, Expresses Booleanas so sentenas lgicas que seguem as leis da lgebra de Boole. Booleana trabalha com valores lgicos, interpretando esses valores atravs de nmeros binrios, ao oposto do decimal, utilizando o valor 0 para denir uma operao FALSA e o valor 1 para denir uma operao VERDADEIRA. As operaes entre valores lgicos so feitas de forma anloga s operaes feitas entre conjuntos de elementos, sendo que cada um desses elementos tratado como uma situao, podendo ser verdadeiros ou falsos. Em Python os seguintes valores so interpretados como falso:

26

False None 0 () []

Ou seja, os valores

False e None, o valor numrico 0 e as sequncias

vazias so denominadas falsas enquantos todos os outros valores possveis so interpretados como verdadeiro. Como na maioria das linguagens de programao, temos a possibilidade de utilizar a lgebra Booleana para realizar testes lgicos usados em estruturas de controle. Com esses testes podemos conferir a veracidade de operaes, alm de podermos montar funes condicionais e grama. Observemos o exemplo abaixo:

if, laos de repetio while

for, entre outros, que podem ser inseridos em qualquer lugar de seu pro-

>>> a T >>> a U >>> a RP >>> print ID aa T >>> print PD aa U >>> print QD aa T nd aa U >>> print RD aa U nd aa U >>> print SD not aa U nd aa U >>> print TD aa U or aa U >>> print UD aa U or aa T >>> print VD not @ aa U nd aa TA >>> print WD not aa U nd aa T
Teramos como sada o seguinte resultado:

I rue P plse Q rue R plse S rue T rue U plse V rue W plse


Para entender a lgica do que foi feito acima, devemos relembrar alguns conceitos de lgebra Booleana. Abaixo temos uma breve descrio sobre os

27

operadores lgicos:

Operador 

and :

(em portugs e) signica que ambas as armaes

devem ser verdadeiras, caso contrrio a expresso falsa. Operador 

or :

(em portugus ou) signica que se ao menos uma das

armaes for verdadeira, ento toda a expresso tambm o ser. Operador 

not :

(em portugus no) signica uma inverso lgica em

uma expresso, o que era verdadeiro, se torna falso, e viceversa. As tabelas abaixo podem ajudar a claricar alguns desses conceitos: expression true and true true and false false and true false and false not true not false true or true true or false false or true false or false result true false false false false true true true true false

O programa abaixo mostra um exemplo de aplicao de Expresses Booleanas. Vamos dizer que precisamos de um programa que indique a situao de um aluno ao nal do ano, sendo que elas so assim:

Se o aluno obtiver nota maior ou igual e seis e no tiver mais de 10 faltas, ele passa direto; Se o aluno obtiver nota maior ou igual e seis e tiver mais de 10 faltas, ele ca de recuperao por falta; Se o aluno obtiver nota maior que quatro e menor que seis e no tiver mais de 10 faltas, ele ca de recuperao por nota; Se o aluno obtiver nota menor que quatro, ele repete direto;

28

Se o aluno obtiver nota maior que quatro e menor que seis e tiver mais de 10 faltas, ele repete por no obter nota e por excesso de faltas;

Para montar esse programa utilizamos as Expresses Booleanas, j que precisamos fazer a vericao de duas situaes, temos que vericar se o aluno tem nota e se ele tem presena.

>>> lunos a 9pred9D9uzn9D9gludio9D9ug9D9oson9D9qustvo9 >>> not a SFRD TFPD PFWD WFWD UFVD RFW >>> flts a WD SD ISD PD IID IP >>> ontdor a H >>> for luno in lunosX ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... \n ontdorCaI if notontdor ba TFH nd fltsontdor `a IHX print 9elunoX 9Dluno print 9xot (nlX 9Dnotontdor print 9pltsX 9Dfltsontdor print 9esltdoX ssou de no9 elif notontdor ba TFH nd fltsontdor b IHX print 9elunoX 9Dluno print 9xot (nlX 9Dnotontdor print 9pltsX 9Dfltsontdor print 9esltdoX eupero por flt9 elif notontdor ba RFH nd notontdor ` TFH nd fltsontdor `a IHX print 9elunoX 9Dluno print 9xot (nlX 9Dnotontdor print 9pltsX 9Dfltsontdor print 9esultdoX eupero por not9 elif notontdor ba RFH nd notontdor ` TFH nd fltsontdor b IHX print 9elunoX 9Dluno print 9xot (nlX 9Dnotontdor print 9pltsX 9Dfltsontdor print 9esultdoX epetiu direto por no oter not e por exesso de flts9 elif notontdor ` RFHX print 9elunoX 9Dluno print 9xot (nlX 9Dnotontdor print 9pltsX 9Dfltsontdor print 9esultdoX epetiu direto por not9

29

Apndice A - Mdulos
Existem outros mdulos que podem ser anexados sua biblioteca. Caso queira saber quais funes cada mdulo desse possui, basta digitar o comando abc aepack (Mac) aetools (Mac) aetypes (Mac) aifc al (IRIX) AL (IRIX) anydbm applesingle (Mac) array ast asynchat asyncore atexit audioop autoGIL (Mac) base64 BaseHTTPServer Bastion bdb binascii binhex bisect bsddb buildtools (Mac) bz2 calendar Carbon cd (IRIX) cfmle (Mac) cgi CGIHTTPServer cgitb chunk cmath cmd

help(nome_do_modulo).

30

code codecs codeop collections ColorPicker (Mac) colorsys commands (Unix) compileall compiler CongParser contextlib Cookie cookielib copy copy_reg cPickle cProle crypt (Unix) cStringIO csv ctypes curses datetime dbhash dbm (Unix) decimal DEVICE (IRIX) diib dircache dis distutils dl (Unix) doctest DocXMLRPCServer dumbdbm dummy_thread dummy_threading EasyDialogs (Mac) email encodings errno

31

exceptions fcntl (Unix) lecmp leinput ndertools (Mac) FL (IRIX)  (IRIX) p (IRIX) fm (IRIX) fnmatch formatter fpectl (Unix) fpformat fractions FrameWork (Mac) ftplib functools future_builtins gc gdbm (Unix) gensuitemodule (Mac) getopt getpass gettext gl (IRIX) GL (IRIX) glob grp (Unix) gzip hashlib heapq hmac - hotshot htmlentitydefs htmllib HTMLParser httplib ic (Mac) icopen (Mac) imageop imaplib

32

imgle imghdr imp imputil inspect io itertools jpeg (IRIX) json keyword lib2to3 linecache locale - logging macerrors (Mac) MacOS (Mac) macostools (Mac) macpath macresource (Mac) mailbox mailcap marshal math md5 mhlib mimetools mimetypes MimeWriter mimify MiniAEFrame (Mac) mmap modulender msilib (Windows) msvcrt (Windows) multile multiprocessing mutex Nav (Mac) netrc new nis (Unix)

33

nntplib numbers operator optparse os ossaudiodev (Linux, FreeBSD) parser pdb pickle pickletools pipes (Unix) PixMapWrapper (Mac) pkgutil platform plistlib popen2 poplib posix (Unix) posixle (Unix) pprint pstats pty (IRIX, Linux) pwd (Unix) py_compile pyclbr pydoc Queue quopri random re readline repr resource (Unix) rexec rfc822 rlcompleter robotparser runpy sched ScrolledText (Tk) select

34

sets sgmllib sha shelve shlex shutil signal SimpleHTTPServer SimpleXMLRPCServer site smtpd smtplib sndhdr socket SocketServer spwd (Unix) sqlite3 ssl stat statvfs string StringIO stringprep struct subprocess sunau sunaudiodev (SunOS) SUNAUDIODEV (SunOS) symbol symtable sys syslog (Unix) tabnanny tarle telnetlib temple termios (Unix) test textwrap thread threading

35

time timeit Tix Tkinter token tokenize trace traceback tty (Unix) turtle types unicodedata unittest urllib urllib2 urlparse user UserDict UserList UserString uu uuid videoreader (Mac) W (Mac) warnings wave weakref webbrowser whichdb winsound (Windows) wsgiref xdrlib xml xmlrpclib ziple zipimport zlib

36

Referncias
[1] Labaki , Josu ,

Introduo ao Python - Mdulo A,


, 2009.

Grupo Python,

UNESP-Ilha Solteira. [2]

The Python Tutorial 2.6, http://python.org/


Apress, 2005.

[3] Hetland , Magnus Lie,

Beginning Python: from novice to professional,

[4] http://www.python.org.br/wiki/ListaDeExercicios

37

You might also like