Sie sind auf Seite 1von 159

Fundamentos da computao

com Python

Prefcio

Sobre a apostila
Voltado para alunos iniciantes e intermedirios no curso de
desenvolvimento de algoritmos e na linguagem Python o livro
visa o aprendizado do pensamento algoritmo e sua aplicao em
uma linguagem de fcil aprendizado. Durante o decorrer do livro
sero apresentados diversos conceitos teis no somente para
alunos de cincia da computao, mas tambm para alunos de
engenharia, ou qualquer outro aluno que queira iniciar o
aprendizado em programao .
Como o leitor j deve ter percebido, ao contrrio dos demais
livros, que so extremamente longos este livro tentar ser o mais
breve possvel, para que dessa forma possa auxiliar estudantes
em sala de aula ou em casa.

Capitulo I

Computadores e algoritmos
A construo de programas a questo central para o uso eficaz
dos computadores na soluo de problemas a partir do
desenvolvimento de conjuntos de funes organizadas de
maneira lgica.
As regras para um raciocnio correto j eram conhecidas dos
antigos gregos no sculo IV A.C. com os ensinamentos de
Scrates, Plato e Aristteles a quem coube criar o grupo
conhecido como Lgica Formal, Lgica menor ou Epistemologia
que contm a sistematizao das leis.
A interpretao matemtica dessas regras lgica somente
ocorreu em 1854, com George Boole em seu trabalho Uma
investigao das leis do pensamento. Este conjunto de
conhecimentos hoje chamado de lgebra Booleana compondose de Lgica Simblica e Lgica Matemtica. Quase um sculo
mais tarde, em 1937, Claude Elwood Shannon publicou o
trabalho Uma anlise simblica de circuitos de comutao e
rels mostrando que a Lgica Simblica de Boole descrevia os
circuitos lgicos como a base para o projeto dos computadores.

1.1 A obteno da Informao


A informao tem sua origem na realidade que nos cerca. A partir
desta realidade pode-se realizar uma abstrao gerando o
conhecimento.
3

O conhecimento de um objeto existente no mundo real


constitudo por um conceito que reflete seu tipo e um termo. O
termo o que nos permite comunicar a ideia e processamento de
dados denominado valor.
Um termo ou valor pode ter vrias representaes, conforme
mostra a figura 1 a seguir:
4

IV

QUATRO
CONCEITO

TERMO
quatro
REPRESENTAO
Figura 1 Representaes

A informao, conceito ou termo existe no mundo lgico


enquanto o que denominam dados existe no mundo fsico. A
partir da representao a informao poder ser obtida por uma
operao de interpretao.
Pode-se perceber que existem dois grandes grupos de
informaes: o primeiro trata de informao estruturada como,
por exemplo, os dados pessoais de um grupo de pessoas ou
mesmo uma pesquisa no Google; o segundo grupo trata de
informaes no estruturadas como, por exemplo, a Web
Semntica que trata da integrao de recursos computacionais e
humanos para ajudar na descoberta e no uso dos recursos da
web.
Neste livro iremos utilizar informaes estruturadas.
Inicialmente deve-se distinguir a informao inicial da
informao estruturada.
4

Para que uma informao seja processada necessrio um


processo prvio de entendimento e modelagem do problema cuja
sequncia de operaes pode ser observada na figura

Realidade

Informao
Inicial

Modelo

Abstrao

Informao
estruturada

Figura 2 Etapas da Modelagem das informaes

1.2 Programas Tradutores


1.2.1 Interpretadores
Interpretadores so tipos de tradutores que traduzem um cdigo
fonte e o executam linha a linha.
Vantagens: Depurao do programa mais simples, consome
menos memria, resultado imediato na rotina desenvolvida.
Desvantagens: Execuo do programa mais lenta, estruturas de
dados so simples, necessrio fornecer o programa fonte ao
utilizador.
1.2.2 Compiladores
um tipo de tradutor que converte o cdigo reconhecido pela
linguagem para a linguagem de mquina, aquela que o
computador pode entender.
Vantagens: Execuo rpida, permite estruturas de programao
mais completas, permite otimizao do cdigo fonte

Desvantagens: Vrias etapas de traduo, maior consumo de


memria, processo de correo de erros e depurao mais
demorado.
1.2.3 Erros
Os erros em Python podem lxicos ou sintticos.
Erros Lxicos: Os erros lxicos caracterizam-se por uma
escrita errada ou simplesmente no reconhecida pela
linguagem adotada.
O alfabeto utilizado para escrever os comandos composto
pela tabela ASCII (American Standard Code for Information
Interchange). O Python a partir da verso 2.x passou a
suportar os caracteres do UNICODE.
O UNICODE uma evoluo do padro ASCII que permite aos
computadores representar e manipular, de forma consistente,
os caracteres de qualquer sistema de escrita existente.
Erros sintticos: Os erros sintticos caracterizam-se pela a
utilizao errada ou desconhecida de um ou mais conjuntos
de vocbulos.

Erros semnticos: Refere-se a operaes que fazem sentido


para o tradutor, mas no para o usurio.

1.3 Funcionamento da linguagem


Em resumo s diversas etapas que ocorrem durante o processo
de compilao, que ocorre quase que de forma oculta ao
programador, e execuo do cdigo podemos citar algumas
etapas chave:
Compilao do cdigo fonte em cdigo de byte: Nessa etapa o
cdigo fonte, contedo do programa, transformado em um
cdigo em linguagem de mquina e alocado em um local
seguro no seu computador. Esses arquivos permanecero
salvos a fim de agilizar o processo de compilao (o prprio
Python verifica se as datas de alterao do cdigo fonte e do
cdigo de bytes para saber se dever ou no recompilar).
Interpretao do cdigo de bytes: Uma vez que o cdigo de
bytes tenha sido gerado, ele poder ser interpretado etapa a
etapa.
O esquema abaixo mostra de forma resumida os processos
realizados pela linguagem:
Nucleo do Python

Ambiente em tempo de execuo

Grupo de arquivos
Alanisador Lexico
(Scanner)

Estruturas de
objetos/tipos

Modulos do
usurio
Analisador Sintatico
(Parser)

Modulos do
Nucleo
Compilador

Bibliotecas

Alocador de
memoria

Avaliador de
Codigo

Estado atual

Arquitetura de intepretao Python

O diagrama acima foi elaborado por Bastos,E e Freitas Juliano


Interpretador/Compilador Python e apresenta a arquitetura do
Python que pode ser classicada em quatro componentes
principais. O diagrama acima representa a interpretao da
arquitetura do nvel mais elevado do sistema Python.
No lado esquerdo, sao agrupados mdulos do ncleo Python, de
bibliotecas e modulos denidos pelos usuarios. A biblioteca e os
mdulos denidos pelos usuarios podem estender o sistema
Python desde que seja mantida a portabilidade.
No centro do diagrama esta ilustrado o nucleo do interpretador
Python. As setas dentro da caixa do interpretador indicam uxo
de dados. As setas bidirecionais entre Analisador Sinttico - Tipo
de objeto e Compilador Alocador - Memoria indicam o
relacionamento utiliza. A seta unidirecional entre Avaliador de
Cdigo - Estado atual do Python indica o relacionamento
modica. As variaes da espessura das linhas servem para
melhorar a legibilidade, e nao tem nenhum signicado conceitual.
Ao lado direito e mostrado o estado atual do Python, alocador de
memria e a estrutura de objetos e tipos, que constituem o
ambiente em tempo de execuo. O estado atual do Python
refere-se ao estado de execuo do interpretador, visto como
uma mquina de estado nito muito grande, complexa, e
modicvel. O alocador de memria responsvel por alocar a
memria para objetos de Python (externo e interno) e conectado
com as rotinas padro malloc do C. As estruturas de objetos e
tipos representam os objetos internos que estao disponveis em
Python

1.4 Sobre o Python


A linguagem Python foi concebida no final de 1989, por Guido
van Rossum, contudo seu cdigo s foi publicado em 1991,
8

influenciada pela linguagem ABC, que visava o aprendizado e


competia com as linguagens Basic e AWK, possuindo a vantagem
de escrever bem menos em comparao a essas linguagens.
Assim surgiu a ideia da criao de uma linguagem que englobasse
os elementos bem sucedidos na linguagem ABC, que eliminasse a
declarao de variveis e que usasse a indentao para delimitar
seus blocos baseando-se no ALGOL.
O Python uma linguagem interpretada licenciada como
Software Livre e com uma vasta biblioteca de mdulos
igualmente livres e sem restries para sua distribuio. A
natureza flexvel da linguagem de programao Python suporta
diversas filosofias de programao, incluindo programao
procedural, orientada a objetos e funcional.

1.5 Caractersticas da linguagem

Conceitos fundamentais fceis de compreender


Programas so mais curtos de escrever
Sintaxe clara e concisa, favorecendo o entendimento.
Presena de estruturas de alto nvel.
Diversos mdulos j inclusos.
Possibilidade de download de bibliotecas de terceiros.
Suporte a programao modular, funcional e orientao a
objeto.
Para Python tudo objeto.
Apesar de ser considerada linguagem interpretada, em
Python existe a possibilidade de compilar seu cdigo.
Python livre.
Pode ser executado em qualquer plataforma.
Python case sensitive, ou seja, ele faz diferenciao entre
letras maisculas e minsculas.
No to eficiente como algumas linguagens compiladas.
9

Possibilidade de integrar Python com outras linguagens.


Possui tipagem dinmica, ou seja, os tipos das variveis so
definidos pelo interpretador, sem a necessidade do
programador definir seu tipo previamente.
A tipagem forte, isso significa que a linguagem no converte
tipos automaticamente, como ocorre em algumas linguagens,
por esse motivo ao realizar as operaes deve ser claro o tipo
da varivel que est usando.

1.6 Quem usa Python


Nasa, Google, Universidade de Maryland, Embratel, CPqD,
Conectiva, Async, Sempro, Apple (MAC OS X), Microsoft (.NET) ,
Disney, Nokia, Atari, Yahoo!, Philips, Blender 3D, PostgreSQL,
Inkscape entre outros.

1.7 Instalao e inicializao do Python no Windows


Faa o download do arquivo de instalao do Python na pgina da
Internet: http://www.Python.org/download/e selecione a opo
para download do Python 2.7.3

10

Execute este arquivo dando um duplo clique com o boto


esquerdo do mouse sobre ele e proceda com a instalao
normalmente.
Ao final do processo tero sido instalados os seguintes
componentes em seu computador:
IDLE (Python GUI) Ambiente de Desenvolvimento Integrado
disponibilizado junto com o Python e que ser utilizado neste
livro;
Module Docs Documentao dos Mdulos do Python;
Python (Command Line)- Interpretador usando Linhas de
Comando
Python Manuals Manuais do Python em Ingls;
Uninstall Python Desinstalador da Linguagem

11

1.8 O Modo Interativo (IDLE)


Embora possamos selecionar vrias interfaces grficas (GUI) para
usarmos com o Python neste texto usaremos a IDLE por ser de
fcil uso e aprendizado.
Para us-la siga os seguintes passos:

a) Selecione
b) A tela do Shell do Python para processamento interativo
mostrada a seguir:

Neste mdulo os comandos digitados seguidos de [ENTER] sero


executados imediatamente possibilitando que o Python possa ser
usado como uma calculadora.
1.8.1 Alguns exemplos no Modo Interativo

Lembre-se que o Python usa o ponto para separar a parte inteira


de um numero da parte fracionria.

12

1.9 Modo Programado


Para usar o Python no modo programado, inicie uma nova janela.

Neste modo os comandos sero


1) Digitados;
2) Salvos Ateno No se esquea de colocar a extenso py no
seu arquivo. O Python NO faz isto automaticamente;
3) Executar o programa pressionando F5 ou selecionando

