Você está na página 1de 71

Laboratrio de Linguagem de Programao PYTHON

Professor: Fbio Junior Alves

1. Introduo
Esta apostila foi criada para dar apoio aos alunos da disciplina Laboratrio de Linguagem de Programao do curso de Sistemas de Informao. Estarei adotando como linguagem de programao o Python. Esta apostila no um guia aprofundado e sim um manual de referncia. A documentao disponvel em http://www.python.org/doc/ excelente, e existem vrios livros publicados sobre Python que podem ser utilizados como consulta.

2. A Linguagem Python
De acordo com seu criador, Guido van Rossum: Python uma linguagem de programao poderosa e fcil de aprender. Ela possui estruturas de dados de alto nvel e uma simples, mas eficiente abordagem da programao orientada a objetos. Sua elegante sintaxe e tipagem dinmica juntamente com seu interpretador nativo fazem dela a linguagem ideal para scripting e desenvolvimento rpido de aplicaes em diversas reas sob vrias plataformas.

2.1.

Linguagem Interpretada

Linguagens

de

programao

so

freqentemente

classificadas

como

compiladas ou interpretadas. Nas compiladas, o texto (ou cdigo-fonte) do programa lido por um programa chamado compilador, que cria um arquivo binrio, executvel diretamente pelo hardware da plataforma-alvo. Ou seja, O compilador l o programa e o traduz completamente antes que o programa comece a rodar. Neste caso, o programa escrito em linguagem de alto nvel chamado de cdigo fonte, e o programa traduzido chamado de cdigo objeto ou executvel. Uma vez que um programa compilado, voc pode execut-lo repetidamente, sem que precise de nova traduo. Exemplos deste tipo de linguagem so C ou Fortran.

Em contrapartida, programas escritos em linguagens interpretadas no so convertidos em um arquivo executvel. Eles so executados utilizando outro programa, o interpretador, que l o cdigo-fonte e o interpreta diretamente, durante a sua execuo. Ou seja, o interpretador l um programa escrito em linguagem de alto nvel e o executa. Ele processa o programa um pouco de cada vez, alternadamente: ora lendo algumas linhas, ora realizando computaes. Exemplos de linguagem interpretada incluem o BASIC tradicional, Perl e Python.

2.2.

Tipagem Dinmica

Um dos conceitos bsicos em programao a varivel, que uma associao entre um nome e um valor. Ou seja, abaixo, neste fragmento na linguagem C: int a; a = 1; temos uma varivel com o nome a sendo declarada, com tipo inteiro e contendo o valor 1. Em Python, no precisamos declarar variveis, nem seus tipos: >>> a = 1 seria a instruo equivalente; define uma varivel com o valor 1, que um valor inteiro. Python possui o que conhecido como tipagem dinmica: o tipo ao qual a varivel est associada pode variar durante a execuo do programa. No quer dizer que no exista tipo especfico definido (a chamada tipagem fraca): embora em Python no o declaremos explicitamente, as variveis sempre assumem um nico tipo em um determinado momento. >>> a = 1 >>> type(a) <type 'int'> >>> a = "1" >>> type(a) <type 'str'> >>> a = 1.0 >>> type(a) <type 'float'> # a funo type() retorna o tipo # associado a uma varivel

Tipagem dinmica, alm de reduzir a quantidade de planejamento prvio e digitao para escrever um programa, um mecanismo importante para garantir a simplicidade e flexibilidade das funes Python. Como os tipos dos argumentos no

so explicitamente declarados, no h restrio sobre o que pode ser fornecido como parmetro. No exemplo acima, so fornecidos argumentos de tipos diferentes mesma funo type, que retorna o tipo deste argumento.

2.3.

Controle de Bloco por Indentao

Na maior parte das linguagens, h instrues ou smbolos especficos que delimitam blocos de cdigo - os blocos que compem o contedo de um lao ou expresso condicional, por exemplo. Em C: if (a < 0) { /* bloco de cdigo */ } ou em Fortran: C if (a .lt. 0) then bloco de cdigo Endif

os blocos so delimitados explicitamente em C por chaves, e em Fortran pelo par then e endif. Em Python, blocos de cdigo so demarcados apenas por espaos formando uma indentao visual: print "O valor de a " if a == 0: print "zero" else: print a Esta propriedade faz com que o cdigo seja muito claro e legvel afinal, garante que a indentao esteja sempre correta, porm requer costume e um controle mais formal.

2.4.

Tipos de Alto Nvel


Alm dos tipos bsicos (inteiros, nmeros de ponto flutuante, booleanos),

alguns tipos pr-determinados em Python merecem ateno especial: Listas: como um vetor em outras linguagens, a lista um conjunto (ou seqncia) de valores acessados (indexados) por um ndice numrico, inteiro, comeando em zero. A lista em Python pode armazenar valores de qualquer tipo. >>> a = ["A", "B", "C", 0, 1, 2] >>> print a[0] A >>> print a[5] 2

Tuplas: tuplas so tambm seqncias de elementos arbitrrios; se comportam como listas com a exceo de que so imutveis: uma vez criadas no podem ser alteradas. Strings: a cadeia de caracteres, uma forma de dado muito comum; a string Python uma Dicionrios: dicionrios so seqncias que podem utilizar ndices de tipos variados, bastando que estes ndices sejam imutveis (nmeros, tuplas e strings, por exemplo). Dicionrios so conhecidos em outras linguagens como arrays associativos ou hashes. >>> autor = {"nome" : "Christian", "idade": 28} >>> print autor["nome"] Christian >>> print autor["idade"] 28 Arquivo: Python possui um tipo pr-definido para manipular arquivos; este tipo permite que seu contedo seja facilmente lido, alterado e escrito. Classes e Instncias: classes so estruturas especiais que servem para apoiar programao orientada a objetos; determinam um tipo customizado com dados e operaes particulares. Instncias so as expresses concretas destas classes. Orientao a objetos em Python descrita em maiores detalhes na seo. seqncia imutvel, alocada dinamicamente, sem restrio de tamanho.

2.5.

Orientao a Objetos

Orientao a objetos (OO) uma forma conceitual de estruturar um programa: ao invs de definirmos variveis e criarmos funes que as manipulam, definimos objetos que possuem dados prprios e aes associadas. O programa orientado a objetos resultado da colaborao entre estes objetos. Em Python, todos os dados podem ser considerados objetos: qualquer varivel mesmo as dos tipos bsicos e pr-definidos possui um valor e um conjunto de operaes que pode ser realizado sobre este. Por exemplo, toda string em Python possui uma operao (ou mtodo) chamada upper, que gera uma string nova com seu contedo em maisculas: >>> a = "Hello" >>> a.upper()

'HELLO' Como a maior parte das linguagens que so consideradas orientadas a objeto, Python oferece um tipo especial para definir objetos customizados: a classe. Python suporta tambm funcionalidades comuns na orientao a objetos: herana, herana mltipla, polimorfismo, reflexo e introspeco.

2.6.

Caractersticas
Simplicidade: Python uma linguagem muito simples. Ler o cdigo de um programa em Python semelhante a ler um texto em ingls, embora um ingls bem limitado. Este pseudo-cdigo do Python uma das suas grandes vantagens. Ele permite ao programador concentrar-se na soluo do problema em vez de concentrar-se na linguagem propriamente dita.

Facilidade de aprender: Como voc ver aprender a programar com Python extremamente fcil. Como j mencionado, sua sintaxe muito simples. Software livre: Python software livre. Isto significa que voc pode distribuir cpias, ter acesso ao cdigo fonte, alterar, modificar, redistribuir e utilizar pedaos dele em outros programas. O software livre baseado no conceito de uma comunidade que compartilha conhecimento. Esta uma das razes porque o Python to bom. Ele foi criado e est em constante aperfeioamento por uma comunidade que s quer v-lo crescer.

Linguagem de alto nvel: Quando escreve programas com Python, voc no precisa se preocupar com detalhes de baixo nvel como gerenciamento de memria, etc.

Portabilidade: Python portvel para diversas arquiteturas, isto significa que seu programa escrito para Linux pode facilmente rodar em Linux, Windows, FreeBSD, Macintosh, Solaris, OS/2, Amiga, AROS, AS/400, BeOS, OS/390, z/OS, Palm OS, QNX, VMS, Psion, Acorn RISC OS, VxWorks, PlayStation, Sharp Zaurus, Windows CE e at mesmo PocketPC.

Linguagem interpretada: Um programa escrito numa linguagem que exige compilao como C ou C++ necessita ser convertido da linguagem fonte (C ou C++) para uma linguagem que o computador entenda (cdigo binrio; zeros e uns). Isto feito usando uma ferramenta chamada compilador. Python por sua vez, no precisa disto. Ele uma linguagem interpretada, assim o cdigo de um programa Python lido e executado pelo interpretador Python sem necessitar de compilao. Alm de ser mais rpido, isto torna seus cdigos portveis. Assim basta copiar seu cdigo para outra arquitetura e execut-lo, praticamente sem modificao nenhuma.

Orientao a objetos: Python suporta tanto a programao orientada a funo quanto a programao orientada a objetos. Em linguagens de programao orientadas a funo o programa construdo em torno de funes que nada mais so que pedaos de cdigo reutilizvel. Em linguagens de programao orientadas a objetos o programa construdo em torno de objetos os quais combinam dados e funcionalidade. Python tem uma maneira poderosa porm simples de implementar a orientao a objetos, especialmente quando comparada a grandes linguagens como C++ ou Java.

Extensvel: Se voc precisa que um pedao do seu cdigo rode bem mais rpido ou no quer que determinada parte do seu algoritmo seja cdigo livre, voc pode codificar esta parte em C ou C++ e us-la em seu programa Python.

Pode ser embutido: Voc pode embutir Python em seus programas C/C++ para oferecer caractersticas de scripting aos usurios de seu programa.

Muitas bibliotecas: A biblioteca padro do Python enorme. Elas podem ajud-lo a fazer vrias coisas como trabalhar com expresses regulares, banco de dados, navegadores, CGI, ftp, email, XML, XML-RPC, HTML, arquivos WAV, criptografia, GUI (interfaces grficas), Tk, gerar documentao, threading, etc. Alm da biblioteca padro existem outras bibliotecas de alto nvel como wxPython, Twisted, Python Imaging Library e muitas outras.

3. Python Bsico: Invocao, Tipos, Operadores e Estruturas