Apesar de no ser exatamente necessrio, uma vez que o Python


possui seu prprio editor de texto, pode-se utilizar qualquer

13

editor de texto puro para escrever o cdigo, como por exemplo o


Bloco de Notas do Windows ou o vi do Linux.

1.10 Ajuda (Help Modules)


O Python possui diversos mdulos de ajuda que podem ser
acessados, contendo uma breve descrio e comandos
relacionados aquilo que foi pedido.
Para acessar um help module deve-se digitar na IDLE help
(argumento).

14

Capitulo II

Algoritmos
Algoritmo um conjunto finito de passos, que seguem regras
bem definidas, e tem como finalidade a soluo de um problema
em um espao de tempo finito.
Ainda que o termo tenha sido popularizado com a informtica,
algoritmos podem se referir a passos de qualquer tipo de tarefa,
dessa forma est correto falar algoritmo de preparao de um
bolo, referindo-se a uma receita.

2.1 Caractersticas de um algoritmo

Integridade: refere-se preciso das informaes


manipuladas pelo programa;
Clareza: refere-se facilidade de leitura do programa;
Simplicidade: a clareza e preciso de um programa so
normalmente melhoradas tornando seu entendimento o mais
simples possvel, consistente com os objetivos do programa;
Eficincia: refere-se velocidade de processamento e a
correta utilizao da memria;
Modularidade: consiste na diviso do programa em mdulos
menores bem identificveis e com funes especficas;
Generalidade: interessante que um programa seja to
genrico quanto possvel de forma a permitir a reutilizao de
seus componentes em outros projetos.
15

2.2 Tipos de algoritmo


2.2.1 Descrio narrativa
Consiste em descrever, de forma narrativa cada um dos passos
necessrios para a resoluo de um problema.
Exemplo: Manuais, Receitas de bolo em livros de culinria.
2.2.2 Diagrama de Chapin
Esse tipo de representao de um algoritmo visa estruturao
hierrquica da lgica de soluo de um problema. A vantagem na
utilizao desse tipo de representao a vantagem na
localizao dos pontos de diviso. Observe o exemplo abaixo:

2.2.3 Pseudocdigo
Este ser o modelo que este livro tomar para a resoluo de
algoritmos. Essa forma de representar a resoluo de problemas
simula a soluo do problema por uma linguagem computacional.

16

Apesar de no existirem regras rgidas para a codificao dos


algoritmos, adotam-se modelos que de uma forma geral seguem a
um padro.
Observe a seguir um exemplo de um pseudocdigo:
Inicio

Fim

Ler A,B
c=(A+B)/2
Se c>=7 ento
Escrever aprovado
Se no
Escrever reprovado
fim se

2.3 O Fluxograma versus pseudo-cdigo


O pseudocdigo uma linguagem de descrio de algoritmos e
no pode ser executada diretamente pelo computador. Apesar
dessa desvantagem, o pseudocdigo permite ao programador
concentrar-se na lgica e nas estruturas de controle, sem ter que
se preocupar com as regras de uma linguagem especfica. O
objetivo do fluxograma o mesmo diferindo por ser usada uma
representao grfica, sendo mais trabalhosa de ser elaborada.

2.4 Comandos
2.4.1 =
O smbolo = (igual) em geral na computao um sentido de
atribua, totalmente diferente da matemtica. Uma operao
a=b+c, para ns significaria pegue contedo de b e aplique a
17

operao soma com o contedo de c, o resultado da operao


atribua em a.
2.4.2 Leia
Significa receber o que o usurio do programa envia.
Normalmente um valor lido armazenado em alguma varivel.
2.4.3 Escreva
Significa exibir o contedo de uma varivel. No destri o valor
exibido. Pode-se exibir uma mensagem colocando entre aspas.
Escrever resposta

2.5 Operadores matemticos


+ soma
- subtrao
* multiplicao
/ diviso
% resto inteiro da diviso
// diviso inteira

2.6 Operadores lgicos e/ou/no


Comumente pessoas no acostumadas com lgica matemtica
utilizam de forma errnea operadores lgicos. Segue abaixo a
tabela verdade:

18

C1

C2

C1 e C2

C1 ou C2

No C1

V
F
F
V

V
V
F
F

V
F
F
F

V
V
V
F

F
V
V
F

Nessa tabela C1 e C2 so condies a serem testadas, V equivale a


verdadeiro e F a falso.

2.7 Operadores comparativos


Todos os operadores comparativos funcionam da mesma forma
que rege a lgica, caso tenha dvidas consulte o proximo captulo.
> (maior), < (menor), >= (maior ou igual), <= (menor ou igual), !=
(diferente)

2.8 Estrutura de deciso


As estruturas de deciso (ou tambm conhecidas como desvios)
so usadas quando queremos mudar o fluxo do programa, ou
seja, quando queremos que uma ou mais instrues sejam
executas ou no dependendo de uma condio.

Deciso simples: Quando existe apenas uma ao a ser


executada se a condio for verdadeira;
Deciso composta: Quando existem duas aes a serem
executadas se a condio for verdadeira ou se for falsa;

19

2.8.1 Representao de uma estrutura de deciso


Simples
Se condio ento
Passos a serem executados
Fim se
Composta
Se condio ento
Passos a serem executados
Se no
Passos a serem executados
Fim se

2.9 Estruturas de repetio


As estruturas de repetio so usadas quando queremos que um
grupo de comandos seja executado mais de uma vez. As
estruturas de repetio podem ser determinadas, quando
sabemos a quantidades de vezes queremos repetir o cdigo
(estrutura para), e indeterminadas, quando sabemos apenas que
o cdigo deve repetir at atingir uma determinada condio
(estrutura enquanto).
2.9.1Representao da estrutura para faa
Para varivel=incio at fim
Passos a serem executados
Fim para

20

2.9.2 Funcionamento da estrutura para faa

A varivel inicializada com o valor do incio;


O grupo de instrues executado;
Ao chegar ao comando fim para a varivel tem seu valor
acrescido de 1(um) e verifica se o seu valor maior que
fim
Se for menor ou igual, repete o conjunto de instrues

2.9.3 Representao da estrutura Enquanto faa


Enquanto condio faa
Grupo de instrues que ser repetido
Fim enquanto
2.9.4 Funcionamento da esturutura Enquanto faa
Enquanto a condio for verdadeira o grupo de instrues
repetido. Desse modo, se inicialmente a condio for falsa o
grupo de instrues no ser executado nenhuma vez.

2.9 Resumo
A seguir apresentada tabela com os principais tipos de
raciocnio.

21

Bloco Lgico
Fluxograma

Tipo de
bloco

Sequencia

Exemplo de pseudocdigo
Ler c1
Ler c2
c3=c1+c2
Imprimir c3

C1

C2

C3

Deciso simples

Sequencia simples

Tipo de
raciocnio

Ler c1
Ler c2
Se c1> 0 e c2>0 ento
c1=c2-2
Fim se

F
compara
V

Deciso composta

Deciso

Comando 1

C1

compara

Ler a
Se a>0 entao
x=x+1
Se no
x=x-1
Fim se

C2

22

Para faa
Enquanto faa

Repetio ou interao

Condio

Para k=1 ate 5 faa


Ler x
Soma=soma+3
Fim para

Comando

Enquanto s<10 faa


Ler x
soma=soma+x
s=s+1
Fim enquanto

condio
V
F

2.10 Exerccios de fixao


1) Elabore um algoritmo para determinar a soma de 2 valores
lidos;
Algoritmo
Inicio
Ler A
Ler B
C =A+B
Imprimir C
Fim
2) Escrever um algoritmo que leia dois valores e imprima seu
produto.
Algoritmo
23

Inicio
Ler a
Ler b
Imprimir a*b

Fim
3) Escrever um algoritmo que escreva a tabuada de 1 a 10 de um
nmero inserido
Algoritmo
Inicio
Ler a
Para i=1 a 10 faa
a=a*i
imprimir a
fim para
Fim
4) Escrever um algoritmo que calcule o fatorial de um nmero.
Algoritmo
Inicio
Ler n
Para i=1 at n faa
n=n*i
fim para
Fim
5) O termo swap indica a troca de valor entre duas variveis.
Escreva um algoritmo para a tcnica swap entre duas variveis.
Algoritmo
Inicio
Ler a
Ler b
c=a
a=b
b=c
24

Fim
6) Escreva um algoritmo que gere dias a seguinte sada.
1: Domingo 2: segunda-feira 3: tera-feira 4: quarta-feira
5:quinta-feira 6:sexta-feira 7: sbado
Inicio
Escreva i + : domingo
Escreva i + : segunda-feira
Escreva i + :tera-feira
Escreva i + :quarta-feira
Escreva i+ quinta-feira
Escreva i + sexta feita
Escreva i + sbado
Escreva i + domingo

Fim
7)Faa um algoritmo para ler um nmero e imprimir se ele
igual a 5, 200 ou 400. Se no verificar se o mesmo est no
intervalo entre 500 e 1000 inclusive , ou se est fora do escopo
especificado.
Inicio
Ler a
Se (a=5) ou (a=200) ou (a=400) ento
Imprimir igual a , a
Se no
Se (a>500) e (a<1000)
Imprimir dentro do intervalo verificado
Se no
Imprimir Fora do escopo
Fim se
25

Fim se
Fim
8) Escreva um algoritmo que faa a combinao sem repetio de
dois nmeros dados por input.
Inicio
Ler a
Ler b
Fat1=1
Para i=1 at a faa
Fat1=Fat1*a
Fim Para
Fat2=1
Para i=1 at (a-b) faa
fat2=fat2*i
fim para
fat3=1
Para i=1 at b faa
fat3=fat3*i
Fim para
Se a>b ento
imprima fat1/(fat2*fat3)
se no
se a=b
26

imprima 1
se no
imprima fat3/(fat2*fat1)
fim se
fim se
Fim
9) Escreva um algoritmo que leia trs valores para A, B e C
respectivamente. O programa devera imprimir qual das trs
letras tem o maior valor. Ou os valores se forem iguais.
Algoritmo
Inicio
Ler a
Ler b
Ler c
Se a>=b ento
Se a>c ento
Imprimir a
Fim se
Se a=b ento
Imprimir a e b
Fim se
Se a=c ento
Imprimir a e c
Se no
Imprimir c
Fim se
Se no
Se b>c ento
Imprimir b
27

Fim se
Se b=c ento
Imprimir b e c
Se no
Imprimir c
Fim se

Fim se
Fim
10) O sistema de avaliao de uma determinada matria dada
da seguinte maneira:
prova1+prova2>=7 aluno aprovado
prova1+prova2<3 aluno reprovado
prova1+prova2>=3 e prova1+prova2<7 recuperao
Escreva um algoritmo que leia 5 valores de prova1 e prova2 e
imprima o status do aluno
Inicio
Para k=1 a 5 faa
Leia p1
Leia p2
Se (p1+p2)/2.0 <3 ento
Imprima aluno reprovado
Fim se
Se (p1+p2)/2.0>=7 ento
Imprima aluno reprovado
Se no
Imprima prova final
Fim se
Fim para
Fim
11) Qual seria o ttulo do problema que teria como resultado o
seguinte algoritmo:
Algoritmo
28

Inicio
a=0
Enquanto a<100 faa
Se (a<48) ou a>=73 ento
a=a+3
Imprimir a
Se no
a=a+5
Imprimir a
Fim se
Fim enquanto