Esta primeira seo aborda os aspectos essenciais da linguagem. Por falta de um lugar melhor, ser introduzido aqui o smbolo para comentrios em Python: quando aparece o carter sustenido (#) no cdigo-fonte, o restante da linha ignorado. Existem duas maneiras de utilizar o Python: usar o modo interativo digitando comandos diretamente no interpretador ou escrever os comandos num arquivo fonte e depois executar este arquivo.

3.1.

Usando o Interpretador

Usando o modo interativo, basta execut-lo.

O interpretador est pronto para receber comandos. O sinal >>> o prompt primrio. Agora digite o comando print ' Al Mundo!' e pressione ENTER:

O comando print exibe uma string na tela.

3.2.

Usando um Arquivo
Com seu editor de textos favorito digite o cdigo abaixo:

Salve o arquivo como alo.py e clique na opo File->Opene procure pelo arquivo alo.pv e clique no F5. Pronto. Voc criou seu primeiro programa Python.

3.3.

Ajuda do Python
Se voc quiser usar a ajuda do Python basta digitar help() no interpretador.

Porm ela toda em ingls.

3.4.

Comandos de Entrada e Sada de Dados


Print: comando utilizado para escrever coisas na tela. Este comando

simples de usar, basta escrever a frase entre aspas: print "Bom Dia!"

Raw_input: comando que l texto digitado no teclado. Este texto precisa ser guardado em algum lugar, para armazen-lo podemos usar uma varivel, que um pequeno espao de memria reservado e que pode ser usado mais tarde.

Enquanto o comando raw_input pode ser qualquer tipo de dados (letras, nmeros, binrios), o comando input, serve apenas para armazenar nmeros.

10

3.5.

Tipos, Variveis e Valores


Ao escrever programas para resolver problemas voc ter que armazenar e

manipular dados. Estes dados so armazenados utilizando as variveis. Como o prprio nome diz variveis, podem ter seu contedo alterado. Voc pode armazenar qualquer coisa usando variveis. Elas so apenas uma parte da memria do seu computador onde voc armazena informaes temporariamente. Os nomes das variveis comeam sempre com uma letra, no contm espaos, e assim como tudo em Python, so sensveis a caixa (case-sensitive) em outras palavras, minsculas e maisculas fazem, sim, diferena. Como explicado anteriormente, a varivel no precisa ser pr-declarada e seu tipo determinado dinamicamente. Para nome-las voc deve observar as seguintes regras: O primeiro caracter deve ser uma letra (maiscula ou minscula) ou o caracter de sublinhado ( _ ); O resto do nome pode conter letras (maisculas ou minsculas), sublinhado ( _ ) ou dgitos (0-9);

11

Os nomes so sensveis a caixa, ou seja variavel e Variavel no so a mesma coisa. Observe o primeiro v, no primeiro nome minsculo e no segundo maisculo.

Exemplos de nomes de variveis corretos so: nome, _idade, nome23, d3b1; Exemplos de nomes de variveis invlidos so: 2things, media aritmetica.

3.5.1.

Tipos Numricos

Tipos numricos representam valores numricos. Em Python h alguns tipos numricos pr-definidos: inteiros (int), nmeros de ponto flutuante (float), booleanos (bool) e complexos (complex). Estes tipos suportam as operaes matemticas comuns como adio, subtrao, multiplicao e diviso, e podem ser convertidos entre si. A seguir alguns exemplos de criao de variveis numricas: >>> a = 1 >>> preco = 10.99 >>> t = True >>> i = 4+3j # valor inteiro # valor ponto flutuante, ou float. # valor booleano # valor complexo

Valores inteiros podem tambm ser fornecidos em base octal e hexadecimal:

Para ser considerado um float, o nmero deve possuir um ponto e uma casa decimal, mesmo que seja zero. O fato de ser considerado um float importante para a operao diviso, pois dependendo do tipo dos operandos, a diviso inteira ou em ponto flutuante.

12

3.5.2.

Determinando o Tipo de uma Varivel

Para descobrir o tipo atual de uma varivel, pode-se usar a funo type():

3.5.3.

Strings

A string, como citado anteriormente, uma seqncia imutvel com um propsito especial: armazenar cadeias de caracteres.

Strings podem ser delimitadas tanto com aspas simples quanto duplas; se delimitamos com aspas duplas, podemos usar as aspas simples como parte literal da string, e vice-versa. Para inserir na string aspas literais do mesmo tipo que o

13

delimitador escolhido, prefixe-as com uma contra-barra \. As atribuies abaixo so equivalentes:

So usados caracteres especiais para denotar quebra de linha (\n), tabulao (\t) e outros.

Para criar uma string com mltiplas linhas, til o delimitador aspas triplas: as linhas podem ser quebradas diretamente, e a string pode ser finalizada com outras trs aspas consecutivas:

Finalmente, como toda seqncia, a string pode ser indexada ou dividida em slices, usando o operador colchetes:

14

3.6.

Operadores
O prximo tpico essencial da linguagem so operadores, smbolos que

operam sobre variveis e valores.

3.6.1.

Operadores Aritmticos

A maior parte dos operadores aritmticos em Python funciona de maneira intuitiva e anloga aos operadores em outras linguagens. Demonstrando por exemplo: >>> print a + 3 10 >>> print a - 2 5 >>> print a / 2 3 # adio # subtrao # diviso inteira: argumentos inteiros # e resultado inteiro

>>> print a / 2.5 # diviso em ponto flutuante: pelo 2.8 # menos um argumento deve ser float >>> print a % 4 3 >>> print a * 2 14 >>> print a ** 2 49 # resto da diviso inteira # multiplicao # exponenciao

Os operadores de adio (+) e multiplicao (*), podem ser utilizados em strings:

>>> a = "exato" >>> print a * 2

15

exatoexato >>> print "quase " + a quase exato 3.6.2. Operadores de Atribuio

O operador mais simples, e que j fui utilizado em diversos exemplos anteriores, o operador de atribuio. Este operador representado por um nico smbolo de igualdade, =, definindo uma varivel e automaticamente atribuindo a ela um valor. O exemplo abaixo define uma varivel a, com valor inteiro 1. >>> a = 1

3.6.3.

Operadores Condicionais

Tradicionalmente, programao envolve testar valores (e tomar decises com base no resultado do teste). Um teste essencialmente uma expresso condicional que tem um resultado verdadeiro ou falso. Esta seo descreve os operadores condicionais mais comuns em Python.

3.6.3.1.

Igualdade
# igualdade # diferente de

>>> print 2 == 4 False >>> print 2 != 4 True >>> print "a" == "a" True >>> print "a" != "b" True

3.6.3.2.

Comparao
# menor que # maior que # maior ou igual que

>>> print 1 < 2 True >>> print 3 > 5 False >>> print 3 >= 4 False

3.6.4.

Operadores Lgicos

16

Os operadores lgicos not, and e or permitem modificar e agrupar o resultado de testes condicionais: >>> nome = "pedro" >>> idade = 24 >>> nome == "pedro" and idade == 25 False >>> nome == "pedro" and idade < 25 True >>> len(nome) < 10 or not nome == "pedro" False

3.7.

Exerccios

1-Indique o resultado das expresses a seguir: a) (2 + 3) - (5 * 8)/4) = -5 b) ((7**2) * (4 / 2 )) = 98 c) 25 % 5 = 0 d) (81**0.5) = 9 e) 10 > 11 and 11 < 12 = falso f) (10 * 9) == (20 + 50 * 1 + 20) = verdadeiro g) (7 == (2*3.5)and(False or True)) = verdadeiro h) (7 > 2 or (7 == (2**2))) = verdadeiro g) (7 == (2*3.5)and(False or True)) = verdadeiro h) (17/2)%2 = 0 i) not(8<16)or(not(18<6))=falso j) (3<5) or(3>10)and(3%2 == 0)=verdadeiro k) (14!=3)and(3!=2)or(14==0)=verdadeiro 2-Faa um Programa que mostre a mensagem "Alo mundo" na tela. print 'Alo mundo' 3- Faa um Programa que pea um nmero e ento mostre a mensagem O nmero informado foi [nmero]. valor = input("Digite um valor") print 'O numero informado foi', valor 4- Faa um Programa que pea dois nmeros e imprima a soma. num1 = input('Digite um valor') num2 = input('Digite outro valor') soma = num1+num2 print 'A soma:', soma

17

5- Faa um Programa que pea as 4 notas bimestrais e mostre a mdia. num1 = input('Informe a primeira nota') num2 = input('Informe a segunda nota') num3 = input('Informe a terceira nota') num4 = input('Informe a quarta nota') soma = num1+num2+num3+num4/4 media = soma/4 print 'Media:', media 6-Ler dois inteiros A e B e fazer um algoritmo para trocar os valores destas variveis. num1 = input('Informe um numero') num2 = input('Informe um outro numero') troca = num1 num1 = num2 num2 = troca print num1,num2 7- Calcular e apresentar o valor do volume de uma lata de leo, utilizando a frmula: VOLUME = 3.14159 * RAIO / 2 * ALTURA. altura = input('Digite a altura:') raio = input('Digite o raio:') volume = 3.14*(raio/2*altura) print volume 8- Efetuar o clculo e a apresentao do valor de uma prestao em atraso, utilizando a frmula PRESTAO: VALOR + (VALOR * (TAXA / 100) * TEMPO). taxa = input('Digite a taxa:') valor = input('Digite o valor:') tempo = input('digite o tempo:') prestacao = valor+(valor*(taxa/100)*tempo) print prestacao 9-Faa um algoritmo que l o valor do raio e calcule a rea do crculo Correspondente: Etapa 1: o clculo da rea do crculo Pi*R2. Etapa 2: o dado necessrio o valor do raio, que ser lido (colocado) na varivel Raio. raio = input('Digite o raio:') area = 3.14*(raio**2) print 'A area do circulo com o raio:',area 10- Construa um algoritmo para ler os coeficientes do polinmio de grau 4

18

P( x) = Ax 4 + Bx 3 + Cx 2 _ Dx + E
Depois ler o valor de x, e calcular e imprimir o valor de P(x). num1 = input('Digite um numero:') num2 = input('Digite um numero:') num3 = input('Digite um numero:') num4 = input('Digite um numero:') num5 = input('Digite um numero:') x = input('Digite um valor para x:') p = (num1*(x**4)+num2*(x**3)+num3*(x**2)+num4*(x)+num5) print 'O valor de P(X):',p 11- Ler uma temperatura em graus Celsius e apresent-la convertida em graus Fahrenheit. A formula de converso F = (9 * C + 160) / 5, sendo F a temperatura em Fahrenheit e a C temperatura em Celsius. c = input('Digite a temperatura em graus Celsius:') f = (9*c+160)/5 print 'A temperatura em Fahrenheit:',f 12-Fazer um programa que efetue a apresentao do valor da converso em real de um valor lido em dlar. O programa vai ler o valor da cotao do dlar e a quantidade de dlares com o usurio, para apresentar o valor em moeda brasileira. cotacao = input('Digite a cotacao:') dolar = input('Digite quantos dolar:') vreal = dolar*cotacao print vreal 13-Faa um algoritmo para exibir a multiplicao de dois nmeros inteiros informados pelo usurio. num1 = input('Digite um numero:') num2 = input('Digite outro numero:') mult = num1*num2 print mult 14-Faa um algoritmo para ler um nmero e exibir seu dobro. num1 = input('Digite um numero:') dobro = num1*2 print dobro 15-Faa um algoritmo para ler 3 nmeros e exibir a soma do 1 nmero com o 2, multiplicado pela soma do 2 pelo 3. num1 = input('Digite um numero:')

19

num2 = input('Digite um numero:') num3 = input('Digite um numero:') soma = num1+num2 soma2 = num2+num3 mult = soma * soma2 print mult 16-Ler dois nmeros inteiros e exibir o resto da diviso do primeiro pelo segundo. num1 = input('Digite um numero:') num2 = input('Digite um numero:') resto = num1 % num2 print resto 17-ler o salrio de um funcionrio e imprimi-lo com um aumento de 15%. salario = input('Digite seu salario:') aumento = (((15*salario)/100)+ salario) print aumento 18-Mostre o que ser impresso pelo seguinte algoritmo? val1= 40 val2= 60 val3= val2 - val1 val3= val1 - val2 print val3 Resposta: -20 19-Mostre o que ser impresso pelo seguinte algoritmo? b= 28 a=(b * 2) c= a - b print a print c print "c" Resposta: 56,28,c 20- Mostre o que ser impresso pelo seguinte algoritmo? a = 10 b=8 c=4 a=a+c

20

b=c+a b=a c=a+b print a print b print c

Resposta: 14,14,28

3.8.

Estruturas de Deciso
Essa estrutura tambm conhecida por estrutura condicional. A instruo if

tem por finalidade tomar uma deciso e efetuar um desvio no processamento, dependendo, claro, de a condio atribuda ser verdadeira ou falsa. Sendo a condio verdadeira, ser executada a instruo que estiver escrita aps a instruo if. Se a instruo for falsa, sero executadas as instrues que estejam aps as instrues consideradas verdadeiras. Portugol Sintaxe: Se <condio> # bloco de cdigo Ento <comando-1> # outro bloco Seno <comando-2> # bloco final Exemplo 1 var X,A,B : inteiro Inicio escreva("Informe um valor para a variavel A: ") leia(A) escreva("Informe um valor para a variavel B: ") leia(B) Se (A > B) entao X <- A Sintaxe: if <condio> : # bloco de cdigo elif <condio> # outro bloco else: # bloco final Exemplo 1 A = input("Informe um valor para a variavel A: ") B = input("Informe um valor para a variavel B: ") if A > B: X=A A=B B=X print "Os valores ordenados so:",A," e", B Python

21

A <- B B <- X fimse escreva("Os valores ordenados so:",A, " e", B) fimalgoritmo Exemplo 2 var N1, N2, N3, N4, Media: real Inicio Escreva ("Digite a primeira nota:") Leia(N1) Escreva ("Digite a segunda nota:") Leia(N2) Escreva ("Digite a terceira nota:") Leia(N3) Escreva ("Digite a quarta nota:") Leia(N4) Media <- (N1 + N2 + N3 + N4) / 4; Se (Media >= 7)entao escreva ("Aprovado") senao escreva ("Reprovado") Fimse Fimalgoritmo

Exemplo 2 n1 = input("Digite a primeira nota:") n2 = input("Digite a segunda nota:") n3 = input("Digite a terceira nota:") n4 = input("Digite a quarta nota:") Media = (n1 + n2 + n3 + n4) / 4 if Media >= 7: print "Aprovado" else: print "Reprovado"

3.9.

Exerccios

3.9.1. Parte 1
1Faa um algoritmo em Python que leia 2 nmeros e escreva o maior. num1 = input('Digite o primeiro numero:') num2 = input('Digite segundo numero:') if num1 > num2: print num1 else: print num2 2Faa um algoritmo que leia 3 nmeros inteiros e imprima os em ordem crescente.

22

a = input ('Digite o primeiro numero:') b = input ('Digite o segundo numero:') c = input ( 'Digite o terceiro numero:') if a > b: troca=a a=b b=troca if b > c: troca=b b=c c=troca if a > b: troca=a a=b b=troca print a,b,c 3Faa um algoritmo em Python que leia um numero inteiro e diga se este nmero Par ou mpar. num = input('Digite um numero:') resto = num % 2 if resto == 0: print'Par' else: print'mpar' 4Desenvolva um algoritmo em Python que pea ao usurio a quantia em dinheiro que tem sobrando e sugira, caso ele tenha 10 ou mais reais, que v ao cinema, e se no tiver, fique em casa vendo TV. dinheiro = input('Quanto dinheiro voc tem sobrando:') if dinheiro >= 10: print'V ao cinema hoje noite.' else: print'Fique em casa vendo TV.' 5Ler o nome e o sexo de uma pessoa e apresentar como sada uma das seguintes mensagens: IImo. Sr., caso seja informado o sexo como masculino, ou IIma. Sra., caso seja informado o sexo como feminino. Apresentar tambm junto com cada mensagem de saudao o nome previamente informado. nome = raw_input('Digite seu nome:')

23

sexo = raw_input('Digite seu sexo:') if sexo == "masculino": print 'IImo. Sr.',nome else: print 'IIma. Sra.',nome 6- Ler um valor numrico inteiro positivo ou negativo e apresentar o valor lido como sendo um valor positivo, negativo ou igual a zero. num = input('Digite um nmero:') if num == 0: print 'O nmero lido igual a zero' elif num > 0: print 'O nmero positivo' else: print 'O nmero negativo' 7-Escrever um algoritmo que leia um valor e retorne se mltiplo de 5 ou no num = input("Digite um nmero") if num % 5 == 0: print 'O nmero multiplo de 5' else: print 'O nmero no multiplo de 5'

3.9.2. Parte 2
1-Entrar com uma distncia (Km) e o tempo de viagem (Horas) de um automvel, e dizer se a velocidade mdia foi superior ao limite (110 Km/h) ou no. distancia = input('Entre com a distncia:') tempo = input('Entre com o tempo gasto:') velocidade = distancia / tempo if velocidade > 110: print 'Velocidade foi superior ao limite' else: print 'Velocidade ficou at o limite' 2-Ler a temperatura de uma pessoa e exibir a mensagem Est com Febre ou Sem Febre. Considere o valor base como 36.5. temperatura = input('Entre com a temperatura') if temperatura > 36.5: print'Est com febre'

24

else: print'Sem febre' 3-Ler um nmero inteiro e exibir a mensagem O nmero mltiplo de 7 ou O nmero no mltiplo de 7 num = input('Entre com um nmero') if num % 7 == 0: print'Nmero mltiplo de 7' else: print'Nmero no mltiplo de 7' 4-Ler um nmero inteiro e imprimir se ele par e divisvel por 3. num = input('Entre com um nmero') if num % 3 == 0 and num % 2 == 0: print'Nmero divisvel por 3 e par' 5-Ler o ano de nascimento de uma pessoa e escrever uma mensagem que diga se ela poder ou no votar em uma eleio para prefeito (no necessrio considerar o ms em que ela nasceu). Considere o ano atual como 2009. ano = input('Em que ano voc nasceu?') idade = 2009 - ano if idade >= 16: print'Voc pode votar' else: print'Voc no pode votar' 6-Ler uma letra e imprima uma mensagem uma vogal se condizente. Assuma que as letras esto sempre em maisculas. letra = raw_input('Fornea uma letra:') if letra == 'A' or letra == 'E' or letra == 'I' or letra == 'O' or letra == 'U': print letra,' uma vogal' else: print letra,' no uma vogal' 7-Entrar com um valor e dizer a qual ms do ano o mesmo corresponde. Se o valor for maior que doze ou menor que um, diga que o valor no corresponde a nenhum ms. Ex.: 3 = ms de maro. mes = input('Entre com um nmero') if mes == 1: print 'Janeiro' elif mes == 2: print'Fevereiro'

25

elif mes == 3: print'Maro' elif mes == 4: print'Abril' elif mes == 5: print'Maio' elif mes == 6: print'Junho' elif mes == 7: print'Julho' elif mes == 8: print'Agosto' elif mes == 9: print'Setembro' elif mes == 10: print'Outubro' elif mes == 11: print'Novembro' elif mes == 12: print'Dezembro' else: print'No corresponde a nenhum ms' 8-A partir de dois nmeros fornecidos pelo usurio, escrever uma das seguintes mensagens: a) Os dois so pares; b) Os dois so mpares; c) O primeiro par e o segundo mpar; d) O primeiro mpar e o segundo par. num1 = input('Qual o 1 nmero') num2 = input('Qual o 2 nmero') if num1 % 2 == 0 and num2 % 2 ==0: print 'Os dois nmeros so pares' if num1 % 2 == 1 and num2 % 2 ==1: print 'Os dois nmeros so mpares' if num1 % 2 == 0 and num2 % 2 ==1: print 'O primeiro par e o segundo mpares' else: print'O primeiro mpar e o segundo par' 9-Ler trs nmeros inteiros e exibir qual o maior deles; suponha no haver empates.

26

num1 = input('Qual o 1 nmero') num2 = input('Qual o 2 nmero') num3 = input('Qual o 3 nmero') if num1 > num2 and num1 > num3: print'O maior nmero foi ',num1 elif num2 > num3: print'O maior nmero foi ',num2 else: print'O maior nmero foi ',num3 10-Faa um algoritmo para ler a cor de um sinal de trnsito (V verde, A amarelo e E vermelho), e exibir respectivamente as mensagens Siga, Ateno ou Pare. Assuma entradas vlidas. cor = raw_input('Qual a cor do sinal?') if cor == 'V': print'Siga' elif cor == 'A': print'Ateno' else: print'Pare' 11-O que ser impresso pelo algoritmo a seguir? x = 10 y=1 x = x-1 y = y+2 x = x-1 y = y+2 x = x-1 y = y+2 if x>y: print 'X ficou maior do que y' elif x<y: print 'X ficou menor do que y' else: print 'X e Y ficaram iguais' Resposta: X e Y ficaram iguais

3.10. Estruturas de Repetio 3.10.1. Comando While

27

Esta estrutura de repetio se caracteriza por efetuar um teste lgico no incio de um loop, verificando se permitido executar o trecho de instrues abaixo dela. A estrutura while, tem o seu funcionamento controlado por condio. Desta forma, poder executar um determinado conjunto de instrues enquanto a condio verificada permanecer verdadeira. No momento em que a condio se torna falsa, o processamento da rotina desviado para fora do loop. Sendo a condio falsa logo no incio do loop, as instrues contidas nele so ignoradas. Portugol Sintaxe: Enquanto <<condio>> Faca comando 1; comando 2; ... comando N; Fimenquanto. Exemplo 1
var x:Inteiro inicio enquanto x < 100 faca escreval(x) x:=x + 1; fimenquanto fimalgoritmo