Fim
Elabore um algoritmo que imprima todos os nmeros de 1 a 100
mltiplos de 3 se eles forem menores que 50, de 5 em 5 para
valores maiores ou iguais a 50 e menores que 75, e novamente de
3 em 3 para valores maiores ou iguais a 75.
12) Supondo que a populao mundial seja estimada em 90
bilhes com uma taxa de crescimento anual de 1%, escreva um
programa que calcule a quantidade estimada de habitantes no
decorrer de 10 anos.
Inicio
a=9.0
Para i=1 at 10 faa
a+=a/100
Imprima Estima-se,a,bilhes de habitantes
Fim

29

Capitulo III

Primeiros passos
Os objetos so a abstrao do Python para todas as estruturas de
dados. Todo programa em Python composto por objetos ou por
relao entre objetos.
Todo objeto tem:
Uma identidade atribuda em sua criao;
Um tipo que estabelece o conjunto de operaes associados;
Um conjunto de valores que podem ser:
o Imutveis: Apontam diretamente para o valor da
memria, o que significa que quando um objeto
criado, seu valor no pode ser alterado. Em vez disso,
um novo objeto criado e designado varivel;
o Mutveis: Apontam para um identificador ou para um
valor direto na memria. Esses tipos sero mais bem
explicados mais adiante.

3.1 Identificadores
Identificadores so nomes atribudos a objetos ou a rotinas a fim
de facilitar o entendimento e sua chamada durante a escrita do
cdigo, podendo ou no ser predefinidos pela linguagem padro.
Durante o decorrer do livro trataremos identificadores pelo
nome de variveis.
Ao criar uma varivel deve-se ficar atento s seguintes regras:
30

O Python Case Sensitive isto significa que letras


maisculas so diferentes de minsculas. Dessa forma
podemos criar diversos identificadores com a mesma letra
alternando somente a caixa e todos eles sero tratados como
coisas diferentes;
Podem ter qualquer tamanho;
Podem ter letras e nmeros ou underscore (sublinhado _);
No podem ter espaos em branco ou caracteres especiais,
Ex: ()*&%$#@!+-=/?
Iniciam sempre por uma letra;
No podem ser uma palavra reservada.

3.1.1 Palavras reservadas


and
break
global
while
else
assert
class
def
elif
except

exec
for
raise
import
is
finally
print
if
in
lambda

not
pass
from
try
with
or
continue
return
del
yield

Exemplos de variveis vlidas: Idade, alfa23, ano_de_nascimento,


Nome_do_ Aluno
Exemplos de variveis no vlidas: Ano de nascimento, alfa*15,
r&10

3.2 Comandos de Atribuio


Um comando de atribuio sempre do tipo
31

varivel = expresso.
O smbolo = significa atribua e tem sentido diferente do = (igual)
da matemtica.
Observe o exemplo:

Vale ressaltar que objetos de tipos mutveis, apesar de a primeira


instncia no parecer, seguem esse mesmo princpio. Ser
explicado melhor o funcionamento desse tipo de objeto alguns
captulos frente.

3.3 Linhas
Um programa em Python dividido em linhas lgicas que podem
ser compostas de uma ou mais linhas fsicas. Uma linha lgica no
pode ultrapassar uma linha fsica com exceo de dois casos
especiais Colocando-se \ no final da linha.
Por exemplo:

32

Ou quando ocorre o ajuntamento implcito de linhas dentro de


expresses delimitadas por colchetes, parnteses ou chaves{} []
ou (), como no exemplo abaixo.

3.4 Mltiplas declaraes em uma linha


Podem-se fazer mltiplas declaraes em uma nica linha desde
que separadas por ponto e vrgula. Observe o exemplo:

3.5 Separadores e delimitadores


Um separador um smbolo que separa outros smbolos. O
branco o separador mais utilizado, outros separadores so a
vrgula utilizada em listas, e o ponto usado para separar a parte
inteira da fracionria em um nmero.
As aspas simples e duplas so delimitadores utilizados em literais
e cadeias de caracteres.
Os blocos de comandos so delimitados em Python pela
indentao (recuo, derivado da palavra em ingls indentation,
tambm grafado nas formas identao e endentao)
O nmero de espaos no recuo varivel, mas todas as instrues
dentro do bloco tm de ser recuado na mesma quantidade.
33

Exemplo

3.6 Comentrios
Os comentrios em Python so precedidos do caractere hash #
Por exemplo

3.7 Documentao (Docstring)


Docstrings so tipos especiais de comentrios utilizados para
documentao de programas, funes ou classes. Indica-se um
doctstring dentro de um programa por aspas triplas sendo que
principal diferena entre os docstrings e os comentrios no se
d somente na parte esttica, com esse recurso o usurio pode
acessar todos os textos docstring atravs do modulo help. No se
deve usar caracteres especiais no docstring.

34

Capitulo IV

Tipos de dados e operadores


4.1 Tipos primitivos de dados
Os tipos primitivos: so aqueles j inclusos no ncleo da
linguagem podem ser Simples ou Compostos.
Tipos Simples de Dados
Todos os tipos simples de dados em Python so imutveis e no
total so seis: inteiros (int), inteiros longo (long), reais (float),
complexos (complex), literais (str) e lgicos (bool).

Tipos Compostos de dados


Os tipos compostos de dados so aqueles que so constitudos de
um agrupamento, ordenado ou no, de outros tipos de dados. So
eles: listas (list), dicionrios (dict), tuplas (tupple) e sets (set).
O Python utiliza a Tipagem dinmica que significa que o prprio
programa define os tipos das variveis conforme seu uso sem a
necessidade do programador declarar previamente.
4.1.1 Dados numricos
Os dados numricos so como o nome j mostra os nmeros de
forma geral.

35

Inteiros
Os nmeros inteiros so representados em preciso simples ou
em preciso dupla. Os Inteiros simples utilizam 32 bits para
representar os valores e englobam a faixa de -2147483648 at
2147483647, mas podem ser maiores, dependendo do
processador e do sistema operacional. Os Inteiros longos so
outra classe de inteiros de abrangncia ilimitada, ou limitada
apenas pela memria da mquina.
A converso de um valor para seu representante inteiro feita
atravs do comando: int(x), onde x uma varivel ou um valor.

Float (ou ponto flutuante/reais)


So caracterizados pela existncia do ponto decimal. Os nmeros
reais so representados em preciso dupla com 64 bits. Podem
ser escritos das seguintes formas:
1.5, -47.2 ou 1E3 (onde a letra E significa 10 elevado a).
O exemplo representa o valor 1000.0 e significa 1 vezes 10
elevado a 3. Os valores podem ser inteiros positivos ou negativos.
Por exemplo:

36

A converso de um valor para seu representante real, tambm


chamado de ponto flutuante ou float, feita atravs do comando:
float(x), onde x uma varivel ou um valor.
Por exemplo:

O mtodo x.is_integer() verifica se o x (com x float) um valor


inteiro. Caso seja retorna True, caso contrrio False.

Complexos ou nmeros imaginrios.


So escritos por dois valores reais, a parte real e a parte
imaginria na forma (real +IMAG J). Neste caso o nmero i ( )
designado pela letra j.
Por exemplo: (2+3j)
Para se extrair uma parte de um numero complexo use: a.real ou
a.imag.
Por exemplo:

A converso de um valor para seu representante complexo feita


atravs do comando: complex(x), onde x uma varivel ou um
valor.
37

Por exemplo:

4.1.2 Os dados lgicos (ou booleanos)


Os valores dessa classe se resumem a dois resultados:
False
tudo aquilo quer correspondente ao valor 0 na memria, ou
seja listas, strings, dicionrios vazios ou at mesmo o 0.
True
Tudo aquilo que no for False
Converso para dados lgicos
O comando bool(x) converte um dado para lgico
Por exemplo:

38

4.1.3 O dado vazio


Esse tipo de dado representado pelo valor none e no
representa nada e no aceita operaes comuns.

4.2 Operadores Aritmticos


So escritos linearmente usando a notao matemtica. Os
operadores so:
39

+ Soma

- Subtrao

* Multiplicao

/ Diviso

% Resto da diviso inteira

40

** Exponenciao

// Diviso inteira

O Python calcula 0**0 sendo igual a 1.


Ao efetuar operaes devem-se observar as seguintes regras:
No pode existir nenhuma operao implcita;
Para agrupar as operaes matemticas usa-se
exclusivamente o parntese;
Dois operadores podem aparecer juntos, porm dificulta sua
legibilidade pode-se usar o parntese para separar;
Pode-se atribuir um valor a mais de uma varivel.
Por exemplo:

41

4.2.1 Hierarquia dos operadores:


1 Parntesis
2. Exponenciao
3 *,/,%,//
4 +, Em caso de mesma hierarquia resolve-se da esquerda para a
direita.
Observe o exemplo:

42

4.3 Operaes a nivel de Bit


O Python permite ao programador deslocar bits alocados na
memria. Essa operao se d atravs do operador >> ou <<, para
deslocar os bits a direita e a esquerda, respectivamente.

4.4 Erros de float point


O Python no consegue fazer todos os calculos de forma 100%
precisa, isso se deve ao fato da programao induzir
determinados erros. Note o exemplo abaixo:
Esse erro ocorreu porque a maioria das fraes decimais no
pode ser representada de forma correta em binrio, sendo ento
representada de forma aproximada.

43

4.5 Operaes Lgicas


So expresses cujos operadores so lgicos e cujos operandos
so relaes tendo como resposta um valor booleano (True ou
False).
Os operadores relacionais so:
== Verifica se dois operadores so iguais

!= Verifica se o primeiro operador diferente do segundo

> Verifica se o operando da esquerda maior que o da


direita.

>= Verifica se o operando da esquerda maior ou igual que


o da direita

44

< Verifica se o operando da esquerda menor que o da


direita.

<= Verifica se o operando da esquerda menor ou igual do


que o da direita.

and Retorna True apenas quando os dois operandos


possuam valor True.

or Retorna True caso um dos operandos possuam valor


True.

45

in Verifica a participao como membro de um elemento.

is Verifica se os dois operandos so iguais.

not Inverte o valor lgico de uma condio.

4.6 Exerccios de fixao


1) De acordo com os dados:

Escreva a o tipo de sada de cada uma das execues abaixo:


a)
b)
46

c)
d)
e)
f)
g)
h)
i)
j)
k)
l)
m)

47

n)
o)

2) Escrever um programa Python que calcule o valor absoluto de


um nmero( veja algoritmo abaixo)
Inicio
Ler a
Se a<0 ento
a=-a
fim se
Fim
3) Elabore um programa Python que calcule a soma dos termos
de uma pa. Sendo dados o valor inicial, o passo e o nmero de
termos. (veja algoritmo abaixo)
Inicio
Ler inicial
Ler passo
Ler n
Para i=1 at n faa
Inicial=inicial+passo
Fim para
Fim
4) Faa um programa Python que leia dois nmeros imprima 1 se
os nmeros so iguais e 0 caso seja diferentes. Considere que a
entrada sempre ser numrica.
Inicio
Ler o
Ler p
48

Se o=p ento
Imprimir 1.
Se no
Imprimir 0.
Fim
5) A chamada disjuno exclusiva (XOR) possui a seguinte tabela
verdade:
p
F
F
V
V

q
F
V
F
V

p XOR q
F
V
V
F

Escreva um programa Python que simule o comando lgico XOR.


(p e no q) ou (no p e q)
6) Escreva um algoritmo para calcular o valor de atravs da
srie
O algoritmo receber como entrada x e o nmero de termos da
srie.
Inicio
Ler x
Ler n
Total=1 + x
Fat=1
Se x=0 ento
Imprimir 1
Se no
Para i=1 a n faa
Fat=fat*i
49

x=x*x
Total=total + x/fat
Fim para