Python Sintaxe: while <condio> : # bloco de cdigo else: # bloco final Exemplo 1 x=1 while x < 100: print x, x=x+1 Exemplo 2 soma = 0 num = 1 while num <= 10: soma = soma + num num = num + 1 print 'Soma dos nmeros:',soma * Python possui a instruo break. Exemplo 3 i=1 while i < 100: if i == 50: break print i, i=i+1 * Python possui tambm a instruo continue.

Exemplo 2 var Nums,Soma:Inteiro inicio Soma:=0; Nums:=1; enquanto Nums <= 10 faca soma:=soma + nums; nums:=nums + 1; fimenquanto escreva("Soma dos Nmeros: ",soma) fimalgoritmo

28

Exemplo 4 login = "" while True: login = raw_input('Digite o login:') if login == "": continue if login == "teste": print "Login correto." break * O else em laos executado caso no seja executada uma interrupo feita pela instruo break. Exemplo 5 i=1 valor = input("Digite o valor para parar:") while i < 100: if i == valor: break i=i+1 else: print 'No parei. Valor fora da faixa'

3.10.2. Exerccios 3.10.2.1. Parte 1

1 Faa um algoritmo em Python que mostre os 20 primeiros nmeros pares. contador = 0 par = 2 while contador < 20: print par par = par + 2 contador = contador + 1 2Faa um algoritmo que leia uma seqncia de nmeros inteiros e imprima o maior valor. ltimo Nmero = 0. num = input('Digite um nmero inteiro:') maior = 0

29

while num != 0: if num > maior: maior = num num = input('Digite um nmero inteiro:') print 'O maior valor :',maior 3Apresentar a mdia de um conjunto de valores inteiros positivos fornecidos pelo usurio via teclado. O flag ser 0. Lembre-se: o flag um nmero de controle, ele no entra nos clculos. cont = 0 s=0 valor = input('Digite um valor:') while valor != 0: cont = cont + 1 s = s + valor valor = input ('Digite um valor:') media = s/cont print 'A mdia: ', media 4Imprimir os nmeros 11, 21, 31, ... 101. num = 11 while num <= 101: print num, num = num + 10 5Ler 10 nmeros e exibir a soma dos nmeros mpares. cont = 1 soma = 0 while cont <= 10: valor = input('Entre com um nmero:') if valor % 2 == 1: soma = soma + valor cont = cont + 1 print 'O maior valor :',soma 6-Ler 20 nmeros e exibir qual foi o menor e o maior. num = input('Fornea um nmero:')

30

maior = num menor = num cont = 1 while cont <= 19: num = input('Fornea um nmero:') if num > maior: maior = num elif num < menor: menor = num cont = cont + 1 print 'O maior valor :',maior print 'O maior valor :',menor 7-Ler diversos nmeros inteiros e exibir quantas vezes o nmero 50 foi informado. O valor 0 cdigo de fim da entrada quant = 0 num = input('Fornea um nmero:') while num != 0: if num == 50: quant = quant + 1 num = input('Fornea um nmero:') print 'Quantidade dos valores iguais a 50:',quant

3.10.2.2.

Parte 2

1-Apresente a tabuada das potncias de 3, variando do expoente 0 at o expoente 15. A tabuada deve ser apresentada do modo seguinte: 3 = 1 3 = 3 3 = 9 (...) expoente = 0 base = 3 while expoente <= 15: tabuada = 3**expoente print tabuada expoente = expoente + 1 2-Faa um algoritmo que l diversos nmeros positivos e escreve, para cada um, sua raiz quadrada.Flag = 0.

31

num = input("Digite um nmero:") while num != 0: print pow(num,0.5) num = input ("Digite um nmero:") 3-Escreva um programa que apresente a srie de Fibonacci at o dcimo quinto termo. A srie de Fibonacci formada pela seqncia: 1,1,2,3,5,8,13,21,34,...etc. esta srie se caracteriza pela soma de um termo atual com o seu anterior subseqente, para que seja formado o prximo valor da seqncia. atual = 1 anterior = 1 print atual,anterior cont = 0 while cont <= 15: proximo = atual + anterior print proximo anterior = atual atual = proximo cont = cont + 1 4-Escreva um algoritmo para ler todas as notas de um aluno, uma para cada disciplina, e calcular a mdia das notas. O flag ser uma nota negativa que vai ser utilizada como valor de controle e no entrar nos clculos. Finalmente, o programa deve imprimir o valor da mdia e o valor da maior nota do aluno. nota = input("Digite uma nota:") soma = 0 cont = 0 maior = nota while nota != 0: if maior > nota: maior=nota soma = soma + nota cont = cont + 1 nota = input("Digite uma nota:") media = soma/cont print media print soma 5-Mostre o que ser impresso pelo algoritmo a seguir? x=0 y = 30

32

while x < 10: x= x+1 y=y-1 print x,y Resposta: 10 e 20

3.10.3. Comando For


O comando de repetio com contador For controla a repetio atualizando automaticamente uma varivel que conta o nmero de repetio que devem ser executadas. A construo for em Python difere um pouco do que se esta acostumado em C ou Pascal. Ao invs de se iterar sobre progresses aritmticas (como em Pascal), ou fornecer ao usurio a habilidade de definir tanto o passo da iterao quanto a condio de parada (como em C), o for de Python itera sobre os itens de uma seqncia (ex.: uma lista ou uma string), na ordem em que aparecem na seqncia. Portugol Sintaxe: Sintaxe: For var in iterable : # comandos do for else: # comandos do else Exemplo 1 faculdade = "Atenas" Exemplo 1: var Nums,Soma:Inteiro inicio Soma:=0; para Nums de 1 ate 10 faca soma:=soma + nums fimpara escreva("Soma dos Nmeros: ",soma) fimalgoritmo Exemplo 2: var A, B, R, I : inteiro for facu in faculdade: print facu Exemplo 2 letra = ['gato','janela','computador'] for x in letra: print x, len(x) Funo range()
Se voc precisar iterar sobre seqncias numricas, a funo interna range() a resposta. Ela gera listas contendo progresses aritmticas, ex.:

Python

33

inicio para I de 1 ate 5 faca escreva("Entre um valor para A: ") leia(A) escreva("Entre um valor para B: ") leia(B) R <- A + B escreval("O resultado corresponde a: ",R) fimpara fimalgoritmo

range(10) O ponto de parada fornecido nunca gerado na lista; range(10) gera uma lista com 10 valores, exatamente os ndices validos para uma seqncia de comprimento 10. possvel iniciar o intervalo em outro numero, ou alterar a razo da progresso (inclusive com passo negativo): range(5,10) range(0, 10, 3) Exemplo 3 soma=0 for num in range(11): soma = soma + num print 'Soma dos numeros:',soma Exemplo 4 for i in range(5): a=input("Digite um valor para A:") b=input("Digite um valor para B:") soma = a + b print 'Resultado:',soma

3.10.3.1.

Exerccios

1Faa um algoritmo que imprima 10 vezes a frase Sistemas de Informao. for i in range(10): print "Sistemas de Informacao" 2Faa um algoritmo que mostre os 20 primeiros nmeros pares. for i in range(2,42,2): print i 3Apresente todos os valores numricos inteiros impares situados na faixa de 0 a 20. for i in range(1,20,2): print i

34

4-Faa um algoritmo para exibir os nmeros 0,4,9,16,25,36...,9801. for i in range(100): quadrado = pow(i,2) print quadrado 5-Faa um algoritmo para ler um nmero e imprimir o nmero elevado quinta potncia base = input('Qual o valor da base:') pot = 1 for i in range(5): pot = pot * base print "A potencia:",pot 6-Modifique o algoritmo anterior para imprimir o valor de um nmero X elevado a uma potncia Y. base = input('Qual o valor da base:') potencia = input ('Digite a potncia') pot = 1 for i in range(potencia): pot = pot * base print "A potencia:",pot 7-Um garrafo de 20 litros, cheio de gua, est com um furo que vaza 50ml a cada 30 minutos. Faa um algoritmo para calcular em quantas horas estr vazio. garrafao = 20 * 1000 # transforma 20 litros em ml horas = 30.0 / 60.0 # transforma 30 minutos em horas while garrafao > 0: garrafao = garrafao - 50.0 tempo = tempo + horas print 'O tempo para o garrafao esvaziar, em horas:',tempo 8-Mostre o que ser impresso pelo algoritmo abaixo. x=0 y = 30 for x in range(10): x=x+1 y=y-1

35

print x,y resposta 10,20 9-Ler diversos nmeros inteiros e exibir a tabuada de multiplicao de cada um. O cdigo 0 finaliza a leitura. num = input('Fornea um nmero:') while num != 0: print 'Escreva a tabuada de:', num for cont in range(11): mult = num * cont print num,'x', cont,':', mult num = input('Fornea um nmero:') 10-Num frigorfico existe N bois. Cada boi traz preso em seu pescoo um carto contendo o seu nmero de identificao e seu peso. Calcule e escreve o peso e o nmero do boi mais gordo e do boi mais magro. nbois = input("Digite o nmero de bois:") magro = 10000 gordo = 0 for i in range(0,nbois): peso = input("Digite o peso do boi:") ni = input("Digite o nmero de identificao do boi:") if peso < magro: magro = peso nmagro = ni elif peso > gordo: gordo = peso ngordo = ni print "O nmero do boi mais gordo:",ngordo print "O peso do boi mais gordo:",gordo print "O nmero do boi mais magro:",nmagro print "O peso do boi mais magro:",magro 11-Faa um algoritmo que l 5 nmeros e escreve todos os que forem positivos. for i in range(0,5): num = input("Digete um numero") if num > 0: print num

36

12-Faa um algoritmo que l um nmero N e escreve todos os nmeros de 1 a N. n = input("Digite um nmero:") for i in range(0,n): print i 13-Escreva um algoritmo para ler um nmero inteiro K e imprimir os 10 primeiros nmeros inteiros, mltiplos de 3 maiores que o nmero K. Se o prprio nmero K j for, ele mesmo, divisvel por 3, inclua-o no grupo dos 10 primeiros nmeros que devem ser impresso (e nesse caso sero impressos, portanto, o nmero K seguido de mais 9 outros). k = input("Digite um nmero:") if k % 3 == 0: primeiro = k else: primeiro = k + (3-(k % 3)) for i in range(0,10): print primeiro primeiro = primeiro + 3 14-Faa um algoritmo para imprimir o fatorial de um nmero inteiro fornecido pelo usurio. O fatorial de um nmero N (representado por N!) calculado pela frmula: N! = 1*2*3*...*(N-1)*N. n = input("Qual o nmero para o fatorial:") fat = 1 for i in range(1,n+1): fat = fat * i print 'O fatorial de ',n,':',fat 15-Em matemtica, uma srie uma seqncia de nmeros que possui uma lei de formao. Faa um algoritmo para calcular a soma da srie abaixo: onde N fornecido pelo usurio: 1/2 + 1/4 + ... 1/2n n = input('Entre com o valor de N:') for i in range(1,n): termo = 1.0/(i*2.0) soma = soma + termo print 'A soma da serie:',soma