Fim se
Fim
7) Escrever um programa Python que calcule e escreva o nmero
de feijes que se pode colocar em um tabuleiro 8X8, colocando 1
no primeiro nos seguintes um a mais do que o anterior.
Algoritmo
Inicio
Total=0
Contadorlinha=1
Para i=1 a 8 faa
a=i
Enquanto contadorlinha<=8 faa
Total=Total+i
contadorlinha=contadorlinha+1
fim enquanto
fim para
Fim
8) O comando lgico Nor tem a seguinte tabela verdade:
A
V
V
F
F

B
V
F
V
F

AB
F
F
F
V

Escreva um programa Python que simule o comando lgico nor.


Algoritmo
Inicio
no(A ou B)
Fim
50

9) O nmero 3025 possui a seguinte caracterstica


30+25= 55
55=3025
Escreva um programa Python que encontre todos os nmeros de
quatro algarismos com essa caracterstica.
Inicio
Para x=32 at 99 faa
y=x*x
z=y/100 (como os dois so inteiros retorna um inteiro)
y=y-z*100
Se (z+y) = x ento
Imprima x
Fim se
Fim para
Fim
10)Dados dois nmero inteiros positivos, escreva um programa
Python que calcule e imprima o mdc desses nmeros.
Inicio
Ler x
Ler y
Enquanto x!=y faa
Se x>y ento
x=x-y
Se no
y=y-x
fim se
fim enquanto
Fim
11) Escreva um programa Python da diviso inteira de Euclides
de a por b (com a e b pertencentes aos inteiros).
Ex: Diviso inteira de Euclides 17 dividido por 5. 17= 5*3 + 2
51

Inicio
Q=0
R=0
Falsoa=0
Falsob=0
Ler a
Ler b
Se a<0 ento:
a=-a
Falsoa=1
Fim se
Se b<0 ento:
b=-b
Falsob=1
Fim se
R=a
Enquanto (b<=R) e (b0) faa:
R=R-b
Q=Q+1
Fim enquanto
Se Falsoa=1 ento:
Q=-Q
a=-a
fim se
Se Falsob=1 ento:
Q=-Q
b=-b
fim se
Fim
12) Elabore um programa Python que calcule o fator gama para
uma velocidade v digitada pelo usurio.

52

Lembrando: =1/

e c=2,997 X

m/s

4.7 Para saber mais


1) H um problema na exibio do resultado do ltimo exerccio.
Porque ele ocorre? Como pode ser prevenido?
2) Para maiores informaes sobre erros de representao
consultar http://docs.python.org/tutorial/floatingpoint.html

53

Capitulo V

Entrada e sada.
5.1 Declaraes de Entrada
A verso 2.7.3 do Python aceita os comandos:
raw_input- usada para entrada de dados do tipo texto (ou
string)
Varivel= raw_input(mensagem)
Este tipo de declarao mais estvel por evitar erros e
possibilitar que o programador verifique se o dado de entrada
vlido antes de utiliz-lo. Contudo para a realizao dos testes
ser exigido um esforo maior por parte do programador.

input - usada para entrada de dados de uma forma geral.


Varivel = input(mensagem)
Esta declarao utilizada principalmente para a entrada de
dados numricos, devido sua necessidade de conhecimento
prvio do usurio do tipo de dado de entrada e da forma de
declarao feita em Python.

54

Os comandos de entrada podem tambm ser utilizados para


aguardar uma ao do usurio como podemos perceber no
exemplo a seguir:

5.2 Os comandos de sada so


A impresso de alguma mensagem na tela indicada da seguinte forma:
print mensagem, varivel1, ..., variaveln, mensagem2, varivel, ...,
mensagem
Exemplo:

Podem-se agrupar vrias mensagens tipo texto usando o operador +.


Por exemplo:

Forma errada de declarar:


55

Pode-se perceber que no caso acima o interpretador exibe de


forma errada. Esse erro ocorre porque o Python o interpreta os
dados como se fosse uma tupla com elemento 0 do tipo string,
elementos 1,2,3,4,5, do tipo numrico e o sexto elemento do tipo
string.

5.3 Formatao para exibio de dados


O programador pode formatar a exibio dos valores de variveis
indicando uma mscara conforme seja seu tipo.
Declara-se que um valor ser exibido naquela posio atravs do
parmetro %x, onde x o cdigo caracterstico para sua
formatao.
Para comandos de sada utiliza-se rotineiramente o tipo string
devido facilidade da converso automtica.
Segue aqui uma lista de valores que x pode assumir com seus
respectivos tipos:
%d Utilizado para a declarao de um nmero inteiro

%e Utilizado para a declarao de um nmero float que


ser convertido para a forma exponencial.

56

%f Utilizado para a declarao de um nmero float.

%c Utilizado para a declarao de um nico caractere.

%s Utilizado para a declarao de uma string.

%g Utilizado para a declarao de um nmero float que


ser convertido para a forma exponencial somente se sua
preciso for maior do que 4.

5.4 Nmeros octais ou hexadecimais


Dentro de um programa os nmeros podem estar em base octal
ou hexadecimal por questes de convenincia. Dessa forma para
imprimir um numero octal na base decimal basta incluir um 0 na
frente desse numero, em casos de hexadecimal 0X.
Vale ressaltar que o nmero precisa ter no mnimo 3 algarismos,
para a converso em octal. No h restries para converses em
hexadecimal.
Exemplo:
57

5.5 Exerccios de fixao


1) Escreva um programa Python que leia o preo de 3
mercadorias e imprima o maior preo.
Inicio
Ler a
Ler b
Ler c
Se a>b ento
Se a>c ento
Imprimir a
Se no
Imprimir c
Fim se
Se no
Se b>c ento
Imprimir b
Se no
Imprimir c
Fim se
Fim se
Fim
2) Escrever um programa Python que leia dois valores e imprima
o valor de a/b. Exemplo 7.0/2 = 3.5
Inicio
Ler a
Ler b
Transformar a e/ou b em real (importante)
58

Imprimir (a/b)
Fim
3) Escrever um programa Python que receba horas minutos e
segundos e exiba o resultado convertido para segundos.
Inicio
Ler hora
Ler minutos
Ler segundos
segundos= segundos + hora*3600 + minutos*60
Imprimir segundos
Fim
4) Faa um programa Python que leia o valor de trs mercadorias
e calcule a diferena do preo de cada uma delas.
Inicio
Ler valor1
Ler valor2
Ler valor3
A_B=valor1-valor2
A_C=valor1-valor3
B_C=valor2-valor3
Se A_B<0 ento
A_B=-A_B
Se B_C<0 ento
B_C=-B_C
Se A_C<0 ento
A_C=-A_C
Fim
5) Elabore um programa que leia um valor em centmetros e o
imprima em polegadas (1 pol = 2,54 cm)

59

6) Elabore um programa que leia o raio de um circulo e imprima


o comprimento e rea do circulo.

7) Elabore um programa que leia dois valores e imprima o resto


da diviso do primeiro pelo segundo e o quociente da diviso.

8) Elabore um programa que calcule o comprimento de uma


onda, sendo inserida sua frequncia e sua velocidade. Lembrando
que

9) Escreva o programa Python de multiplicao de a por b


Inicio
Resp=0
Contador=0
Falsoa=0
Falsob=0
Ler a e b
Se a<0 ento:
a=-a
Falsoa=1
Fim se
Se b<0 ento:
b=-b
60

falsob=1
Fim se
Enquanto contador<b faa:
Contador=contador+1
resp=resp+a
fim enquanto
se falsoa=1 ento:
a=-a
resp=-resp
fim se
se falsob=1:
b=-b
resp=-resp
fim se
Fim
10) Escreva um programa Python que calcule x elevado a y. Com
y pertencente aos inteiros.
Inicio
Contador=0
Falsoy=0
Ler x
Ler y
Se x=0 e y=0 ento:
Escreve impossvel calcular
Se no
Se y=0 ento
Escreve 1
Se no:
Se y<0:
y=-y
falsoy=1
61

fim se

fim se
enquanto contador<(y-1) faa
contador=contador+1
x=x*x
fim enquanto
se falsoy=0 ento
escreve x
fim se
se falsoy=1 ento
escreve (1.0/x)
fim se

fim se
fim
11) Escreva um programa que calcula a hipotenusa de um
triangulo retngulo.

5.6 Para saber Mais


Para maiores informaes sobre os comandos de entrada:

62

Captulo VI

Classe String
Strings so objetos de tipo imutvel do Python e que possuem
noo de ordenao. So constitudos de caracteres e declarados
entre apstrofos ou aspas.
Os dados literais denotam um conjunto de caracteres da tabela
ASCII (ou UNICODE), ou seja:
As letras maisculas e minsculas;
Os dgitos de 0 a 9;
Os caracteres especiais, como os de pontuao, de operao
etc.;
Os caracteres de controle e que no so imprimveis.
Por exemplo

A converso de um valor para literal, tambm chamada de texto


ou string, feita atravs do comando construtor da classe (str(x),
onde x um valor ou uma varivel relacionada a um valor
imprimvel).
Por exemplo:

63

6.1 A ideia de ordenao de Python e o slice


Todas as classes/tipos do Python que possuem ideia de
ordenao podem ser acessadas por partes, atravs de uma
operao denominada slice.
Em Python cada representante de um grupo ordenado possui
uma numerao na sequncia, variando de 0, para o primeiro
elemento e seguindo uma progresso aritmtica de razo 1 at o
ltimo termo. Ou uma progresso aritmtica de razo -1, e
primeiro termo -1, comeando do ltimo termo at o primeiro.
Exemplo:
P

0
-6

Y
1
-5

T
2
-4

H
3
-3

O
4
-2

N
5
-1

O acesso se d da seguinte forma:


nomedavariavel[inicio:fim:passo]
Exemplo:

64

6.1.1 O comando len(x)


Esse comando se refere a todos as classes que possuem ideia de
tamanho. Seu valor de entrada x uma varivel pertencente a
uma dessas classes e retorna seu tamanho.

6.2 Operaes com String


+ Indica concatenao
Exemplo

* representa repetio
Exemplo
65

6.3 A funo ord(x)


A funo ord(x), recebe uma string de um nico caractere e
retorna seu nmero na tabela ASCII.

6.4 A funo chr(x)


A funo chr(x) faz o inverso da funo ord. Essa funo recebe
um nmero inteiro e retorna o caractere representante na tabela
ASCII.

6.5 Mtodos da classe string


Por hora trataremos mtodos como tipos diferenciados de
funes, contudo mais adiante ser melhor explicado a diferena
entre mtodos e os comandos normais. Os mtodos dessa classe,
assim como os das demais classes primitivas da linguagem, esto
integrados (built-in) e por esse motivo necessrio a importao
de mdulos para sua utilizao. Ou seja, o programador pode
simplesmente cham-los e execut-los sem problemas, desde que
sejam obedecidos os tipos dos argumentos de entrada e o uso dos
parnteses (mesmo que no possua argumentos de entrada).
Sero apresentadas somente as principais funes da classe, e
todas elas exemplificadas para melhor entendimento do leitor.
66

6.5.1 O mtodo count


Esse mtodo utilizado para contar quantas vezes uma
determinada string "b" aparece em uma string "a". Esse mtodo
tambm aceita os argumentos opcionais inicio e fim, que so
utilizados a fim de restringir o tamanho da pesquisa dentro da
string.
Por default inicio a posio 0 da string e fim a posio do
ultimo caractere.
a.count (b, [inicio, fim]) a String b- Inteiro inicio Inteiro fim
inteiro

6.5.2 O mtodo lower


Esse mtodo utilizado a fim de retornar uma cpia de uma
string em caixa baixa.
a.lower()a - String

6.5.3 O mtodo replace


Esse mtodo retorna uma nova string que substitui na string "a"
todas as coincidncias de uma string "b" por uma nova string "c".
Tambm recebe um argumento de entrada opcional que
chamaremos de quantidade (qtd) que representa a quantidade de
substituies que sero feitas na string.
Por default qtd toda a string.
a.replace(b, c [,qtd])a String b String c String qtd-Inteiro

67

6.5.4 O mtodo Split


Esse mtodo separa a string "a" toda vez que for encontrada a
string "b". Cada fracionamento da string ser transformado em
um item de uma lista. Esse mtodo tambm recebe como dado de
entrada opcional uma quantidade de vezes que ser realizado o
fracionamento.
Por default "b" considerado como e qtd considerado como
toda a string.
a.split(b[,qtd]) a String b String qtd- Inteiro

6.5.5 upper
Esse mtodo utilizado a fim de retornar uma cpia de uma
string em caixa alta.
a.upper() a String

6.5.6 isalnum
Esse mtodo utilizado para verificao dos tipos de caracteres
de uma string. Caso a string analisada possua somente caracteres
alfanumricos retorna True, caso contrrio retorna False.
a.isalnum() a String

68

6.5.7 isalpha
Esse mtodo utilizado para verificao dos tipos de caracteres
de uma string. Caso a string analisada possua somente caracteres
alfabticos retorna True, caso contrrio retorna False.
a.isalpha() a String

6.5.8 isdigit
Esse mtodo utilizado para verificao dos tipos de caracteres
de uma string. Caso a string analisada possua somente caracteres
nmricos retorna True, caso contrrio retorna False.
a.isdigit() a String

6.5.9 islower
Esse mtodo utilizado para verificao dos tipos de caracteres
de uma string. Caso a string analisada possua somente caracteres
que no sejam caixa alta retorna True, caso contrrio retorna
False.
a.islower() a String

6.5.10 isupper
Esse mtodo utilizado para verificao dos tipos de caracteres
de uma string. Caso a string analisada possua somente caracteres
que no sejam em caixa baixa True se a string, caso contrrio
retorna False.
69

a.isupper()a String

6.6 Formataes avanadas de strings


6.6.1 Pular linhas
Para mudar de linha coloca-se o parmetro \n

6.6.2 Tabulao horizontal


Para executar uma tabulao horizontal utiliza-se o parmetro \t.
Esse comando funciona somente ao ser executado no modo
programado.
O programa

Ter como resultado

6.6.3 String Unicode


Para declarar que uma string est no padro Unicode, basta
colocar a letra u antes da string.

70

6.6.4 String crua


A letra r antes da string indica que ela uma string crua, ou seja,
as strings de barra invertida no sero interpretadas.

6.6.5 Aspas ou apstrofos dentro da string


Para utilizar aspas dentro de uma string devemos utilizar o
parmetro \, o mesmo acontece com o apostrofo, porm seu
parmetro o \

71

6.6.6 O mtodo rjust.


O mtodo rjust(x) pode ser utilizado para formatao da sada,
uma vez que este define o espaamento que ser dado direita
de um caractere.
Observe o exemplo:

Esse mtodo pode ser chamado de forma implcita em


tratamentos de declaraes posteriores como podemos perceber
no exemplo abaixo:

6.6.7 O mtodo ljust


O mtodo ljust(x) pode ser utilizado para formatao da sada,
uma vez que este define o espaamento que ser dado esquerda
de um caractere.

Ao contrrio da rjust(x), a ljust(x) pode ser utilizada em


declaraes posteriores.
72

6.6.8 O mtodo Center


O contrario do rjust e ljust esse mtodo um pouco mais
complicado de usar. Para utiliza-lo deve-se passar como
parmetro obrigatrio o tamanho do bloco que ele dever ser
centralizado e como parmetro opcional com qual caractere ser
feito o espaamento.
Observe:

6.7 Exerccios de fixao


1) Escreva um programa Python para verificar a quantidade de
caracteres em um nome. Todos os nomes de entrada terminam
com ponto final.
Contador=1
Ler nome
Transformar nome em string
Enquanto nome[contador] != . Faa
Contador=Contador+1
Fim enquanto
2) Escreva um programa Python que leia o nome e o imprima
quantas vezes forem o nmero de caracteres. Todos os nomes de
entrada terminam com ponto final.
Contador=1
Ler nome
Transformar nome em string
Enquanto nome[contador] != . Faa
Contador=Contador+1
Fim enquanto
73

Para i=1 at contador faa


Imprimir nome
Fim para
3) Qual o resultado dos seguintes cdigos sabendo que
a)

b)

c)

d)
e)

74

4) Elias, um aluno que adora lgebra, decidiu que iria criptografar


uma mensagem seguindo o seguinte padro:
Se o cdigo na tabela ascii do caractere for par: somar um ao
cdigo do caractere
Se o cdigo for impar multiplico por 5 e subtraio 3.
Decidido a criptografar a seguinte mensagem
escreveu seu cdigo, contudo no obteve sucesso. Caso seja
necessrio escreva seu cdigo e descubra o problema.
5) Escreva um programa Python que simule a o mtodo upper e
lower. Considere o caractere de finalizao de string sendo ..
UPPER
Ler a
b=
Transformar a em string
Enquanto a[contador] != . Faa
Se numero-ascii(a[contador]) >96 e
numeroascii(a[contador])<123 ento
b=b+caractere(numero-ascii(a[contador]) - 32)
se no
b=b+ a[contador]
fim se
Fim enquanto
LOWER
Contador=1
Ler a
b=
Transformar a em string
75

Enquanto a[contador] != . Faa


Se numero-ascii(a[contador]) >64 e
numeroascii(a[contador])<90 ento
b=b+caractere(numero-ascii(a[contador]) +32)
se no
b=b+ a[contador]
fim se
contador=contador+1
Fim enquanto
a=b
escreva a
6) Elabore um programa que leia um nmero e imprima seu
nmero e seu quadrado e seu cubo. Seu programa dever utilizar
mostrar os resultados duas vezes uma utilizando o mtodo rjust,
e outra com a center.

7) Escreva um programa que leia uma palavra e exiba seu


primeiro e seu ultimo caractere.

8) Palndromos so palavras que so idnticas se lidas da


esquerda para a direita ou da direita para a esquerda, a exemplo
da palavra ovo. Escreva um algoritmo que verifique se uma
palavra um palndromo.
Resposta:
Ler A
C=numero de caracteres de A
76

B= (palavra sem caracteres)


Enquanto C>0
B=B + Caractere de A na posio C (supondo primeira
posio como 1)
C=C-1
Fim enquanto
Se A igual B ento
So palndromos
Se no
No so palndromos
Fim se
9) Escreva um programa Python que simule o mtodo isdigit que
funcione com floats. Caso o valor no seja nmero retorne False.
Caractere de finalizao de string !.
Cont=1
Ler a
b=
Transformar a em string
Enquanto (((a[cont]>47) e (a[cont]<58)) ou (a[cont]=.)) faa
b=b+ a[cont]
cont=cont+1
fim enquanto
se a[cont+1]=!
a=b
imprima a
se no
a=booleano(0)
imprima a
10) Escreva um programa Python que leia uma frase e um
nmero inteiro que especifique a quantidade de linhas que essa
frase dever ser exibida. Seu algoritmo dever imprimir a frase
de forma que ela fique dividida nessa quantidade de linhas
77

especificadas, sem quebrar palavras. Suponha que exista uma


funo que te diga o tamanho da string e que no existiro inputs
impossveis (uma palavra de duas letras quebrada em 99 linhas,
por exemplo).
Inicio
Ler frase
Ler linhas
Tam1=tam(frase)
Tam1=tam1/linhas
quebra=0
verificador1=0
verificador2=0
para i=1 at linhas:
enquanto frase[tam1+verificador1]!= faa
verificador1=verificador1+1
fim enquanto
enquanto frase[tam1-verificador2]!= faa
verificador2=verificador2+1
fim enquanto
se verificador1>verificador2 ento
quebra=tam1+verificador1
se no
quebra=tam1-verificador2
fim se
para cada i em frase at quebra:
imprima i
fim para
tam1+=tam1
verificador1=verificador2=quebra=0
fim para
fim

78

Capitulo VII

Estruturas de deciso
Esses comandos analisam e executam uma nica vez um bloco de
instrues de acordo com o valor verdade de uma condio.

7.1 Estrutura de deciso simples


if condio :
Essa estrutura executa um bloco de instrues caso a condio
estabelecida retorne True.
if condio:
Comando ou bloco de comandos
Continuao do cdigo

7.2 Estruturas de deciso compostas


elif verificado caso a condio do if retorne False. Caso
retorne True, executa o bloco de instrues e ignora todos os elif
e else abaixo.
else executado caso todos o if e todas as condies de elif
acima dele, e a ele relacionado, retornem falso.
if condio :
Comando ou bloco de comandos
elif condio:
Comando ou bloco de comandos
...
elif condio:
79

Comando ou bloco de comandos


else:

Comando ou bloco de comandos


Continuao do cdigo

7.3 Exerccios
1)Faa um programa que leia dois nmeros inteiros A e B da
entrada padro (teclado) e retorne o quociente da diviso entre A
e B. O programa deve verificar previamente diviso, se o valor
de B diferente de zero.

2)Escreva um programa para receber o sexo e a idade de uma


pessoa. Se a pessoa for do sexo feminino e tiver menos de 25
anos, imprimir o sexo, a idade e a mensagem: ACEITA. Caso
contrrio, imprimir o sexo, a idade e a mensagem no aceita.
(Considerar para o Sexo as letras F,f,M ou m).

80

3)Escreva um programa que l 3 valores, verifica se um


triangulo, caso positivo informa se equiltero, issceles ou
escaleno e seu permetro.

4)Escreva um programa que leia dois valores a e b nessa ordem,


e caso a>b seja verdade, o valor de b se torna o valor de a e o

81

valor de a se torna o de b e imprime a, b e valores trocados,


caso contrrio imprime valores no alterados.

5)Um endocrinologista deseja controlar a sade de seus


pacientes e, para isso se utiliza de um ndice de massa corporal
(IMC). Sabendo-se que o IMC calculado atravs da frmula
abaixo:

Onde o Peso dado em Kg e a Altura dada em metros. Faa um


programa que apresente o nome do paciente e sua faixa de risco,
baseando-se na seguinte tabela:

82

6)Escreva um programa para o clculo das razes de uma


equao do segundo grau. Seu programa no deve calcular razes
imaginrias.

7)Escreva um programa que calcule a velocidade mdia de um


corpo, sendo dados
e . Lembrando vm=

83

8)Escreva um programa que verifique se o usurio inseriu a


senha (senha) como input. O programa no dever fazer
distino entre letras maisculas ou minsculas.

9)Escreva um programa que informe o dia seguinte. Note voc


dever ler e informar dia ms e ano e considerar se ele ou no
bissexto. Suponha que as datas sero vlidas.

84

10)O Ceil retorna o menor inteiro maior que um nmero. Escreva


um programa que o simule e trate o caso de inserir um nmero
inteiro.

11) Um guerreiro nunca luta com um exrcito que tenha um


nmero menor de tropas que o seu. Escreva um programa que
leia dois valores e mostre o nmero de tropas do guerreiro, o do
85

oponente e sua diferena.

7.4 Para saber mais

86

Capitulo VIII

Laos de repetio
So usados para repetir um conjunto de instrues.

8.1 Comando while