37

16-Escreva um algoritmo que leia um conjunto de 10 informaes contendo, cada uma delas, a altura e o sexo de uma pessoa ('M' masculino e 'F'feminino). Calcule e mostre: a) a maior e a menor altura; b) a mdia da altura das mulheres; c) a mdia da altura da turma. somamulher = 0 mulher = 0 somaturma = 0 altura = input("Qual a altura da pessoa:") sexo = raw_input("Qual o sexo da pessoa M/F:") maioraltura = altura menoraltura = altura somaturma = altura for i in range(1,5): altura = input("Qual a altura da pessoa:") sexo = raw_input("Qual o sexo da pessoa M/F:") somaturma = somaturma + altura if sexo == 'F': somamulher = somamulher + altura mulher = mulher + 1 if altura < menoraltura: menoraltura = altura if altura > maioraltura: maioraltura = altura mediaalturamulher = somamulher / mulher mediaaltura = somaturma / 5.0 print 'maior altura:',maioraltura print 'menor altura:',menoraltura print 'media de altura das mulheres:',mediaalturamulher print 'media de altura da turma:',mediaaltura

3.11. Lista

38

Uma lista um conjunto ordenado de valores (como um vetor em outras linguagens), onde cada valor identificado por um ndice. Os ndices so iniciados em zero e atribudos seqencialmente a partir deste. Os valores que compem uma lista so chamados elementos. Listas so similares a strings, que so conjuntos ordenados de caracteres, com a diferena que os elementos de uma lista podem possuir qualquer tipo, ou seja, a lista pode conter quaisquer valores, incluindo valores de tipos mistos, e at outras listas. Para criar uma lista, usamos colchetes e vrgulas para enumerar os valores: >>> numeros = [1, 2, 3] >>> opcoes = ["nao", "sim", "talvez"] >>> modelos = [3.1, 3.11, 95, 98, 2000, "Millenium", "XP"] >>> listas = [numeros, opcoes] Neste exemplo criamos quatro listas diferentes, com elementos de tipos diversos. A quarta lista tem como elementos outras listas: em outras palavras, uma lista de listas: >>> print listas [[1, 2, 3], ['nao', 'sim', 'talvez']] Para acessar um elemento especfico de uma lista, usamos o nome da lista seguido do ndice entre colchetes: >>> print numeros[0] 1 >>> print opcoes[2] talvez >>> print modelos[4] 2000 Usando ndices negativos, as posies so acessadas a partir do final da lista, -1 indicando o ltimo elemento: >>> print numeros[-1] 3 >>> print modelos[-2] Millenium Outra maneira de criar uma lista contendo inteiros consecutivos em Python seria utilizando a funo range: >>> range(1,5) [1, 2, 3, 4] A funo range pega dois argumentos e devolve uma lista que contm todos os inteiros do primeiro at o segundo, incluindo o primeiro, mas no incluindo o segundo!

39

Existem outras formas de range. Com um argumento simples, ela cria uma lista que inicia em 0: >>> range(10) [0,1, 2, 3, 4, 5, 6, 7, 8, 9] Se existe um terceiro argumento, ele especifica o espao entre os valores sucessivos, que chamado de tamanho do passo. Este exemplo conta de 1 at 10 em passos de 2: >>> range(1, 10, 2) [1, 3, 5, 7, 9] Finalmente, existe uma lista especial que no contm elementos. Ela chamada lista vazia, e sua notao []. Com todas estas formas de criar listas, seria decepcionante se no pudssemos atribuir valores de listas a variveis ou passar listas como parmetros a funes. Felizmente, podemos. >>> vocabulario = ['melhorar', 'castigar', 'defenestrar'] >>> numeros = [17, 123] >>> vazio = [] >>> print vocabulario, numeros, vazio ['melhorar', 'castigar', 'defenestrar'] [17, 123] []

3.11.1. O mtodo append()


O mtodo append () utilizado para adicionar um valor ao final de uma lista. Exemplo: Faa um algoritmo que crie um vetor contendo dez posies e cada posio tenha um valor inteiro. Mostre os valores. vet = [] for cont in range(10): # entra com os valores no vetor cont = input("Digite um valor:") vet.append(cont) for cont in range(10): # imprime os valores print vet[cont] ou vet = [] for cont in range(10): # entra com os valores no vetor cont = input("Digite um valor:") vet.append(cont)

40

print vet

3.11.2. Operaes em Listas


O operador + concatena listas: >>> a = [1, 2, 3] >>> b = [4, 5, 6] >>> c = a + b >>> print c [1, 2, 3, 4, 5, 6] Similarmente, o operador * repete uma lista um nmero dado de vezes: >>> [0] * 4 [0, 0, 0, 0] >>> [1, 2, 3] * 3 [1, 2, 3, 1, 2, 3, 1, 2, 3] O primeiro exemplo repete [0] quatro vezes. O segundo exemplo repete a lista [1, 2, 3] trs vezes.

3.11.3. Operador in
Permite saber se um elemento pertence a uma lista e serve tambm para verificar se uma strings pertence a uma lista. Ex.: >>> lista = [1, 'a', 'bc'] >>> 1 in lista True >>> 2 in lista False >>> 'b' in lista False >>> 'b' in lista[2] True >>> 'bc' in 'abcd' True

3.11.4. Listas Aninhadas


Uma lista aninhada uma lista que aparece como um elemento de uma outra lista. Nesta lista, o terceiro elemento uma lista aninhada: >>> lista = ["alo", 2.0, 5, [10, 20]]

41

Se exibimos lista[3], obtemos [10, 20]. Para extrairmos um elemento de uma lista aninhada, podemos agir em duas etapas: >>> elem = lista[3] >>> elem[0] 10 Ou podemos combin-las: >>> lista[3][1] 20 Os operadores colchete avaliam da esquerda para a direita, ento a expresso pega o terceiro elemento de lista e extrai o primeiro elemento dela.

3.11.5. Exemplos de Utilizao de Listas


Exemplo 1: Uma prova de qumica foi feita por um grupo de 10 alunos. Faa um algoritmo para ler as notas obtidas pelos alunos, e depois exibir um relatrio das notas iguais ou superiores a 7,5: Soluo: este exerccio uma aplicao simples de vetores. Uma repetio est embutida no problema, pois so 10 as notas a serem lidas. Aps a leitura, o computador deve exibir uma lista das notas que so iguais ou superiores a 7.5. Se fssemos usar uma varivel de leitura simples dentro de uma repetio, cada valor seria sobreposto pelo seguinte; precisamos, portanto, ter as 20 notas armazenadas ao mesmo tempo na memria, para decidir quais sero impressas. vet = [] for cont in range(10): # entra com os valores no vetor cont = input("Digite um valor:") vet.append(cont) print 'Notas Boas:' for cont in range(10): #compara as notas se foram maiores que 7.5 if vet[cont]>=7.5: print vet[cont] Exemplo 2: Modifique o algoritmo anterior, de modo a escrever a quantidade de notas boas obtidas pelos alunos.

42

Soluo: a leitura permanece igual, isto , o usurio continua fornecendo 10 notas. Na impresso, entretanto, precisamos de outra varivel que armazene quantas notas boas so impressas. Na verdade, esta nova varivel tambm uma contadora, mas que ser incrementada somente se a nota for maior ou igual a 7.5: vet = [] for cont in range(10): # entra com os valores no vetor cont = input("Digite um valor:") vet.append(cont) quant = 0 print 'Notas Boas:' for cont in range(10): #compara as notas se foram maiores que 7.5 if vet[cont]>=7.5: quant = quant + 1 print vet[cont] print 'Quantidade de notas boas:',quant #quantidade de notas acima da mdia Exemplo 3: Num concurso pblico, um candidato respondeu a uma avaliao com 80 questes de mltipla escolha, onde cada questo tinha resposta A at D. Fazer um algoritmo para ler o gabarito da prova e as respostas do aluno, informando quantas questes ele acertou. Soluo: precisamos armazenar 80 respostas referentes ao gabarito oficial, e mais 80 referentes s respostas do candidato. Toda vez que uma letra armazenada em uma posio do gabarito for igual letra da mesma posio do vetor de respostas, significa que houve um acerto a ser contabilizado. gabarito = [] resposta = [] acerto = 0 for cont in range(10): # leitura do gabarito cont = raw_input("Digite a resposta da questao:") gabarito.append(cont) for cont in range(10): #leitura das respostas cont = raw_input("Digite a resposta do canditado:") resposta.append(cont)

43

for cont in range(10): # conta os acertos if gabarito[cont] == resposta[cont]: acerto = acerto + 1 print "O candidato acertou",acerto," questoes"

3.11.6. Exerccios
1-Mostre o resultado final impresso pelo algoritmo a seguir: vet = [] for cont in range(1,6): cont = cont**2 vet.append(cont) print vet

2-Mostre o resultado final impresso pelo algoritmo a seguir: vet = [] vet1 = [] for cont in range(1,11): cont = 10 * cont vet.append(cont) for cont in range(1,9): cont = vet[cont] + 1 vet1.append(cont) print vet1 [21, 31, 41, 51, 61, 71, 81, 91] 3-Mostre o resultado final impresso pelo algoritmo a seguir:

44

vet = [] vet1 = [] for cont in range(1,11): cont = 10 * cont vet.append(cont) for cont in range(1,9): cont = vet[cont + 1] vet1.append(cont) print vet1 [30, 40, 50, 60, 70, 80, 90, 100] 4- Mostre o resultado final impresso pelo algoritmo a seguir: v = [2,6,8,3,10,9,1,21,33,14] for i in range(0,10,2): print v[i] 2,8,10,1 e 33 5-Faa um algoritmo para gerar um vetor de 10 posies, onde cada elemento corresponde ao cubo de sua posio. Imprima depois o vetor resultante. vet = [] for cont in range(1,11): cont = cont**3 vet.append(cont) print vet 6-Faa um algoritmo para gerar um vetor de 30 posies, onde cada elemento corresponde ao quadrado de sua posio. Imprima depois o vetor resultante. vet = [] for cont in range(1,31): cont = cont**2 vet.append(cont) print vet 7-Faa um algoritmo para gerar um vetor de 20 posies, onde cada elemento corresponde ao qudruplo de sua posio. Imprima depois o vetor resultante. vet = [] for cont in range(1,21):

45

cont = cont**4 vet.append(cont) print vet 8-Faa um algoritmo para gerar um vetor de 10 posies, onde cada elemento corresponde a soma de sua posio. Imprima depois o vetor resultante. Exemplo:

vet = [] for cont in range(1,11): cont = cont + cont vet.append(cont) print vet 9Escreva um algoritmo que faa a leitura das notas dos alunos de uma disciplina e armazene-as numa varivel composta NOTA. Considere que h uma nota para cada aluno e que h 10 alunos cursando a disciplina. Em seguida, calcule e imprima a maior nota da sala. vet = [] for cont in range(11): cont = input("Digite uma nota:") vet.append(cont) maior = 0 for cont in range(11): if maior < vet[cont]: maior = vet[cont] print 'A maior nota e:',maior 10-Escreva um algoritmo que leia o nome de 10 pessoas, depois leia um nome X e responda se esse nome X est includo, ou no, no grupo dos 10. OBS: considere que os nomes tm no mximo 15 letras. vet = [] for cont in range(5): cont = raw_input("Digite um nome:") vet.append(cont)

46

nome = raw_input("Digite um nome a ser pesquisado:") if nome in vet: print "O nome ", nome," esta dentro do grupo" else: print "O nome ", nome," nao esta dentro do grupo" 11-Leia 20 nmeros inteiros e em seguida leia um nmero x e informe se este nmero aparece entre os 20 nmeros, e se for o caso, quantas vezes aparece. vet = [] for cont in range(20): cont = input("Digite um valor:") vet.append(cont) num = input("Digite o valor a ser pesquisado:") quant = 0 for cont in range(20): if vet[cont]==num: quant = quant + 1 print 'O numero',num,'apareceu',quant,'vezes ' 12)Dados dois conjuntos A e B com 20 elementos, obter e escrever o conjunto C formado pelos elementos de A e B. Exemplo: A = 5 7 3 B=3 0 8 C=5 7 3 3 0 8 veta = [] vetb = [] vetc = [] for cont in range(5): cont = input("Digite um valor:") veta.append(cont) print veta for cont in range(5): cont = input("Digite um valor:") vetb.append(cont)

47

print vetb vetc = veta + vetb print vetc

3.12. Tuplas
At agora, voc tem visto dois tipos compostos: strings, que so compostos de caracteres; e listas, que so compostas de elementos de qualquer tipo. Uma das diferenas que notamos que os elementos de uma lista podem ser modificados, mas os caracteres em uma string no. Em outras palavras, strings so imutveis e listas so mutveis. H outro tipo em Python chamado tupla (tuple) que similar a uma lista exceto por ele ser imutvel, ou seja, voc no pode modificar as tuplas. Para criar uma tupla use parnteses, e vrgulas para separar seus elementos: >>> t = ('a', 'b', 'c', 'd', 'e') Para criar uma tupla com um nico elemento, temos que incluir uma vrgula final: >>> t1 = ('a',) >>> type(t1) <type 'tuple'> Sem a vrgula, Python entende ('a') como uma string entre parnteses: >>> t2 = ('a') >>> type(t2) <type 'string'> Questes de sintaxe de lado, as operaes em tuplas so as mesmas operaes das listas. O operador ndice seleciona um elemento da tupla. >>> t = ('a', 'b', 'c', 'd', 'e') >>> t[0] 'a' Mas se tentarmos modificar um dos elementos de uma tupla, teremos um erro: >>> t[0] = 'A' TypeError: object doesn't support item assignment Naturalmente, mesmo que no possamos modificar os elementos de uma tupla, podemos substitu-la por uma tupla diferente: >>> t = ('A',) + t[1:] >>> t ('A', 'b', 'c', 'd', 'e')

48

Observaes Importantes * No possvel adicional elementos a uma tupla. Tuplas no tem mtodos append; Exemplo: Exemplo de lista vet = [] for cont in range(10): # entra com os valores no vetor cont = input("Digite um valor:") vet.append(cont) print vet Exemplo de Tupla vet = () for cont in range(10): # entra com os valores no vetor cont = input("Digite um valor:") vet.append(cont) print vet * possvel, porm usar in para ver se um elemento existe na tupla. Exemplo: >>> teste = (1,2,3,4,5) 1 in teste

3.13. Dicionrios
Os tipos compostos que voc aprendeu - strings, listas e tuplas - utilizam inteiros como ndices. Se voc tentar utilizar qualquer outro tipo como ndice, voc receber um erro. Dicionrios so similares a outros tipos compostos exceto por eles poderem usar qualquer tipo imutvel de dados como ndice. Para declarar dicionrios, utilizamos o smbolo chaves, separando o ndice do valor por dois pontos e separando os pares ndice-valor por vrgulas:

d = {'nome' : 'igor', 'idade' : 18, 'curso' : 'python' } Os dicionrios guardam pares de chave/valor, no caso acima, as chaves so: 'nome', 'idade' e 'curso'... e elas se referem a seus respectivos valores: 'igor', 18, 'python'.

49

importante lembrar que as posies dos pares chave/valor no tm ordem fixa. Os valores podem ser de qualquer tipo, strings, inteiros, tuplas. O processo para imprimir um o valor corrente de um dicionrio feito da mesma maneira para uma lista ou tupla sendo o comando Print utilizado: >>> print d {'idade': 18, 'curso': 'python', 'nome': 'igor'} ou >>> d['nome'] 'igor' Operaes dos Dicionrios Pra alterar o valor de uma chave muito simples >>> d['nome'] 'igor' >>> d['nome'] = 'Ana' >>> d['nome'] 'Ana' O comando del remove um par chave-valor de um dicionrio. Por exemplo, o dicionrio abaixo contem os nomes de varias frutas e o numero de cada fruta em no estoque:

>>> inventario = {'abacaxis': 430, 'bananas': 312, 'laranjas': 525, 'peras': 217} >>> print inventario {'laranjas': 525, 'peras': 217, 'bananas': 312, 'abacaxis': 430} Se algum comprar todas as peras, podemos remover a entrada do dicionrio: >>> del inventario['peras'] >>> print inventario {'laranjas': 525, 'abacaxis': 430, 'bananas': 312} Ou se ns esperamos por mais peras em breve, nos podemos simplesmente trocar o valor associando as peras: >>> inventario['peras'] = 0 >>> print inventario {'laranjas': 525, 'abacaxis': 430, 'peras': 0, 'bananas': 312}

50

Agora caso queira limpar todo o dicionrio, basta utilizar o comando 'clear': >>> inventario.clear() >>> print inventario {} A funo len tambm funciona com dicionrios; retornando o nmero de pares chave-valor: >>> len(inventario) 4 Um outro conceito importante nos dicionrios que podemos copiar todo o contedo do dicionrio, para um outro dicionrio. >>> copiainventario = inventario.copy() >>> print copiainventario {'laranjas': 525, 'peras': 217, 'bananas': 312, 'abacaxis': 430} >>> copiainventario['morango']= 500 >>> print copiainventario {'laranjas': 525, 'morango': 500, 'peras': 217, 'bananas': 312, 'abacaxis': 430} >>> print inventario {'laranjas': 525, 'peras': 217, 'bananas': 312, 'abacaxis': 430} Observe que uma alterao em um, no altera o contedo do dicionrio copiado.

4. Programao Estruturada
As primeiras aplicaes comerciais dos computadores, iniciadas nos anos 50, trouxeram tambm a necessidade de formao de um tipo de profissional antes inexistente o programador de computador. Sua funo principal elaborar algoritmos computacionais e codific-los em uma linguagem de programao, de modo a serem compreendidos e executados por um computador. No incio, boa parte dos programadores era composta por matemticos e engenheiros. O trabalho muitas vezes exigia conhecimento da arquitetura de

51

determinados

computadores,

programao

era

um

tipo

de

atividade

extremamente artesanal. As solues algortmicas para os problemas vinham a partir do exerccio e habilidade intelectual dos programadores, cujo nvel de abstrao esbarrava nas limitaes impostas por equipamentos, ferramentas e linguagens de programao ento disponveis. Nos anos seguintes, o contnuo crescimento da programao e a sua disseminao em instituies cientificas, comerciais e militares, trouxeram um acumulo de problemas nas prticas de programao, ou mais genericamente, no desenvolvimento de software. Alguns destes problemas que podem ser citados eram: Os programas elaborados por um programador eram difceis de serem compreendidos por outro, devido ao uso de uma lgica peculiar, tirada da cabea de quem programou; No havia documentao suficiente para facilitar a manuteno dos programas; No havia um padro nas estruturas de programao utilizadas. Uma crise do software acabou por surgir nos anos 60. Os custos de desenvolvimento tornaram-se maiores, e os programas foram se tornando cada vez mais difceis de serem modificados, aumentando tambm a ocorrncia de erros. Outro detalhe a ser lembrado que nas primeiras linguagens de programao, era comum haver algum tipo de comando para provocar um salto em um programa. Este comando, chamado de desvio incondicional, permitia fazer com que a seqncia de um programa fosse desviada para outro local. Instrues como GOTO (ir para) ou JUMP (saltar) eram utilizadas para fazer repeties e chamadas a mdulos de um programa, sendo s vezes o nico recurso disponvel na linguagem. Muitos programadores passaram a fazer uso indiscriminado dos desvios incondicionais. Em programas complexos, os desvios eram feitos saltando de uma repetio para a outra, ou pulando de um mdulo para o outro. Como resultado, um programa criado desta forma passou a ser comparado a um prato de espaguete: mexendo-se algo de um lado, alguma coisa tambm se mexe do outro! Pejorativamente, esta comparao indicava que o programador j no tinha controle sobre todos os desvios que haviam sido programados, o que tornava muito difcil entender a lgica da programao como um todo. Sendo assim, em meados dos anos 60, alguns pesquisadores comearam a dar ateno a este problema, indicando que havia necessidade de se estabelecer um tipo de programao mais ordenada. Assim, surgiu a Programao Estruturada o nome dado a um conjunto de mtodos que o programador pode seguir para produzir o cdigo estruturado, visando a criao de programas mais legveis e mais fceis de serem modificar.

52

Em um sentido mais amplo, a programao estruturada dirigida tanto aos mtodos de programao como forma do programa. Implica seguir uma metodologia estruturada para organizar o projeto e a implantao do programa. Os tpicos envolvidos incluem: 1 Programao modular 2 Refinamento gradual (stepwise refinement) 3 Nveis de abstrao

4.1.

Objetivos
O principal objetivo da programao estruturada produzir um programa de

alta qualidade a baixo custo, proporcionando uma disciplina de programao para conseguir: Melhorar a confiabilidade do programa; Aumentar a legibilidade do programa; Minimizar a complexidade do programa; Simplificar a manuteno do programa; Aumentar a produtividade do programador; Estabelecer uma metodologia disciplinada de programao.

4.2.

Propriedades
As caractersticas mais notveis de um programa estruturado so sua forma

hierarquizada e o conjunto reduzido de suas estruturas bsicas de controle. Alm dessas, tambm so consideradas propriedades igualmente importantes, a estrutura de controle padronizada, os requisitos de programao e as convenes de estilo. A seguir, um resumo das propriedades de um programa estruturado. Propriedade 1 - o programa dividido em um conjunto de mdulos dispostos em uma hierarquia que define suas relaes lgicas e de tempo de execuo. Propriedade 2 - o fluxo de execuo de mdulo para mdulo restringe-se a um esquema simples, fcil de entender, no qual o controle deve ser passado para o mdulo em seu nico ponto de entrada, sair do mdulo de seu nico ponto de sada e retornar sempre ao mdulo que o chamou.

53

Propriedade 3 - a construo do mdulo padronizada de acordo com as regras tradicionais de modularizao, e as estruturas bsicas de controle so limitadas a seqncia, deciso e repetio. Propriedade 4 - requerida a documentao relativa ao cdigo fonte, para descrever a funo do programa como um todo e descrever, para cada mdulo, sua funo, sua estrutura de dados e sua relao com outros mdulos do programa.

4.3.

Estruturas Bsicas de Controle


As trs estruturas bsicas de controle para a construo de programas

estruturados : Seqncia um conjunto de comandos em que executado aps o outro. Deciso execuo de um ou mais comandos a partir do resultado de uma comparao ser verdadeira ou falsa. Usamos aqui o comando IF. Repetio execuo de um ou mais comandos certo nmero de vezes, controlada por uma comparao que pode ser verdadeira ou falsa. Usamos o comando WHILE e o comando FOR.

4.4.

Programao Modular
A programao estruturada tem sua origem na programao modular.

Grande

parte

da

filosofia

estruturada

construda

sobre

filosofia

de

modularizao de dividir-para-conquistar. A programao modular utiliza essa filosofia para resolver o problema da complexidade do programa. Lembramos que complexidade sinnimo de variedade, ou seja, a quantidade de situaes diferentes que um problema pode apresentar. Assim, quando dividimos um problema em subproblemas, estamos invariavelmente dividindo tambm a complexidade e, por conseqncia, simplificando a resoluo. Sendo assim, a programao modular pode ser definida como a organizao de um programa em unidades independentes, chamadas mdulos, cujo comportamento controlado por um conjunto de regras. Suas metas so as seguintes: Decompor um programa em partes independentes; Dividir um problema complexo em problemas menores e mais simples;

54

Verificar a correo de um mdulo de programa, independentemente de sua utilizao como uma unidade em um sistema maior.

Fazendo uma analogia, entender o funcionamento do corpo humano no nada trivial. Isso porque nosso corpo uma mquina complexa. Porm, podemos dividir esse problema em partes menores: sistema digestivo, respiratrio, nervoso, cardiovascular etc; e assim, tentando compreender cada parte separadamente, podemos compreender melhor o todo. Caso essas partes ainda sejam muito complexas, podemos continuar dividindo em partes ainda menores, por exemplo, o sistema respiratrio pode ser dividido em nariz, faringe, laringe, traquia e pulmes, por sua vez, em bronquolos e alvolos, e assim por diante.

4.5.

Vantagens da Programao Modular

Os programas modulares so mais fceis de entender, porque a

anlise do programa pode ser feita atravs da anlise dos mdulos, um de cada vez. O teste do programa mais simples. Os erros do programa so mais fceis de serem isolados e corrigidos. As mudanas no programa podem ser limitadas a apenas alguns Pode-se aumentar mais facilmente a eficincia do programa. Os mdulos do programa podem ser reutilizados como blocos de O tempo de desenvolvimento do programa pode ser diminudo, diferentes mdulos podem ser designados a diferentes

mdulos, em vez de percutirem pela maior parte do cdigo do programa.

construo de outros programas. porque

programadores, que podem trabalhar com maior ou menor independncia.

4.6.

Utilizao da Programao Estruturada e Modular


Resolver um problema complexo mais fcil se no precisarmos considerar

todos os aspectos do problema simultaneamente, ou seja, podemos decompor o problema em subproblemas (mdulos). A linguagem Python nos oferece uma 1sub-rotina para criarmos programas modulares e estruturados que so as FUNES (def). E , na verdade, um bloco de programa (trechos de cdigo), contendo inicio e fim, identificado por um nome, atravs do qual ser referenciado em qualquer parte do programa principal ou da subrotina chamadora.

Nome dado a um trecho menor do programa que utilizado quando o programa se torna muito complexo, necessitando assim, de uma viso para facilitar sua compreenso e sua manuteno.

55

5. Funes
Funes so pequenos trechos de cdigo reutilizveis. Elas permitem dar um nome a um bloco de comandos e rodar este bloco usando o nome, a partir de qualquer lugar do programa, quantas vezes voc quiser. Isto conhecido como chamar a funo. Ns j usamos algumas funes internas do Python como len e range. Funes so definidas usando a palavra-chave def. Esta seguida pelo nome da funo, um par de parnteses que pode envolver algumas variveis, dois pontos e o bloco de comandos:

5.1.

Parmetros e Argumentos
Nossa funo alo() foi definida de acordo com a sintaxe descrita acima. Ela,

porm, no possui nenhum parmetro. Parmetros so as variveis que podem ser includas nos parnteses da definio. O bloco de comandos da funo pode utilizar estas variveis para processar a informao e executar algum trabalho til. Quando a funo chamada so passados valores a serem atribudos a estas variveis, estes valores so chamados argumentos. Abaixo temos um exemplo de uma funo que possui parmetros em sua definio e por sua vez exige argumentos na chamada:

56

Exemplo: Deve ser criado um programa que por intermdio de uma sub-rotina do tipo funo efetue a leitura de dois valores inteiros e apresente como sada uma mensagem informando se os nmeros so iguais ou diferentes.

Fazer um programa para ler um nmero inteiro e chamar uma funo que retorna uma mensagem, dizendo se o nmero lido : Par, mpar ou Zero. Mostrar o retorno da funo.

57

5.2.

Variveis Locais
Quando voc cria uma varivel dentro de uma funo, ela totalmente

independente de qualquer outra varivel que tenha o mesmo nome fora da funo, isto , nomes de variveis so locais a funo. Isto chamado escopo da varivel. Todas as variveis tem o escopo do bloco de comandos em que foram criadas. O exemplo abaixo demonstra isto:

Na funo, quando usamos o valor de x pela primeira vez, o Python usa o valor passado como argumento, no caso 50. Depois atribumos o valor 2 a x. O nome x local a nossa funo. Assim, quando alteramos o valor de x na funo o x definido no bloco principal permanece inalterado. A ltima instruo print confirma isto.

5.3.

Variveis Globais

58

Se voc quiser atribuir um valor a uma varivel definida fora da funo voc ter informar ao Python que a varivel no local, mas sim global. Ns fazemos isto usando a instruo global. impossvel atribuir um valor a uma varivel fora da funo sem utilizar a instruo global. Voc pode usar o valor de variveis definidas fora da funo (considerando que no existem variveis com o mesmo nome dentro da funo). Porm isto desencorajado e deve ser evitado uma vez que torna-se difcil para o leitor saber onde a definio da varivel est. Usar a instruo global torna claro que a varivel foi definida fora da funo. Usando variveis globais.

5.4.

Retornando um Valor
Nos exemplos acima, as funes no retornam valor algum, apenas exibindo

informao. Para retornar um valor, basta usar a expresso return dentro da funo. A primeira pergunta conceitual aqui seria retornar para quem?'; a resposta direta para quem invocou a funo'. Demonstrando por exemplos, a funo abaixo:

59

5.5.

Recursividade
A recursividade o processo de definio de algo em termos de si mesmo.

Uma funo recursiva se uma declarao no corpo da funo chama a ela mesma. Exemplo: uma rotina recursiva R pode ser expressa como uma composio formada por um conjunto de comandos C e uma chamada (recursiva) rotina R:

Na recursividade, uma funo deve estar apta a chamar a si prpria.

5.6.

Exerccios

60

1) Dado o mdulo a seguir, determinar o valor impresso para cada uma das chamadas: def equacao(a): x=pow(a,2)+(5*a)+3 print x a) equacao (2); resposta: 17 b) equacao( (4 * 4) - 14 + (8/4)); resposta: 39 c) equacao(3 * 2 - 1); resposta: 53 d) equacao(6 * (5/3) - 9); resposta: -3 2) Dado o mdulo a seguir, determine o valor impresso para cada uma das chamadas: def equacao(a,b,c): x=0 if a+2 > b-3: x=c*2 if c/4 < b*3: x=x+5 print x a) equacao (3,4,5); resposta: 15 b) equacao ( 8 3 * 2, -5 + 12/2, 2); resposta: 09 c) equacao (3, 2, 1); resposta: 07 3) Construa um algoritmo que calcule o quociente e o resto da diviso entre dois nmeros inteiros. def divisao(num1,num2): quociente=num1/num2 print quociente resto=num1%num2 print resto num1=input("Digite um numero:") num2=input("Digite um numero:") divisao(num1,num2) 4) Construa um algoritmo capaz de obter a raiz quadrada inteira de um nmero qualquer. def raiz(num1): valor=pow(num1,0.5) print valor num1=input("Digite um numero:") raiz(num1) 5)Escreva um programa em Python que leia do teclado um valor inteiro e armazene este valor em uma varivel. Este valor dever ser passado como parmetro para um mdulo denominado Quadrado. Este mdulo imprime na tela o quadrado do valor passado como parmetro. def quadrado(num1): result=num1*num1 print 'O quadrado:',result

61

num1=input("Digite um numero:") quadrado(num1) print 'O numero digitado foi:',num1 6) Indique a sada impressa do algoritmo abaixo: def troca(x,y): aux=x x=y x=aux print x print y a=5 b=3 troca(a,b) a=b b=a troca(a,b) a=a + b b=5 + 2 troca(a,b) a=a - 1 b=b - 4 troca(a,b) Resposta: 5,3,3,3,6,7,5,3 7) Construa um algoritmo que leia trs nmeros inteiros A, B, C e que, utilizando uma funo, imprima esses trs nmeros em ordem crescente. def cres(a,b,c): if a > b: troca=a a=b b=troca if b > c: troca=b b=c c=troca if a > b: troca=a a=b b=troca print a,b,c a=input ("Digite o primeiro numero:") b=input ("Digite o segundo numero:") c=input ("Digite o terceiro numero:") cres(a,b,c) 8) Fazer um programa para ler um nmero inteiro e chamar uma funo que mostra se o nmero lido positivo, negativo ou zero.

62