Repete um conjunto de instrues enquanto uma condio for
verdadeira. Devemos estar atentos para que a condio se torne
falsa durante a execuo para interromper a repetio.
A condio testada antes de entrar na estrutura de repetio.
FLAG ou sentinela - um de dado que utilizado como
verificador de continuidade de um lao de repetio.
recomendado ao programador, na maioria dos casos, a utilizao
de um flag no lugar de uma comparao a fim de aperfeioar o
algoritmo.
8.1.1 Estrutura while simples
while condio :
Comando ou bloco de comandos;
Continuao do cdigo
8.1.2 Estrutura while composta
A estrutura while pode vir acompanhada de um else, que ser
iniciado no momento em que a condio do while retorne False.
87

Contudo devemos ficar atentos, pois o else, ao contrrio do while,


ser executado somente uma vez.
while condio:
Instruo
...
Instruo
else:
Instruo
...
Instruo
Continuao do cdigo
8.1.3 Laos infinitos
Ocorre quando o comando while executado eternamente.
Para parar a execuo de um lao infinito a fora, devemos
pressionar ctr+c duas vezes na Shell do Python.

8.2 Comando for


Percorre os itens de objetos e sequncias de objetos onde exista a
ideia de ordem atribuindo os valores varivel e executando o
bloco de comandos aps cada atribuio.
for varivel in objeto sequencial:
Comando1
...
Comando n
Continuao do cdigo
8.2.1 O gerador de listas range
Essa funo gera uma lista cujos elementos so uma sequncia
que possui incio e fim e que seguem uma determinada razo ou
88

passo. Uma observao importante que o intervalo percorrido


pela funo range que o intervalo fechado no incio e aberto
no fim.
range ( inicio , fim , passo)

8.3 O comando break


Esse comando finaliza o lao de repetio mais interno que o
envolve, passando para o prximo comando fora do lao. Com
base nessa ideia podemos concluir que o programa

Produzir o seguinte resultado:

8.4 O comando continue


O comando continue passa para o prximo passo do lao mais
interno.
Dessa forma o programa:

89

Produziria o seguinte resultado:

8.5 A construo pass


A Construo pass no faz nada. Ela pode ser usada quando a
sintaxe exige um comando, mas a semntica no requer nenhuma
ao.

Produziria o seguinte resultado:

90

8.6 Exerccios
1)Faa um programa que leia um nome e o imprima tantas vezes
quantas for a quantidade de letras do seu nome.

2)Elabore um programa que leia uma frase e exiba o nmero de


vogais e consoantes que aparecem nela.

3)Faa um programa que mostre os nmeros entre 1000 e 2000


inclusive que divididos por 11 do resto 5.

91

4) Faa um programa que leia a nota de um nmero


indeterminado de alunos, perguntando ao final se ele deseja ou
no continuar a executar o programa.

5)Faa um programa que leia um valor n inteiro e positivo e x


real e que calcule a seguinte soma:

S=x+x/2+x/3+x/4+...x/n
S= x+x/2!+x/3!+x/4!+...+x/n!
S= x-x/2!+x/3!-x/4!+... x/n!
S= 1+x/2!+x/4!+x/6!+...+x/n!

92

6)Faa um programa que exiba se um nmero X, fornecido pelo


usurio, ou no primo.

93

7)Faa um programa que leia o valor e o multiplique por 3 at


que ele seja maior que 100. Seu programa dever tratar os casos
em que ocorre loop infinito.

8)Em um frigorfico existem 200 bois. Cada boi tem uma


identificao contendo um nmero maior que 0 e seu peso. Faa
um programa que leia as identificaes e mostre o nmero do boi
mais pesado.

94

9)Faa um programa que calcule e exiba a mdia aritmtica dos


nmeros lidos entre 13 e 73. O flag um nmero negativo.

10) Hugo, um aluno muito distrado, inseriu o seguinte cdigo e


obteve um resultado inesperado:

Confuso Hugo indagou o porqu de o cosseno ter dado negativo,


mesmo 4 estando no primeiro quadrante. Como voc explicaria
para Hugo o que aconteceu?
O problema se deu pelo fato de Hugo ter acreditado que o
argumento de entrada era dado em graus. Na realidade Hugo
inseriu um valor prximo de 229, o que justifica o cosseno
negativo.
95

11) O mtodo startwith da classe string verifica se determinada


string comea com uma string fornecida, j o mtodo endswith
verifica se determinada string termina com outra string
fornecida.
Escreva programas para simular cada um desses mtodos.

12) O mtodo upper retorna um dado do tipo string em caixa alta,


enquanto o mtodo lower retorna um dado do tipo string em
caixa baixa. Escreva programas que simulem esses mtodos.

96

8.7 Para saber mais


Simule cada um dos mtodos da classe string apresentados no
captulo VI.

97

Capitulo IX

Mdulos
9.1 Importao de mdulos
Para incorporar as funes e mtodos presentes em algum
mdulo ao programa deve-se importar o mdulo desejado
atravs dos comandos from e import.
Importao se d das seguintes formas:
9.1.1 import nome_do_modulo
Nesse caso o trabalho recai sobre o programador. Toda vez que
desejar usar uma algo do mdulo o programador dever chamla atravs do seguinte comando:
nome_do_mdulo.nome_do_objeto( argumentos_recebidos)
Exemplo:

9.1.2 from nome_do_modulo import item1,item2,...,itemn


Nesse caso podemos chamar os itens especificados a qualquer
momento no programa como se estes fossem internos ao Python.
Para casos onde vantajoso importarmos um mdulo inteiro
podemos utilizar no lugar das funes o *.
Observe os exemplos:

98

9.2 O mdulo Math


No decorrer desse item sero dados exemplos considerando o
modelo de importao mais fcil, porm menos apropriado por
questo de conflitos em alguns mdulos.
9.2.1 Funes trigonomtricas bsicas do modulo math
Arco cosseno
Funo: Calcula o arco cosseno do argumento
acos(x) x um arco medido em radianos
Arco seno
Funo: Calcula o arco seno do argumento
asin(x) x um arco medido em radianos
Arco tangente
Funo: Calcula o arco tangente do argumento
tan(x) x um arco medido em radianos

99

Seno
Funo: Calcula o seno do argumento
sin(x) x um arco medido em radianos
Cosseno
Funo: Calcula o cosseno do argumento
cos(x) x um arco medido em radianos
Tangente
Funo: Calcula a tangente do argumento
tan(x) x um arco medido em radianos

9.2.2 Outras funes importantes do modulo math


Exp
Funo: Calcula e**x
exp(x)
Log
Funo: Calcula o log de x na base y.
log(x,y) Onde x o numero e y a base.
Fatorial
Funo: Calcula x!
factorial(x) x um inteiro
100

Raiz quadrada
Funo: Retorna a raiz quadrada de x
sqrt(x) x um nmero
Inteiro absoluto
Funo: Retorna o valor inteiro absoluto de x
abs(x) Onde x um nmero inteiro

Float absoluto
Funo: Retorna o float absoluto de x
fabs(x) onde x um nmero float
Inteiro maior
Funo: Retorna o menor nmero inteiro maior que X
ceil(x) x um float

9.3 O mdulo random


Assim como o mdulo math, o mdulo random necessita de
importao para ser utilizado.

101

9.3.1 Algumas coisas teis do mdulo random


Inteiro randmico
Funo: retorna um inteiro randmico contido no intervalo
especificado. O intervalo fechado.
randint(a,b) a valor inicial e b valor final: inteiros
Intervalo randmico
Funo: similar a randint, porm o intervalo aberto e pode-se
escolher o passo da formao da lista de nmeros.
randrange(inicio,fim,passo) Inicio, fim e passo: inteiros
Shuffle
Funo: Embaralha uma lista.
shuffle(self, x, random=None, int=<type 'int'>)

9.4 O mdulo os

102

O mdulo os serve para lidar com o sistema operacional, aqui


ser apresentada apenas uma parte de seu contedo e espera-se
que o programador tenha bom senso em sua utilizao.
9.4.1 O mtodo abort
O mtodo abort utilizado para forar a parada do interpretador
Python
abort()
9.4.2 O mtodo chdir
Muda o diretrio de trabalho para outro caminho especificado.
chdir(b) Onde b representa o diretrio
9.4.3 O mtodo chmod
Esse mtodo altera as permisses de um arquivo
chmod(b,a) onde b representa o diretrio e a a permio a ser
atribuda.
9.4.4 O mtodo getcwd
Esse mtodo retorna o diretrio de trabalho atual.
getcwd()
9.4.5 O mtodo mkdir
Cria um diretrio
mkdir(a,b) a diretrio b=modo (por padro 0777)
9.4.6 O mtodo remove
Remove um arquivo.
remove(a) onde a o diretrio
103

9.4.7 O mtodo urandom


Retorna um valor de a bytes para ser utilizado em criptografia.
O valor retornado em string.
urandom(a) -> a nmero de bytes.

104

Capitulo X

Tratamento de erro
10.1 Tipos de erro
10.1.1Erros de sintaxe:
Tambm conhecidos como erros de parse

10.1.2 Excees
So os erros que so sintaticamente corretos, mas impossveis de
serem executados por algum motivo.

10.2 Tratamento de excees


10.2.1 O comando try
Esse comando, assim como a clausula if funciona uma nica vez e,
diferentemente dela, precisa de uma clusula que a torne
composta, no caso o comando except.
Modelo de declarao de try:
try:
105

comando ou bloco de comandos que sero verificados


10.2.2 O comando except
Esse comando semelhante ao else. Assim como o else s
executado quando o if retorna False, o except s executado
quando o try retorna um erro.
Diferentemente do else, o except aceita argumentos que devero
especificar os tipos de erros tratados. Caso os erros no sejam
especificados na clausula eles sero entregues a um try mais
externo. Caso no exista um tratador mostrada uma mensagem
de erro.
Modelo de declarao except:
except (tipo de erro,.., tipo de erro):
Comando ou bloco de comandos a serem executados

A mscara de excees
O Comando except pode executar um conjunto de comandos
padro para qualquer tipo de erro que ocorra, para isso basta no
apresentar argumentos.

106

10.3 Provocando excees


O comando raise permite ao programador forar a ocorrncia de
determinado tipo de exceo.
Modelo sem o raise:

Modelo com o raise:

10.4 O comando finally


O comando finally utilizado para aes de limpeza, sendo
executado tanto quando ocorrer e tambm quando no ocorrer
excees.
Veja os exemplos:

107

10.5 Exerccios
1) Escreva um programa para ler um nmero atravs de
raw_input e o converta para float.

2) Escreva um programa que leia dois valores e execute a diviso


entre eles.

3) Em uma fbrica existe um boto de desligamento forado.


Quando este boto ativado ele envia o valor 11 para o programa
interno. Crie um programa que pare assim que receber o valor
11.
108

4) Escreva o mesmo programa do nmero 1 deste captulo sem o


uso do comando try

10.6 Para saber mais


Refaa os exerccios dos captulos anteriores tratando os erros

109

Capitulo XI

A Classe list
Lista um conjunto ordenado de valores identificado por um
ndice.
Uma lista ou list em Ingls possui as seguintes caractersticas:

Os elementos PODEM ser alterados; *

Os itens da lista so separados por vrgula (,) e escritos


entre colchetes [].

Uma lista PODE conter diferentes tipos de dados inclusive


outras listas. Uma lista dentro de outra lista denomina-se
aninhada

Os valores armazenados em uma lista podem ser


acessados usando colchetes [] e [ : ] cujos ndices iniciam em 0
quando contado a partir do inicio da lista e -1 o ltimo elemento
quando contado a partir do fim da lista.

Quando os dados forem do tipo string, um operador de


slice pode ser aplicado.
* Listas so tipos bsicos mutveis do Python, ou seja, podem ser
adicionados novos elementos, ou ainda alter-los. Porm vale
ressaltar que a alterao feita diretamente na memria
causando dessa forma alterao em todos os objetos que
apontam para a mesma lista.
O construtor dessa classe chamado atravs do comando list (x)

110

11.1 Mtodos da classe list


11.1.1 O mtodo append
Esse mtodo utilizado para acrescentar um objeto b como
integrante no final da lista a.
a.append(b) a Lista, b qualquer

11.1.2 O mtodo count


Esse mtodo conta quantas vezes o objeto b aparece na lista a, ao
contrrio das strings esse mtodo no recebe argumentos
opcionais de entrada.
a.count (b) a Lista, b qualquer

11.1.3 O mtodo insert


O mtodo insert muito similar ao mtodo append, uma vez que
ambos adicionam um objeto como integrante na lista, contudo
esse mtodo recebe como argumento, alm do dado que ser que
ser inserido na lista, a posio que ele ser inserido.
Caso a posio seja maior que a lista, o item ser acrescentado ao
final.
a.insert (pos,b)a Lista, b Qualquer

111

11.1.4 O mtodo pop


O mtodo pop utilizado para a remoo de um item da lista.
Recebe como argumento de entrada a posio que este item
ocupa.
a.pop(pos)a Lista, pos Inteiro

11.1.5 O mtodo remove


O mtodo remove, remove a primeira ocorrncia de um
determinado objeto em uma lista.
a.remove(b)a Lista, b Qualquer

11.1.6 O mtodo sort


O mtodo sort o oposto do shuffle do mdulo random, sendo
utilizado para ordenar listas.
a.sort()a Lista

11.1.7 O mtodo reverse


Esse mtodo utilizado para inverter a ordem que os itens de
uma lista esto posicionados.
112

a.reverse() a- Lista

11.2 Exerccios
1) Elabore um programa que leia o vetor A com 5 valores
inteiros. Determine um vetor com a seguinte lei de formao: Os
termos de ordem impar de A so multiplicados por 3 Os termos
de ordem par de A so multiplicados por 2

2)Escreva um programa que sorteie um valor de 1 a 100. Seu


programa dever receber palpites mostrar se o valor introduzido
mais alto ou mais baixo do que o sorteado.

113

3) Escreva um programa que sorteie 6 nmero nmeros da


loteria, que consiste de valores de 1 at 500.

4)Elabore um programa que leia duas matrizes m X n e calcule


sua soma.

114

5)Escreva um programa que calcule o determinante de uma


matriz

115

116

6)Escreva um programa que leia e faa a multiplicao de duas


matrizes quadradas de ordem 3.

117

7)Escreva um programa que leia uma matriz quadrada e escreva


sua transposta.

118

8) O Buble Sort um algoritmo de ordenao que consiste em


percorrer uma lista tomando seus elementos um a um e
comparando-os com o seguinte, e caso estejam fora de ordem
troca as posies.
Escreva um programa que gere uma lista desordenada de 20
elementos e a ordene em ordem crescente com o Bubble Sort

119

9) O Selection Sort um algoritmo baseado em mover sempre o


menor/maior valor para a posio desejava. Aps isso o processo
de identificao do menor valor e a alocao na posio desejada
se repete para todos os n-1 valores restantes.

10) O Insertion Sort ou pesquisa simples um algoritmo que


consiste em selecionar um valor e compara-lo com todos os
valores sua esquerda a fim de reordenar uma lista.
Escreva um programa que gere uma lista desordenada de 20
elementos e a ordene em ordem decrescente pelo Insertion sort.
120

11) O Shell Sort um algoritmo insero, que consiste em realizar


trocas a passadas em passadas a uma certa distancia(h) que
diminui em um a cada passada.
Atualmente no se tem o valor ideal de H, contudo os melhores
resultados foram obtidos atravs na sequencia de Knuth
(1,4,13,40,...,) (h=h*3+1). O valor de h dever ser o menor
nmero maior que a lista que ordenaremos.
Caso o leitor ainda tenha dvidas sobre o funcionamento do
algoritmo, na seo Para Saber Mais desse captulo, constaro
links teis para uma melhor compreenso.
Com base no descrito acima escreva um programa que gere uma
lista embaralhada de 20 elementos e ordene-a em ordem
crescente com o algoritmo Shell Sort

121

11.3 Para saber mais


Existe tambm um mdulo array, que talvez seja interessante
para alguns.
Shell Sort

Shell-sort with Hungarian (Szkely) folk dance

http://www.youtube.com/watch?v=CmPA7zE8mx0&noredirect=
1

122

Capitulo XII

Outras classes de python


12.1 A Classe Tupla
Uma tupla outro tipo de estrutura de dados similar a Lista.
Uma tupla consiste de uma srie de valores separados por
vrgula. Ao contrrio das listas, no entanto, so tuplas
representadas entre parnteses.
As principais diferenas entre listas e tuplas so: Listas so
includas em colchetes ([]), e os seus elementos e tamanho pode
ser alterado, enquanto tuplas so colocados entre parnteses (())
e seus elementos no podem ser modificados. Tuplas podem ser
tratadas como listas de somente leitura.
O construtor de tuplas chamando a partir do comando
tupple(x).

12.2 Dicionrios
Dicionrios so objetos que podem ser modificados, com
caractersticas sequenciais no ordenadas e que so utilizados a
fim de implementar mapeamentos.
Cada objeto do dicionrio relacionado com uma chave.
Essa classe declarada entre chames {} e utiliza-se dois pontos
":" para separar objetos de suas respectivas chaves.
O construtor dessa classe chamado atravs do comando dict(x)

123

12.3 Mtodos da classe dict


12.3.1 O mtodo copy
Esse mtodo utilizado para retornar uma cpia do dicionrio.
a.copy () a dicionrio

12.3.2 O mtodo keys


O mtodo keys retorna uma lista contendo cada uma das chaves
de dicionrio
a.keys()a dicionrio

12.3.3 O mtodo clear


Esse mtodo remove todos os itens do dicionrio
a.clear () a dicionrio

12.3.4 O mtodo items


Esse mtodo retorna uma lista contendo cada dos itens
pertencentes ao dicionrio.
a.items()a dicionrio

124

12.3.5 O mtodo update


O mtodo update insere as chaves e itens de b em a
a.update (b)a dicionrio, b dicionrio

9.4 Exerccios
1) Escreva um programa que transforme uma lista em uma tupla.

2) Escreva um programa que transforme uma lista em dicionrio.

3) Escreva um programa que faa o merge de duas tuplas de 20


valores cada uma.

125

4) Escreva um programa que imprima duas strings como objetos


de uma tupla, objetos de uma lista e como a primeira sendo chave
de dicionrio da segunda.

5) Com base em seus conhecimentos sobre a linguagem, diga qual


ser o resultado dos seguintes comandos:
a)

b)

126

c)

d)

e)

f)

g)

h)
127

i)

12.5 Para saber mais


Para saber mais sobre tuplas e dicionrios

128

Capitulo XIII

Sets e alguns comandos teis


Sets so estruturas de dados do tipo conjunto. Um conjunto um
agrupamento sem noo de sequncia, sem elementos repetidos
e imutveis.
Ao transformarmos qualquer tipo composto de dados em um set,
eliminamos toda e qualquer repetio de integrantes. O
construtor da classe set o comando set(x). Observe o exemplo:

13.1 Mtodos de Sets


13.1.1 O mtodo add
Esse mtodo adiciona um objeto ao set
a.add(b) a set, b objeto

13.1.2 copy
Esse mtodo retorna uma cpia do set
129

a.copy() a set

13.1.3 difference
Esse mtodo retorna a diferena entre os conjuntos.
a.difference(b) a set, b set

13.1.4 discard
Esse mtodo descarta um objeto do set
a.discard(b) a set , b objeto

13.1.5 intersection
Esse mtodo retorna um set correspondente a interseo dos
dois sets apresentados.
a.intersection(b) a set , b set

130

13.1.6 symmetric_difference
Esse mtodo retorna a diferena simtrica entre os dois sets
a.symmetric_difference(b) a set, b set

13.1.7 union
Esse mtodo retorna a unio entre os dois sets
a.union(b)

13.2 O comando del


O comando del pode ser utilizado para apagar slices e variveis

131

13.3 Comando iteritems


Com esse comando torna-se possvel percorrer um dicionrio e
exibir sua chave simultaneamente.

13.4 O comando enumerate


Atravs do uso dessa comando pode-se exibir a o objeto e sua
respectiva posio ao percorrer um objeto sequencial qualquer.

13.5 Comando zip


O comando zip utilizado para percorrer simultaneamente duas
ou
mais
sequncias.
Observe
o
exemplo:

132

13.6 Comando reversed


O comando reversed usada para percorrer uma sequencia em
ordem reversa. Observe o exemplo:

13.7 Comando sorted


O comando sorted ordena uma lista sem uma sequncia sem
alter-la na memria, diferentemente do que ocorre no mtodo
sort de listas. Observe:

10.8 Exerccios
1) Escreva um programa que gere uma lista de 200 nmeros
aleatrios entre 1 e 50 e imprima: Uma lista ordenada e sem
repeties dos nmeros, a quantidade de nmeros que foram
retirados da lista inicial e a lista inicial, nessa ordem. Importante:
Voc no dever utilizar mais de duas variveis.

133

2) Escreva um programa que gere uma lista desordenada de


tamanho 30 e a imprima em ordem decrescente. Aps isso
imprima a lista desordenada inicial. Seu programa dever utilizar
somente uma varivel.

3) Escreva um programa que gere duas listas de tamanhos


aleatrios e imprima cada uma das duas listas e os termos que
pertencem s duas simultaneamente. O tamanho das listas no
deve superar 100.

134

3) Escreva um programa que gere duas listas de tamanhos


aleatrios e imprima cada uma das duas listas e os termos que
pertencem a uma mas no pertencem a outra. O tamanho das
listas no deve superar 100.

4) Escreva um programa que gere duas listas de tamanhos


aleatrios e imprima cada uma das duas listas e a diferena
simtrica entre elas. O tamanho das listas no deve superar 100.

135

136

Capitulo XIV

Funes
Funo ou sub-rotina a poro do cdigo que pode receber
argumentos de entrada e sada, realizando procedimentos e
retornando ou no um valor. Observe abaixo o esquema
resumido do funcionamento de um programa atravs de funes:

A utilizao dessas tcnicas facilitam a legibilidade e a


manuteno de um cdigo de software.

14.1 O conceito de escopo


Por definio, refere-se regio do cdigo onde as variveis so
diretamente acessveis. Durante qualquer execuo existem
escopos internos, onde so encontradas as variveis locais, o
escopo intermedirio contendo as variveis globais e o escopo
externo contendo variveis predefinidas.
137

14.2 O conceito de parmetro


Os parmetros tm como finalidade servir como ponto de
comunicao bidirecional entre a funo e o programa principal,
ou com uma sub-rotina hierarquicamente de nvel mais alto. Os
parmetros podem ser formais ou reais.
Sero parmetros formais quando forem declarados como
argumentos de entrada de uma funo, e sero tratados no
escopo local da mesma forma que seriam no escopo global.
Sero parmetros reais quando forem passados na chamada da
funo no escopo global.
Caso o leitor esteja meio confuso sobre esse assunto, no se
desespere, pois este ser exemplificado com comentrios na rea
de criao de funes.
14.2.1 Passagem de parmetro por valor
A passagem por valor caracteriza-se pela no alterao do valor
do parmetro real quando o parmetro formal manipulado
dentro da sub-rotina.
Em Python todas as passagens de parmetro se do dessa forma.
14.2.2 Passagem de parmetro por referncia
A passagem de parmetro por referncia caracteriza-se pela
manipulao do parmetro real quando o parmetro formal
manipulado dentro da sub-rotina.
A alterao efetuada no parmetro formal corresponde
alterao no parmetro real.
Em Python no existe a passagem por referncia, contudo ao
tratarmos de objetos do tipo mutvel, por razes lgicas sobre
seu tipo e funcionamento obtemos um resultado parecido com
esse tipo de passagem. Observe o seguinte cdigo:
138