def verifica(x): if x == 0: print 'Zero' elif x < 0: print 'Negativo' else: print 'Positivo' num=input( ' Digite um nmero inteiro: ' ) verifica(num) 9) Fazer um programa para ler um nmero (N) e chamar uma funo que mostra o somatrio de 1 at N. Garantir que o nmero seja positivo. def somatorio ( x ): soma=0 cont= 1 decompoe= x + 1 while cont <= x: decompoe= decompoe - 1 soma= soma + decompoe cont= cont + 1 print'O somatrio:',soma num=input ( ' Digite um nmero inteiro: ' ) somatorio ( num ) 10) Criar um programa para ler um nmero e chamar uma funo que mostra sua tabuada. Observao comea em 1 e termina em 10. def tabuada(base): cont=1 while cont <=10: tabuada= base*cont print tabuada cont= cont + 1 num=input('Digite um nmero entre [1 - 10]:') tabuada(num) 11) Fazer um programa que leia dois nmeros inteiros e chame uma funo para retorna a diviso do primeiro nmero pelo segundo nmero. def divisao ( x,y ): res = x / y print res dividendo=input(' Digite o dividendo: ') divisor=input(' Digite o divisor: ') divisao ( dividendo, divisor ) 12) Fazer um programa para ler um nmero e chamar uma funo que retorna o cubo do nmero. def cubo ( x ): res = pow(x,3) print res num=input('Digite um nmero: ') cubo (num)

63

13) Desenvolver um programa para ler dois nmeros e chamar uma funo que retorna a potncia do 1 nmero elevado ao 2 nmero.Por exemplo, se forem informados os valores 2 e 3 a subrotina dever ser retornado o valor 8. def quad ( x,y ): res = pow(x,y) print res num1=input('Digite um nmero: ') num2=input('Digite um nmero: ') quad (num1,num2) 14) Escrever um programa que, utilizando de funes, leia um valor e retorne se mltiplo de 5 ou no retorno string; def multcinco ( y ): if(y % 5 == 0): res = '' else: res = 'no' print res num1=input('Digite um nmero: ') print multcinco (num1) 15) Criar um programa para ler dois nmeros e chamar uma funo que retorna se os valores recebidos so iguais ou diferentes. def confere ( x,y ): if x <= 0: res = 'O primeiro nmero digitado negativo' elif x == y: res= 'Os nmeros so iguais' else: res= 'Os nmeros no so iguais' print res num1=input('Digite um nmero: ') num2=input('Digite um nmero:') confere (num1,num2) 16) Criar um programa para ler duas notas e chame uma funo que retorna a mdia das notas lidas. def Media (Nota1, Nota2): Media = (Nota1 + Nota2) / 2.0 print Media num1=input('Entre com 1 nota:') num2=input('Entre com a 2 nota:') Media (num1,num2) 17) Escreva uma funo chamada troca que receba duas variveis inteiras, e troque o contedo entre elas.

64

def troca ( x,y ): trocas= x x= y y= trocas print x,y num1=input('Digite um nmero: ') num2=input('Digite um nmero:') troca (num1,num2) 18) Faa um algoritmo utilizando recursividade que calcula o fatorial de um nmero. def fatorial(num): if num <=2: return num else: return num*fatorial(num-1) num=input('Digite um numero:') print fatorial(num) 19) Faa um algoritmo utilizando recursividade que l um nmero e apresente seu somatrio.
def soma(num): if num > 1: return num + soma(num-1) else: return num num=input('Digite um numero:') print soma(num)

6. Arquivos
Durante a execuo de um programa, seus dados ficam na memria. Quando o programa termina, ou o computador desligado, os dados na memria desaparecem. Para armazenar os dados permanentemente, voc tem que coloclos em um

arquivo. Arquivos usualmente so guardados em um disco rgido (HD),

num disquete o, em um CD-ROM,etc. Quando existe um nmero muito grande de arquivos, eles muitas vezes so organizados dentro de um nome de diretrio. A principal vantagem na utilizao de um arquivo est no fato que as informaes podem ser utilizadas a qualquer momento. Outra vantagem encontrada na utilizao de arquivos o fato de poder armazenar um nmero maior de informaes do que as de memria, estando apenas limitado ao tamanho do meio fsico para sua gravao.

diretrios (tambm chamados de pastas). Cada arquivo

identificado por um nome nico, ou uma combinao de um nome de arquivo com

65

Trabalhar com arquivos muito parecido com trabalhar com livros. Para utilizar um livro, voc tem que abr-lo. Quando voc termina, voc tem que fech-lo. Enquanto o livro estiver aberto, voc pode tanto l-lo quanto escrever nele. Em qualquer caso, voc sabe onde voc est situado no livro. Na maioria das vezes, voc l o livro inteiro em sua ordem natural, mas voc tambm pode saltar atravs de alguns trechos. Tudo isso se aplica do mesmo modo a arquivos.

6.1 Manipulando Arquivos


Para trabalhar com arquivos em Python, necessrio primeiro "abrir" o arquivo, "ler" ou "escrever" nele e finalmente "fecha-l". A ordem descrita anteriormente deve ser seguida. A funo open permite criar novos arquivos, abrir arquivos existentes, como leitura ou escrita. E possui a seguinte sintaxe: varivel = open("file", "modo") Onde:

varivel = Nome da varivel que voc que vai receber o contedo da funo open ( receber o arquivo propriamente dito ). file = Nome do arquivo que voc quer ler ou escrever. modo = Existem trs tipos bsicos de modos: 'w', 'r', 'a'. Write ('w') usado para escrever algo no arquivo, apagando o que j havia nele, e caso o arquivo ainda no exista, ele ser criado. Mas e se eu quiser apenas adicionar um texto sem apagar o que j tinha la? Ai estamos falando no modo 'a' (append, pra quem conhece os mtodos de listas isso deve ser familiar), agora todo o texto escrito ser adicionado no final do que tinha anteriormente (lembrando que o texto inserido no formato string, no tem nada a ver com listas), nesse caso, se o arquivo tambm no existir ele ser criado sem problemas. E como era de se esperar, 'r' usado para ler um arquivo j existente. Abrir um arquivo cria um objeto arquivo. Neste exemplo, a varivel f se

referencia ao novo objeto arquivo.

66

A funo open recebe dois argumentos. O primeiro o nome do arquivo, e o segundo o modo. Onde w significa que estamos abrindo o arquivo para gravao (write - escrever). Se no existir nenhum arquivo de nome teste.dat, ele ser criado. Se j existir um, ele ser substitudo pelo arquivo que estamos gravando escrevendo). Quando executamos um comando print sobre o objeto arquivo, visualizamos o nome do arquivo, o modo e a localizao do objeto na memria. Para colocar dados dentro do arquivo, invocamos o mtodo write do objeto arquivo: (ou

Fechar o arquivo diz ao sistema que terminamos de escrever (gravar) e que o arquivo est livre para ser lido: >>> f.close() Agora podemos abrir o arquivo de novo, desta vez para leitura, e ler o seu contedo para uma string. Desta vez, o argumento modo r(o mtodo read l dados do arquivo) para leitura:

6.2 Diretrios
Quando voc cria um novo arquivo abrindo-o e escrevendo nele, o novo arquivo fica no diretrio corrente (seja l onde for que voc esteja quando rodar o programa). Do mesmo modo, quando voc abre um arquivo para leitura, Python procura por ele no diretrio corrente. Se voc quiser abrir um arquivo que esteja em algum outro lugar, voc tem que especificar o caminho (path) para o arquivo, o qual o nome do diretrio onde o arquivo est localizado: varivel = open("caminho/file", "modo")

Exemplo:

67

Este exemplo abre um arquivo chamado teste que reside no diretrio c:/temp. Um ponto importante a ser visto que a extenso do arquivo .dat, ou seja, caso tente abrir este arquivo sem utilizar um algoritmo no possvel. Isso garante segurana aos dados, porm sempre que for necessrio ver os dados do arquivo necessrio ter um algoritmo para abrir o mesmo. Exemplo 1: crie um arquivo chamado aula.dat no diretrio c:/temp e inserira algumas informaes ao mesmo.

6.3 Arquivos Textos


Um arquivo texto um arquivo que contm caracteres imprimveis e espaos, organizados dentro de linhas separadas por caracteres de nova linha. J que Pyhton especialmente projetado para processar arquivos texto, ele oferece mtodos que tornam esta tarefa mais fcil. Exemplo:

Este exemplo abre um arquivo chamado teste que reside no diretrio c:/temp. Um ponto importante a ser visto que agora a extenso do arquivo .txt, ou seja, caso tente abrir este arquivo sem utilizar um algoritmo agora possvel. Isso

68

garante menos segurana aos dados, porm sempre que for necessrio ver os dados do arquivo no necessrio ter um algoritmo para abrir o mesmo. Agora vamos adicionar mais alguma coisa no nosso arquivo, para isso usamos o modo a - append, para adicionar sem apagar o que j havia no arquivo, e o \n, usado para pular uma linha:

Se quisermos colocar outros valores em um arquivo, temos de convert-los para strings primeiro. A maneira mais fcil de fazer isso com a funo str:

6.4 Exerccios
1-Escrever um comando que crie, abra um arquivo chamado SI, e coloque algumas informaes no mesmo e no final feche-o. >>> abra = open("c:/temp/si","w") >>> abra.write("Disciplina:Laboratrio de Linguagem de Programao.") >>> abra.close() 2-Fazer um programa que de autonomia para o usurio digitar quantos nomes ele desejar, utilize uma flag de parada (Exemplo: quando a pessoa digitar a letra n) grave os dados em um arquivo e depois mostre os dados gravados. cad = open("c:/temp/cadastro.txt","w") cad.close() resp='s' while resp =='s': nome = raw_input("Informe um nome:") cad = open("c:/temp/cadastro.txt","a") cad.write(nome) cad.write("\n")

69

resp = raw_input('Deseja continuar?(s/n):') cad.close() cad = open("c:/temp/cadastro.txt","r") cadastro = cad.read() print cadastro cad.close() 3-Fazer um programa que grave em um arquivo os 20 primeiros nmeros pares e depois mostre os dados gravados. pares = open("c:/temp/par.txt","w") par=0 for i in range(20): pares.write(str(par)) pares.write("\n") par=par+2 pares.close() pares = open("c:/temp/par.txt","r") numeros = pares.read() print numeros pares.close() 4-Escreva um algoritmo que faa a leitura das notas dos alunos de uma disciplina e armazene-as num arquivo. Considere que h uma nota para cada aluno e que h 10 alunos cursando a disciplina. Em seguida, mostre todas as notas. notas = open("c:/temp/nota.txt","w") for i in range(10): nota=input('Digite uma nota:') notas.write(str(nota)) notas.write("\n") notas.close() notas = open("c:/temp/nota.txt","r") todasnotas = notas.read() print todasnotas notas.close() 5- Escreva um algoritmo que faa a leitura das notas dos alunos de uma disciplina e armazene-as num arquivo. Considere que h uma nota para cada aluno e que h 10 alunos cursando a disciplina. Em seguida, mostre apenas as notas acima de 7.5. vetnotas=[] notas = open("c:/temp/nota.txt","w")

70

for nota in range(10): nota=input('Digite uma nota:') vetnotas.append(nota) notas.write(str(vetnotas)) notas.close() notas = open("c:/temp/nota.txt","r") for cont in range(10): if vetnotas[cont]>7.5: print vetnotas[cont] notas.close()

71