Mostrar um exemplo de passagem por valor ?

Como esperado o resultado ser:

14.3 O comando return


O comando return (x) um comando que finaliza a funo e
retorna como valor dela o valor da varivel x.

14.4 Criando uma funo:


def nome da funo (argumento1,argumento2,...,argumento n):
Comando ou bloco de comandos
return(valor ser retornado) # caso a funo retorne algo
Continuao do cdigo

139

14.5 O conceito de varivel global e varivel local


Quando uma atribuio feita dentro de uma funo, por padro
o Python criar uma varivel dentro do escopo local da funo,
desse modo no ser possvel acessar a varivel de fora da dela.
Aps o termino da execuo da funo as variveis sero
destrudas.
As variveis globais so aquelas que podem ser acessadas em
qualquer rea, ou seja, aquelas que no esto dentro de um
escopo local. Dessa forma exemplos de variveis globais so
todas as variveis criadas at o presente momento.
Caso o leitor ainda assim no entenda segue um exemplo
especificando as variveis locais e globais.

14.6 O comando global


Mesmo dentro de uma funo, em alguns casos, interessante
tornar uma varivel local em global. Para realizarmos tal tarefa
utilizamos o comando global x, que far com que todas as
variveis x abaixo dessa chamada sejam tratadas como globais.
Exemplo:

140

Como podemos notar o comando global no alterou o valor


dentro da funo fora, permanecendo o valor 11, contudo dentro
do escopo global a varivel a passou a existir com o valor 5,
conforme foi definido na funo dentro.
Em casos simples, como o apresentado, o problema pode ser
facilmente evitado da forma apresentada a seguir:

14.7 O Comando type


O comando type(x) retorna o tipo da varivel x (int, float,
complex, str,...), permitindo assim que o programador verifique o
tipo do argumento de entrada da funo antes de pass-lo e
execut-la.
141

14.8 Atribuio default


Em alguns casos a entrada de dados do usurio algo opcional,
isso se d porque o programador pode definir um valor padro
para a entrada de argumentos que ser passado para a funo
caso no possua dados para a entrada.
def nome (argumento1=valor default 1, ... , argumento n = valor
default n):
comando ou bloco de comandos

14.9 Passando um nmero varivel de argumentos


A passagem de um nmero indefinido de argumentos sempre
dever aparecer aps os argumentos conhecidos, caso a funo
possua.
Declara-se a passagem de um nmero indefinido de entradas de
argumentos de uma funo atravs do uso do smbolo *.
Observe o exemplo:

142

14.10 Comandos do Python que recebem funes


como argumentos
14.10.1 O Comando filter
Esse comando recebe como argumentos uma funo e uma
sequncia. O comando aplica os elementos da sequncia na
funo e retorna uma outra sequencia apenas com os elementos
que a funo retornou verdadeiro. Os tipos retornados em casos
de string e tupla no sero modificados, nos demais sero
transformados em tipo lista.

14.10.2 O comando map


Esse comando, assim como o filter, recebe como parmetros de
entrada uma funo e uma sequncia. Esse comando aplica na
funo cada item da sequencia e retorna a lista de valores
retornados.

143

14.10.3 O comando reduce


O comando reduce aplica, recursivamente, uma operao a uma
sequncia de nmeros e chamada da seguinte forma:
reduce(funo, lista ou tupla)
Observe:

14.11 Exerccios
1) Escreva qual ser a sada de cada um dos seguintes comandos:
a)

b)

144

c)

2) Escreva um programa que calcule a soma de dois nmeros. Seu


programa dever conter a funo calcular

3)Uma sequencia dita feia quando possui nmeros que


possuem somente os fatores 2 ou 3.
145

Observe:
2, 3, 4, 6, 8, 9, 12, 16, 18, 24, 27, 32, 36, 48, 54, 64, 72, 81, 96,
108,...
Escreva um programa que contenha as funes de clculo e
impresso da sequencia.
Importante voc no deve imprimir o objeto do tipo lista!

4) Durante nossos primeiros contatos com a matemtica, fomos


ensinados uma tcnica facilitadora na soma, o chamado vai um.
Escreva um programa que leia dois nmeros inteiros e imprima o
valor da soma e a quantidade de vai um utilizada.

146

147

5) O Quicksort adota a seguinte estratgia rearranjar as chaves de


modo que as chaves "menores" precedam as chaves "maiores".
Divide-se a lista alvo em duas sublistas e ordenar e dividir as
sublistas recursivamente at que a lista completa se encontre
ordenada.
Os passos so:
1. Escolha um elemento da lista, denominado piv
(geralmente o central);
2. Rearranje a lista de forma que todos os elementos
anteriores ao piv sejam menores que ele, e todos os
elementos posteriores ao piv sejam maiores que ele. Ao
fim do processo o piv estar em sua posio final e
haver duas sublistas no ordenadas. Essa operao
denominada partio;
3. Recursivamente ordene a sublista dos elementos menores
e a sublista dos elementos maiores;
Escreva um programa que implemente o quicksort.

148

7) A pesquisa binria um mtodo de pesquisa extremamente


rpido para listas ordenadas. Sua ideia consiste em verificar se o
meio maior, menor ou igual ao valor indicado. Caso seja menor
o final da lista se torna o meio-1, caso seja maior o incio da lista
se torna o meio+1, em ambos os casos refaz-se a pesquisa at que
a lista se torne unitria. Caso seja igual, por razes obvias a
pesquisa encerrada.

149

Implemente a pesquisa binria para Python para uma lista


ordenada de tamanho aleatrio 100 itens.

150

Capitulo XII

Arquivos
At o momento, quando terminamos de executar o programa os
dados so perdidos. Ou seja, os dados no so armazenados em
nenhum lugar. Atravs do uso dos arquivos podemos armazenar
os dados de um programa de maneira que eles possam ser
usados (consultados) novamente, em uma nova execuo do
programa.

15.1 O comando open


O comando open abre um arquivo para a utilizao, ou seja,
retorna um objeto de tipo arquivo. Esse comando chamado da
seguinte forma:
open (diretrio_do_arquivo,modo) diretrio_do_arquivo :
string; modo: string
12.1.1 Os modos que um arquivo pode ser aberto
r Somente para leitura, valor default de abertura de arquivos
w Somente para escrita, caso exista qualquer tipo de
contedo o arquivo ser apagado ao ser aberto desse modo.

151

a Abrir o arquivo para adio. Qualquer escrita ser


adicionada ao fim do arquivo
Podemos tambm abrir o arquivo com esses 3 modos em binrio,
basta acrescentarmos o b a um desses modos. Observe o
exemplo:

15.2 O mtodo close


O mtodo close utilizado para fechar um arquivo e liberar
recursos. Vale ressaltar que qualquer tentativa de acessar o
arquivo novamente resultar em falha.
Esse mtodo normalmente no recebe argumentos e chamado
da seguinte forma:
nome_do_arquivo.close()
Observe o exemplo:

15.3 O mtodo write


O mtodo write utilizado para escrever uma string em um
arquivo. chamado da seguinte forma:
nome_do_arquivo.write(a) a: string
Observe os exemplos:

Podemos tambm acessar os dados escritos no arquivo atravs


do Windows acessando o diretrio e o arquivo especificado.
Observe:
152

15.4 O mtodo read


O mtodo read utilizado para ler uma determinada quantidade
de dados. Esse mtodo recebe um argumento opcional chamado
size, ou tamanho, que caso no seja especificado ser considerado
como o tamanho total do arquivo. Esse argumento importante
para evitar que programadores inexperientes tentem abrir
arquivos cujo contedo maior do que a memria disponvel no
computador.
Esse comando chamado da seguinte maneira:
Nome_do_arquivo.read(tamanho) tamanho em bytes.
Vale ressaltar inclusive que uma vez atingido o fim do arquivo
(EOF), o comando retorna uma string vazia ().
Observe o exemplo com base em nosso arquivo escrito
anteriormente:

153

15.5 O mtodo readline


O mtodo readline l uma nica linha do arquivo, avaliado
atravs do caractere de retorno de linha (\n) e que ser mantido
na impresso aps a chamada do mtodo. Em sua segunda
chamada l a segunda linha do arquivo, em sua terceira, a terceira
linha e assim sucessivamente at encontrar o EOF. Caso seja
chamado aps o final do arquivo o mtodo retornar uma string
vazia.
O readline declarado da seguinte forma:
Nome_do_arquivo.readline()
Observe o exemplo:

15.6 O mtodo readlines


O mtodo readlines retorna uma lista, onde cada elemento uma
linha do arquivo. Ela recebe como parmetro opcional o sizehint,
que informa a quantidade de bytes aproximado que ser lido,
essa quantidade ser ultrapassada em caso de necessidade de
finalizar a linha.
O mtodo readlines declarada da seguinte forma:
Nome_do_arquivo.readlines(sizehint)

154

Aps ser lido o EOF, caso seja chamado novamente o mtodo


retornar uma lista vazia.
Observe o exemplo:

15.7 O mtodo tell


O mtodo tell retorna um inteiro que indica a posio corrente de
leitura ou escrita no arquivo, medida em bytes.
Esse mtodo chamado da seguinte forma:
Nome_do_arquivo.tell()

15.8 O mtodo seek


O mtodo seek utilizado para deslocar a posio corrente de
leitura ou escrita. Recebe como atributos deslocamento e
de_onde.
Esse mtodo chamado da seguinte forma:
Nome_do_arquivo.seek(deslocamento,de_onde) deslocamento
um inteiro medido em bytes a serem deslocados e de_onde
pode assumir valores os seguintes valores: 0 para indicar o inicio
do arquivo (valor default); 1 para indicar a posio atual e 2 para
indicar o fim do arquivo.

15.9 O mtodo truncate


Esse mtodo trunca o arquivo em determinado tamanho. O
tamanho por default a posio atual.
155

Independente do valor de entrada para o tamanho a posio no


ser alterada.
Importante: Se o valor do tamanho exceder o tamanho do
arquivo atual os resultados podem variar dependendo do sistema
operacional. Alm disso, esse mtodo no funcionar se o arquivo
estiver aberto como somente para leitura.

15.10 Para saber mais


Procure sobre o argumento opcional buffering do comando open
e sobre outros mtodos de arquivos.

156

Capitulo XVI

Mdulos
Modulos so arquivos contendo o cdigo python que podem ser
incorporados a novos programas, a fim de evitar ter de
reescrever o material a ser rodado pelo interpretador e facilitar a
manuteno do programa.

16.1 Criando e executando um mdulo


Antes de executar um mdulo devemos cri-lo e salva-lo. Observe
que o mdulo dever ser salvo com a extenso .py , que como o
programador j deve ter percebido, torna o arquivo reconhecvel
pelo interpretador de Python e evita a perda do esquema de
cores.
Os mtodos de importao seguem os mesmos padres
especificados no incio do livro com o mdulo math, tornando-se
desnecessria a exemplificao. Observe um passo a passo
simples de utilizao de mdulos:

Um aviso importante que os caracteres do mdulo devem ser


somente ASCII, dessa forma o mdulo acima retornaria erro ao
ser chamado. A forma correta :

157

Observe aqui um pequeno passo a passo para sua utilizao:

158

Para iniciantes, o modo mais fcil de evitar problemas salvar o


cdigo fonte no mesmo diretrio do mdulo. A execuo do
cdigo fonte geraria o seguinte output:

159

Das könnte Ihnen auch gefallen