Você está na página 1de 104

Texto da disciplina: Linguagem Phyton 2.

7
1. Ciência de Dados

Alfredo Boente
professor@boente.eti.br

1.1. DATA SCIENCE

Nos dias de hoje, ter acesso a dados, informações e, acima de


tudo o conhecimento, faz com que empresas tenham vantagem
competitiva num mercado totalmente mutável e altamente concorrente.
Data Science ou Ciência de Dados permite obter esse acesso a
estes dados de forma a interpretá-los da melhor forma possível a fim de
se obter vantagem competitiva.
De acordo com Grus (2016) Data Science tem sido chamada de “o
emprego mais sexy do Século 21”, provavelmente por alguém que
nunca tenha visitado um quartel do corpo de bombeiros. Segundo o
mesmo autor, Data Science é um campo em evidência e está em alta;
não requer muita investigação para encontrar prognósticos de analista
de que, nos próximos dez anos, serão necessários bilhões e bilhões de
cientistas de dados a mais do que existem nos dias de hoje.
Uma definição definitiva acerca de Data Science ainda é muito
difícil de encontrar. A Figura a seguir tenta expressar o entendimento
sobre Data Science.
Data Science – Onde se encontra?

De acordo com Mueller (2016) a ciência de dados refere-se a


exploração e análise de dados disponíveis a fim de desenvolver a
compreensão dos mesmos, buscando extrair o conhecimento para
formulação de ações e tomadas de decisão, com o objetivo de obter
vantagem competitiva.
A ciência de dados representa a interseção de três esferas
cognitivas do conhecimento: Habilidade de hacker, conhecimento de
estatística e matemática e competências significativas (MARTINS,
2015).
A habilidade de hacker e o conhecimento em estatística e
matemática se refere à especialidade de aprendizagem de máquina,
ligada a inteligência computacional. A habilidade de hacker e a
competência significativa se refere à zona de perigo, e, por fim, a
competência significativa e o conhecimento de estatística e matemática
se refere a pesquisa tradicional.
Mesmo ainda sendo muito difícil de encontrarmos uma definição
realmente concreta acerca de Data Science, o importante é saber como
fazer e o que fazer com os dados que serão encontrados para se tirar
alguma vantagem disso.

1.2. DATA SCIENCESTER

Martins (2015) define Data Sciencester como uma rede social


especializada em assuntos de Data Science, própria para cientistas de
dados.
Apesar de ser específica para cientista de dados, a Data
Sciencester nunca investiu em construir sua própria atividade de Data
Science, talvez por possuir uma forte mentalidade de “não foi inventado
aqui” (GRUS, 2016).
A rede social própria para cientista de dados, Data Sciencester,
ainda encontra-se muito excipiente precisando ser melhor configurada e
formalizada para que os cientistas de dados possam ter um melhor
aproveitamento daquilo que a ciência de dados possa lhes proporcionar,
para transformar dados, informações e conhecimentos em vantagem
competitiva para as empresas.
De acordo com Provost e Fawcett (2015) a Data Sciencester, rede
social para especialistas em Data Science, precisa ser melhor
trabalhada e configurada a fim de proporcionar aos cientistas de dados,
realmente algum aprendizado sólido.

1.3. CIENTISTA DE DADOS

Entende-se por Cientista de Dados o profissional capaz de


processar, analisar e perceber dados a fim de obter uma melhor tomada
de decisão (PROVOST e FAWCETT, 2015).
De acordo com Davenport e Patil (2012) cientistas de dados são
uma nova geração de especialistas analíticos que têm as habilidades
técnicas para resolver problemas complexos.

Cientista de Dados

O cientista de dados, fora sua especialidade, tem que apresentar


criatividade, curiosidade e conhecimento de mundo e, com isso, será
capaz de traduzir dados em pról de certa tomada de decisão.

Portanto, os cientistas de dados são de certa forma, parte


matemáticos, parte cientistas da computação e parte analistas de
tendências, em vistas de obter vantagem competitiva com foco no
negócio das empresas.
1.4. DATA SCIENCE PARA NEGÓCIOS

Hoje em dia, qualquer organização, tem seu negócio globalizado e


já faz parte do mercado de dados e informações digitais, pois a internet
está presente na vida de qualquer empresa, independentemente do seu
setor de negócios.
Na internet, os dados apresentam fluxos mais rápidos tomando
uma proporção gigantesca na necessidade de seu efetivo
armazenamento. Isto porque o mundo gera informação exponencial e
ao mesmo tempo, todos querem uma fatia desse bolo, dado. É preciso
saber que os dados permitem às empresas entenderem seus clientes,
produtos e processos muito melhor, a fim de obter, portanto, vantagem
competitiva.
Dessa forma a ciência de dados difere das análises estatísticas e
da ciência da computação em seu método que é aplicado a dados
coletados usando princípios científicos e que, de certa forma, por esta
razão, para a necessidade crescente desta nova abordagem, está
relacionada ao Big Data e Cloud Computing, que demanda o uso de
diferentes tecnologias à análise estatística e de dados, propriamente
dita.
Para Martins (2015) a análise de dados tradicional nas empresas
têm sido tipicamente implantada para explicar tendências na extração
de modelos interessantes dos dados, a partir de questões bem-
formuladas, a fim de aprimorar o processo de tomada de decisão nas
organizações.
Geralmente a análise de dados apresenta como referência a
arquitetura de negócios que pode ser definida como um conjunto de
elementos organizados que se relacionam entre si, e representam a
estrutura organizacional e comportamental de um sistema de negócio,
permitindo a visualização das possíveis abstrações dos processos e das
estruturas chave do negócio (BOENTE, 2015).
Contexto da Arquitetura de Negócios

Na verdade, a arquitetura de negócio nada mais é que uma


descrição dos aspectos significativos da organização. A arquitetura do
aplicativo é uma descrição dos aplicativos de software que suportam o
negócio, incluindo como esses aplicativos são utilizados e como
interagem uns com os outros.
Contudo, a ciência de dados está procurando descobrir
conhecimento a partir de uma quantidade grande e pesada de dados
que podem ser usadas para tomar decisões e fazer previsões, e não
simplesmente a interpretação de números, como é pensada pela
maioria das pessoas.

1.5. MODELANDO DATA

Num mercado altamente concorrente e globalizado, onde o


importante é ser digital, acima de tudo, é crucial para toda a empresa
estar em perfeito alinhamento com uma filosofia baseada na ciência de
dados para tomar decisões direcionadas a fim de conseguir vantagem
competitiva.
Modelagem de Dados Baseado em Ciência

A modelagem baseada em ciência de dados consiste em definir o


que precisa ser encontrado a fim de se aprimorar um processo de
tomada de decisão com base em dados, informações e conhecimento,
visando gerar vantagem competitiva para as organizações.
A partir dessa modelagem, muitos arquivos são gerados, desde
datasets, scripts, roteiros, dicionários de dados, documentações
diversas etc.
De acordo com Martins (2015) todo o dado é útil quando
analisado cuidadosamente a partir do foco de negócio de certa
organização, visando o aprimoramento do processo de tomada de
decisão de uma empresa.

1.6. PENSANDO EM ANÁLISE DE DADOS

A análise de dados é fundamental para o sucesso de qualquer


empresa, independentemente do seu setor de negócio. Por este motivo,
a tendência é que o mundo dos negócios seja baseado na análise de
dados concisos para aprimoramento do processo de tomada de decisão.
Neste viés, surge a ciência de dados, pois a maioria dos dados,
informações e conhecimentos que as empresas podem deter, estão
disponíveis na grande teia mundial de computadores, a internet,
dispostos em Big Data, acessáveis 24 horas por dia, 7 dias na semana,
por meio da tecnologia de Cloud Computing.
As empresas são influenciadas por fatores externos e internos,
sendo de importância vital para o sucesso da organização o processo de
coleta, organização, análise, compartilhamento e monitoramento de
dados, informações e conhecimento, que ofereçam suporte à gestão de
negócios (CORRAR, PAULO e DIAS FILHO, 2007).
Então, a ciência de dados permite o acesso, análise e tratamento
desses dados, que estão organizados logicamente em gigantescos
repositórios de dados denominados Big Data, acessíveis pela internet
através da tecnologia de computação em nuvem.
De acordo com Provost e Fawcett (2015) surge o termo Big Data
Analytics que nada mais é que o trabalho analítico e inteligente de
grandes volumes de dados, estruturados ou não-estruturados, que são
coletados, armazenados e interpretados por produtos de software de
altíssimo desempenho.

1.7. BIG DATA

Big Data se transformou em uma expressão genérica, mas em


sua essência, ela apresenta três desafios para as organizações. Em
primeiro lugar, os líderes de negócios devem implementar novas
tecnologias e, em seguida, prepararem-se para uma revolução em
potencial na coleta e mensuração de informações. Mais importante que
isso, a organização como um todo deve se adaptar a essa nova filosofia
sobre como as decisões são tomadas se o real valor do Big Data for
compreendido. Um segundo aspecto importante do Big Data é o
potencial de novas formas de mensuração. Por exemplo, já está
amplamente disponível a tecnologia que permite que você transmita
seus dados de saúde a seu médico enquanto você se exercita.
Finalmente, as organizações devem se confrontar com uma nova
filosofia sobre a tomada de decisões.
Hoje vivemos em um mundo que está sempre conectado, onde as
preferências dos consumidores mudam a cada hora. Eles podem checar
vários canais ao mesmo tempo e traçar uma série de caminhos
inusitados e diferentes para efetuar uma compra. O processo de compra
se parece mais com um novelo de lã do que com o funil de compra
previsível, serial ou linear que tínhamos no passado. Isso significa que
as organizações precisam estar preparadas para implantar novos canais
para tomada de decisão, alguns deles automatizados, que permitem
respostas rápidas e ágeis às informações dos clientes.

O Big Data

De acordo com Amaral (2016) Big Data refere-se ao gigantesco


volume de dados, estruturados e não estruturados, que impactam os
negócios no dia a dia.
No entanto, o mais importante não é a quantidade de dados, e
sim o que as empresas fazem com os dados que realmente importam.
Em outras palavras, é importante saber como garimpar os dados certos,
na hora certa para o momento certo de tomada de decisão.
Quando o termo Big Data é associado a Cloud Computing,
significa dizer que se tem um gigantesco armazém de dados disponível
pela web, cujos dados estão armazenados em inúmeros servidores
dispostos em várias partes do mundo, remotamente ligados e
disponíveis 24 horas por dia.

1.8. CLOUD COMPUTING

Hoje, as empresas estão inseridas num mundo totalmente


globalizado e num mercado altamente mutável, tendo a necessidade de
sempre buscar mudanças em sua estrutura organizacional visando uma
melhor forma de adequação de suas estratégias junto a um mercado
altamente competitivo.

As empresas também passam por transformações crescentes


ligadas à questão da tecnologia. Tais transformações levam a
modificações necessárias, não apenas de equipamentos, mas também
nos processos de trabalho, na gestão de pessoas e na reestruturação de
seu parque tecnológico.
A implantação de projetos de Cloud Computing requer um
redesenho da organização orientado por uma redefinição necessária de
hardware, software, network e peopleware, já que existe uma eminente
conexão estratégica entre pessoas, capital intelectual, e um conjunto de
novas tecnologias (BOENTE, 2015).
A Cloud Computing, computação em nuvem, refere-se a um
conjunto de recursos virtuais facilmente utilizáveis e acessíveis, tais
como hardware, software, plataformas de desenvolvimento e serviços
(VERAS, 2013).
Computação em nuvem

O modelo de Cloud Computing é formado por cinco características


essenciais, quatro modelos de implantação e três modelos de serviços.
As cinco características essenciais da computação em nuvem são:
(1) Sob demanda (On-demand self-service): fornecedores de
serviços em nuvem oferecem diversos recursos como
armazenamento e processamento, são habilitados e
configurados segundo as necessidades da empresa, sem
nenhum tipo de intervenção por parte de especialistas com o
servidor, perfazendo, portanto, certa economia financeira, já
que o cliente paga apenas pelos serviços que são efetivamente
contratados;
(2) Acesso à rede (Broad network access): para fornecer ou
utilizar um serviço em nuvem é preciso acessar uma rede
padrão, através de dispositivos que possuam uma plataforma
específica. Tal acesso pode ser feito por meio de laptops,
tablets, smartphones, computadores pessoais, dentre outros;
(3) Compartilhamento de recursos (Resource pooling): os
provedores de serviços em nuvem utilizam um modelo de
compartilhamento de recursos conhecido como multi-inquilino
(Multi-tenancy), que permite o compartilhamento dos recursos
físicos com vários usuários virtualmente, expansíveis de acordo
com a demanda requerida por cada usuário, de modo que cada
recurso fique isolado em sua máquina. A localização dos dados
de cada usuário não é exata, dificultando, portanto, o seu
controle total, entretanto alguns provedores de serviços em
nuvem já permitem que o usuário escolha a localização do
Data Center (país, estado etc.);
(4) Controle de serviços (Measured service): implica no
controle de todos os recursos contratados pelo usuário com a
possibilidade de monitoramento, controle e relatórios de todos
os recursos utilizados, dando maior transparência para quem
contrata os serviços e para o próprio fornecedor de nuvem.
(5) Elasticidade imediata (Rapid elasticity): capacidade de
aumentar ou diminuir recursos físicos não utilizados dos
servidores, este na maioria das vezes é realizado de modo
automático ou em alguns casos controlados pelos funcionários
do provedor. Essa elasticidade imediata evita serviços ociosos,
possibilitando, portanto, serviços mais baratos para os clientes,
já que o provedor procura utilizar todos os recursos físicos do
Data Center.

As cinco característica essenciais da Cloud Computing.


Os modelos de implantação de projeto de cloud computing são os
seguintes:
(1) Público (Public Cloud): as infraestruturas estão disponíveis
para o uso do público em geral e são gerenciadas pelas
empresas fornecedoras de serviços de nuvem de forma que
o usuário paga pelo que usar. A infraestrutura da nuvem
pública são instaladas nas empresas fornecedoras e, muitas
vezes, os usuários não possuem conhecimento da
localização dos dados;
(2) Privado (Private cloud): as infraestruturas são criadas para
o uso exclusivo e particular de uma empresa, permitindo
um maior controle sobre os dados. As nuvens privadas são
gerenciadas pelo departamento de TI, terceirizadas ou de
forma combinada, permitindo, portanto, que esses recursos
sejam utilizados para fornecer serviços internos ou
utilizados como mecanismo de regras de negócio da
empresa. A infraestrutura da nuvem privada pode estar
localizada dentro ou fora da empresa;

Os quatro modelos de implantação de Cloud Computing

(3) Comunitário (Community cloud): as infraestruturas são


compartilhadas por várias organizações que possuem
propósitos e interesses comuns. A infraestrutura da nuvem
comunitária pode ser gerenciada pelo departamento de TI
das empresas, terceirizadas ou de forma combinada, e a
sua infraestrutura pode estar localizada dentro ou fora das
empresas;
(4) Híbrido (Hybrid cloud): as infraestruturas são compostas
por dois ou mais modelos de implantação (nuvem privada,
nuvem comunitária, nuvem pública). Em uma nuvem
híbrida, os modelos de implantação trabalham como se
fossem uma única nuvem. Em linha gerais, as empresas
buscam utilizar esse modelo para ter maior controle sobre
os dados.

Os três modelos de serviços disponibilizados pela computação em


nuvem são:
(1) Software como Serviço (Software as a Service - SaaS):
modelo de serviço onde o fornecedor disponibiliza
aplicativos que são acessados por meio de Web Browsers
(navegadores web) ou via desktop. Esse modelo vem
revolucionando a forma de como os aplicativos são
comercializados, uma vez que o usuário não compra a
licença do aplicativo como normalmente acontece, mas paga
apenas pelo serviço que utiliza. Existem diversos vários
serviços disponíveis como Google Docs, Google Tradutor,
Photoshop Express Editor dentre outros, alguns gratuitos e
outros pagos.
Os três serviços de computação em nuvem

(2) Plataforma como Serviço (Platform as a Service - PaaS):


modelo de serviço destinado a desenvolvedores de soluções
para Cloud Computing, pois fornece um ambiente com
sistema operacional, frameworks para desenvolvimento de
aplicativos em nuvem, controle de transações, serviços e
também hospedagem para os aplicativos desenvolvidos
(cloud apps). Cada provedor fornece suas próprias
bibliotecas de desenvolvimento, banco de dados e
infraestrutura para o desenvolvedor. Aqui o usuário não
pode administrar ou controlar os recursos da infraestrutura
como processamento, armazenamento, memória entre
outros recursos, mas tem controle sobre os aplicativos
desenvolvidos e as configurações no ambiente de
hospedagem do servidor.
(3) Infraestrutura como Serviço (Infrastructure as a Service
- IaaS): modelo de serviço que oferece controle sobre
processamento, armazenamento, redes e outros recursos
básicos da computação em nuvem. Aqui o usuário poderá
instalar o sistema operacional e as aplicações para o
funcionamento da máquina virtual, além do total acesso
para administrar ou controlar a infraestrutura do servidor,
mas tem controle sobre o sistema operacional,
armazenamento das informações, controle de memória,
aplicativos implantados, e em alguns casos, o controle do
firewall do host e recursos da rede pelo painel de
administração do fornecedor.

Mudança no perfil dos serviços

Dessa forma existe uma mudança significativa no perfil dos


serviços, quando estamos trabalhando com Cloud Computing.
Assim, quando uma empresa implanta um novo tipo de
tecnologia, em particular Cloud Computing, a utilização desta estará
sujeita às influências do clima e da cultura organizacional, requerendo,
portanto que sejam analisados como peças fundamentais na gestão
estratégica de qualquer empresa, independentemente do seu porte.

BIBLIOGRAFIA

AMARAL, Fernando. Introdução à Ciência de Dados: Mineração de


Dados e Big Data. Editora Alta Books, 2016.
BOENTE, Alfredo. Projeto de Cloud Computing. Apostila do Curso de
Pós-Graduação MBA em Computação em Nuvem da Universidade
Estácio de Sá, 2015.
CORRAR, Luiz J.; PAULO, Edilson; DIAS FILHO, José Maria. et al.
(Coordenadores). Análise Multivariada para os cursos de Administração,
Ciências Contábeis e Economia. Editora Atlas, 2007.
DAVENPORT, Thomas Hayes; PATIL, Dhanurjay. Data Scientist: The
Sexiest Job of the 21st Century, Harvard Business Review, October,
2012.
GRUS, Joel, Data Science do Zero, Primeiras Regras com o Phyton,
Editora Alta Books, 2016.
MUELLER, John Paul, Começando a Programar em Phyton, para leigos,
Editora Alta Books, 2016.
MARTINS, João Pavão, Programação em Phyton, Introdução à
Programação Utilizando Múltiplos Paradigmas, Editora IST Press, 2015.
PROVOST, Foster; FAWCETT, Tom. Data Science for Business: What you
nedd to know about data mining and Data-Analytic Thinking, Spring,
2015.
VERAS, Manoel , Arquitetura de Nuvem, Amazon Web Services (AWS),
Ed. Brasport, 2013.

Texto da disciplina: Linguagem Phyton 2.7


2. Conhecendo o Phyton

Alfredo Boente
professor@boente.eti.br

2.1. HISTÓRICO DO PHYTON

Neste capítulo iremos conhecer a linguagem de programação


Phyton 2.7, suas características e particularidades.
Python é uma linguagem de programação interpretada, de código-
fonte aberto e disponível para diversos tipos de sistemas operacionais.

Símbolo do Phyton

Diferentemente de outras linguagens de programação tradicional


como C# e Java, Phyton é uma linguagem interpretada e não compilada
(traduzida para uma linguagem da máquina), mas sim, lida e
“interpretada" por outro programa (chamado de interpretador) que
traduz para a máquina o que seu programa quer dizer.
Os integrantes e/ou participantes da DataSciencester, quando
passam por treinamentos em suas empresas, em linha geral, são
obrigados a estudar a linguagem de programação Phyton. Dessa forma,
todo o cientista de dados domina ou, pelo menos, simplesmente tem a
obrigação de conhecer a linguagem de programação Python.
De acordo com Grus (2016) qualquer pessoa pode baixar o
Phyton em phyton.org (https://phyton.org/).

Phyton Software Fundation


A partir daí um download poderá ser feito para se obter uma
versão da linguagem de programação Phyton (Phyton 2.7, no nosso
caso).

Página para download do Phyton

Embora a versão mais recente seja o Phyton 3.4, todos os códigos


fonte que iremos trabalhar neste curso foram escritos em Phyton 2.7,
pois, segundo Grus (2016), a comunidade do Data Science ainda está
presa a esta versão.
Depois de instalado, um ícone aparecerá na sua área de trabalho
para que você possa acessar o ambiente de programação Phyton.

Ícone do Phyton
A seguir, após a execução do Phyton, uma tela com o ambiente
de programação Phyton, permanecerá aberta para criação e adição de
programas de computador.

Ambiente de programação Phyton

Para a escrita dos códigos fonte em Phyton, sugiro a instalação e


uso do editor Notepad++ (https://notepad-plus-plus.org/). O
Notepad++ é um editor de texto e de código fonte aberto sob a licença
GPL (GNU General Public License). Ele é distribuído como software
livre e suporta várias linguagens de programação rodando sob o
sistema operacional Windows e Linux.
Download do Notepad++

Em seguida, pode-se observar a tela do ambiente de edição de


programas (código fonte Phyton) disponibilizado pelo Notepad++:

Ambiente do Notepad++

2.2. A LINGUAGEM DE PROGRAMAÇÃO


Python é foi concebido no final do ano de 89 por Guido van
Rossum no Instituto de Pesquisa Nacional para Matemática e Ciência
da Computação (CWI), nos países baixos. Um dos focos primordiais da
linguagem de programação Python era aumentar a produtividade do
programador. Foi desenvolvida com base na linguagem ABC e possui
parte da sintaxe derivada da linguagem C.

Python é uma linguagem de programação de alto nível,


interpretada, de script, orientada a objetos, de tipagem dinâmica e forte
(MUELLER, 2016).
Phyton é de código aberto e gerenciado pela organização sem fins
lucrativos denominada Phyton Software Fundation. Ela é uma
linguagem de programação fortemente utilizada na DataSciencester por
todos os cientistas de dados.

Rede Social - DataSciencester

Como se trata de uma linguagem de programação voltada para


soluções script, embasada sob o paradigma orientado a objetos, é ideal
para os cientistas de dados de toda a DataSciencester.

2.3. CARACTERÍSTICAS E PARTICULARIDADES


Python é uma linguagem de propósito geral de alto nível, que
apresenta como características ser orientada a objetos, imperativa,
funcional e procedural. Devido as suas características, ela é
principalmente utilizada para processamento de textos, dados
científicos e criação de CGIs para páginas dinâmicas para a web.
Os cientistas de dados costumam utilizar a versão Phytyon 2.7,
embora a versão 3.4 seja a mais atual.
O vocabulário do Python é bastante reduzido. Chamamos este
“vocabulário” de “palavras reservadas”. Estas são as palavras que
possuem um significado muito especial em Python. Quando o Python vê
estas palavras em um programa, elas possuem um, e somente um
significado em Python.
Phyton possui o que chamamos de tipagem dinâmica, ou seja,
ela pode mudar a cada nova entrada de dados em uma variável. Com
isso a quantidade de tempo de planejamento prévio é reduzido e é
considerado um mecanismo importante para a flexibilidade e
simplicidade das funções da linguagem de programação Phyton.
Outra característica importante: em Phyton não existe um
delimitador específico para blocos de código. Então, em Phyton, essa
“delimitação” é feita por meio de indentação, garantindo, portanto, que
o código Phyton seja sempre legível.

>>> print “O numero eh “


... if a > 0:
... print “positivo”
... else:
... print “negativo”
... exit( )

O segredo da linguagem de programação Phyton é a indentação


das linhas de código, delimitando, portanto, os blocos de código de um
programa de computador.
2.4. TERMINOLOGIA

As linguagens de programação, em sua grande maioria, são ditas


compiladas, pois necessitam de um programa especial (denominado
compilador) para traduzir para máquina o que o programa quer
realmente dizer.
Por definição, um compilador é um programa de computador que,
a partir de um código fonte escrito em uma linguagem de programação,
cria um programa semanticamente equivalente, denominado código
objeto.

Processo de Compilação

Portanto, um compilador traduz um programa de uma linguagem


de alto nível, textual, facilmente entendida por um pelo homem, para a
linguagem de máquina, baixo nível, específica para um processador e
sistema operacional.
Tecnicamente, o processo de compilação é composto de duas
fases: análise e síntese. A análise tem como objetivo entender o
código fonte e representá-lo em uma estrutura intermediária. A síntese
constrói o código objeto a partir desta representação intermediária.
A linguagem de máquina parece ser bastante simples já que só
existem zeros e uns (0 e 1), códigos binário, mas sua sintaxe é ainda
mais complexa do que Python. Dessa forma, pouquíssimos
programadores já escreveram em linguagem de máquina.
Costuma-se construir diversos tradutores para permitir que
programadores escrevam em linguagens de alto nível, tais como Python
ou JavaScript, e esses tradutores convertem os programas para
linguagem de máquina para executarem pela UCP.
Como a linguagem de máquina está associada ao hardware do
computador, ela não é portável em diferentes tipos de hardware.
Programas escritos em linguagens de alto nível podem ser utilizados em
diferentes computadores, utilizando um interpretador diferente ou
recompilando o código para criar uma versão do programa em
linguagem de máquina para o novo computador (de nova arquitetura).
Interpretadores, são programas de computador que leem um
código fonte de uma linguagem de programação interpretada, como é o
caso da linguagem Phyton, e o converte em código executável.
O interpretador lê e “interpreta”, linha a linha do código fonte,
convertendo em código objeto ou bytecodes a medida que vai
executando o programa e, em alguns casos, converte todo o código
fonte, somente para depois executá-lo.
Processo de Interpretação

Em princípio, pode-se implementar compiladores e


interpretadores para qualquer linguagem de programação. A escolha de
criar um compilador ou interpretador para certa linguagem de
programação depende exclusivamente da proposta da própria
linguagem de programação.

2.5. ESCREVENDO PROGRAMAS

Escrever programas no interpretador Python é uma boa maneira


de conhecer as características da linguagem, mas não é recomendado
para resolver problemas mais complexos. Quando queremos escrever
um programa, usamos um editor de texto para escrever instruções em
Python em um programa, denominado de script (recomenda-se o editor
Notepad++). Por convenção, Scripts em Python possuem nomes
terminados com “.py”. Dessa forma, um programa em Phyton sempre
apresentará a extensão “.py”.
Observe, por exemplo, a linha de código do “programa1.py”.

>>> print “Alo Mundo!”

Em geral, você não tem apenas uma linha de código de


programação, seja em Phyton, seja em qualquer outra linguagem de
programação. Veja:

>>> print “Primeira Instrução”


... print “Segunda Instrução”
... print “Terceira Instrução”
... print “Quarta Instrução”
... print “Enésima Instrução”

2.6. BLOCO DE PROGRAMAS

Existem alguns padrões conceituais de baixo nível que usamos


para construção de programas de computador. Estas construções não
são apenas para programas em Python, eles são parte de todas as
linguagens de programação, desde linguagem de máquina até
linguagens de alto nível. Temos então:
- entrada: permite ao programa obter dados por meio de leitura
de dados de um arquivo, ou até mesmo por meio de um sensor como
microfone ou GPS, ou simplesmente digitados via teclado.
- saída: permite mostrar os resultados dos programas na tela ou
impressora, ou armazena-os em um arquivo.
- execução sequencial: permite executar as sentenças uma
após a outra na ordem em que aparecem no script, seguindo sua ordem
de escrita.
- execução condicional: permite verificar algumas condições e
executa uma rotina ou comando específico acerca da condição
determinada.
- execução de repetição: permite executar um conjunto de
instruções repetidamente.
- reuso: permite a reutilização de instruções em outros
programas.

Tanto em Phyton como em qualquer outra linguagem de


programação, existem três tipos de erros clássicos decorrentes a um
programa de computador. Na medida em que seus programas se
tornem sofisticados, você poderá encontrar os seguintes tipos de erros
de programação:
- Erros de sintaxe: Um erro de sintaxe significa que você violou
as regras de “gramática” do Python. Python faz o possível para apontar
para a linha e o caractere que ele percebeu que está confuso. A única
coisa complicada em erros de sintaxe é que às vezes os erros que
precisam ser corrigidos estão antes do local que o Python identificou.
Dessa forma, a linha e o caractere que o Python indicar em um
erro de sintaxe é apenas um ponto inicial de investigação.
- Erros de lógica: Um erro de lógica ocorre quando o programa
está com a sintaxe correta, mas há um erro na ordem das sentenças e
talvez um erro na relação entre as sentenças. Um programa de
computador apresenta linhas de instruções sequenciais que devem ser
escritas logicamente para que o resultado do programa faça algum tipo
de sentido no contexto ao qual foi implementado.
- Erros de semântica: Um erro de semântica ocorre quando sua
descrição de passos está sintaticamente correta e na ordem correta,
mas há simplesmente um erro no programa. O programa está
perfeitamente correto, no entanto não faz o que deveria fazer.
BIBLIOGRAFIA

AMARAL, Fernando. Introdução à Ciência de Dados: Mineração de


Dados e Big Data. Editora Alta Books, 2016.
BOENTE, Alfredo. Projeto de Cloud Computing. Apostila do Curso de
Pós-Graduação MBA em Computação em Nuvem da Universidade
Estácio de Sá, 2015.
CORRAR, Luiz J.; PAULO, Edilson; DIAS FILHO, José Maria. et al.
(Coordenadores). Análise Multivariada para os cursos de Administração,
Ciências Contábeis e Economia. Editora Atlas, 2007.
DAVENPORT, Thomas Hayes; PATIL, Dhanurjay. Data Scientist: The
Sexiest Job of the 21st Century, Harvard Business Review, October,
2012.
GRUS, Joel, Data Science do Zero, Primeiras Regras com o Phyton,
Editora Alta Books, 2016.
MUELLER, John Paul, Começando a Programar em Phyton, para leigos,
Editora Alta Books, 2016.
MARTINS, João Pavão, Programação em Phyton, Introdução à
Programação Utilizando Múltiplos Paradigmas, Editora IST Press, 2015.
PROVOST, Foster; FAWCETT, Tom. Data Science for Business: What you
nedd to know about data mining and Data-Analytic Thinking, Spring,
2015.
VERAS, Manoel , Arquitetura de Nuvem, Amazon Web Services (AWS),
Ed. Brasport, 2013.

Texto da disciplina: Linguagem Phyton 2.7


3. Explorando o Phyton 2.7

Alfredo Boente
professor@boente.eti.br

3.1. VALORES E TIPOS


Valores são elementos básicos no qual um programa trabalha,
como por exemplo, uma letra ou um número (MARTINS, 2015). Os
valores apresentam tipos diferentes. Por exemplo, 1 representa um
valor do tipo inteiro, 5.5 representa um valor do tipo real e ‘Boente’
representa um valor do tipo cadeia de caracteres, também conhecida
como string.
O interpretador Phyton pode identificar facilmente strings porque
elas são escritas entre aspas simples, ‘Boente’, por exemplo.
Veja as instruções, a seguir:

>>> print 1
1
>>> print 5.5
5.5
>>> print ‘Boente’
Boente

Note que os valores do tipo inteiro e real não precisaram ser


colocados entre aspas simples. No entanto, a string ‘Boente’, teve esta
necessidade, para ser exibida.
Para a exibição dos valores utilizamos a instrução print, que se
refere a um comando de saída, output.
O interpretador Phyton também poderá auxiliá-lo a identificar o
tipo de um valor, caso tenha alguma dúvida. Observe a seguir:

>>> type (1)


<type ‘int’>
>>> type (5.5)
<type ‘float’>
>>> type (‘Boente’)
<type ‘str’>
Note que a instrução type foi utilizada para identificar o tipo
referente a certo valor. No nosso exemplo, no primeiro caso inteiro
(int); no segundo caso real (float) e no terceiro caso string (str).
A seguir, são apresentados os principais tipos builtin da linguagem
de programação Python:
int: para números inteiros
float: para números reais
str: para cadeia de caracteres (String)
bool: armazena True ou False (Lógico ou Booleano)
list: para agrupar um conjunto de elementos (Lista de elementos)
tupla: igual ao tipo list, porém, imutável
dic: para agrupar elementos que serão recuperados por chave

3.2. VARIÁVEIS E CONSTANTES

Uma variável representa tecnicamente um espaço reservado de


memória onde pode-se armazenar temporariamente dados. Mueller
(2016) afirma que uma variável nada mais é que um nome dado para
certo valor. Tecnicamente pode ser chamada de variável significativa,
quando o nome dado à variável refere-se claramente ao conteúdo que
deverá ser armazenado nela.
O operador de atribuição do Phyton, símbolo de igualdade (=),
permite criar novas variáveis, atribuindo valores para elas, conforme
exemplo a seguir:

>>> x = 1
>>> y = 5.5
>>> z = ‘Boente’
Nesses exemplos iniciais, criou-se três variáveis: x do tipo inteira,
y do tipo real e z do tipo string. No entanto, os nomes utilizados para
estas variáveis não são considerados significativos. A seguir, pode-se
observar o mesmo exemplo com o uso de variáveis significativas:

>>> numero = 1
>>> nota = 5.5
>>> nome = ‘Boente’

É claro que embora estejamos utilizando uma variável


significativa, se o usuário tiver a possibilidade de entrar com dados, ele
poderá não respeitar o real valor requerido pela variável.
Para a criação dos nomes das variáveis deve-se iniciar com letras,
maiúsculas ou minúsculas, e pode vir acompanhada de números,
possibilitando ainda aparecer o caractere ‘_’ na composição do nome da
variável. Qualquer outro caractere será considerado inválido, inclusive
as chamadas palavras reservadas (aquelas que são específicas do
Phyton, conforme ilustrado no quadro a seguir).

As 31 palavras reservadas do Phyton


and elif if print
as else import raise
assert except in return
break exec is try
class finally lambda while
continue for not with
def from or yield
del global pass

Exemplos de variáveis significativas realmente válidas: Aluno_1,


salario_bruto, nota_1_bim etc.
Uma constante em Phyton são “variáveis” cujos valores não são
alterados durante o decorrer do programa. A forma de criação de uma
constante é idêntica de uma variável. Então, para se diferenciar um a
variável de uma constante, busca-se escrever as constantes com letras
maiúsculas. Observe a seguir:

>>> numero = 7
>>> idade = 42
>>> PI = 3.14159265
>>> MAX = 100

Nas duas primeiras linha de código, tem-se as variáveis numero e


idade e, nas duas últimas linhas, tem-se as constantes PI e MAX.

3.3. SENTENÇAS E EXPRESSÕES

De acordo com Grus (2016) uma sentença refere-se a uma


unidade de código que o interpretador Python pode executar. Quanto
uma sentença no modo interativo do Phyton é digitada, o interpretador
executa e exibe o resultado, caso haja.
Quando nos referimos a scripts Phyton, geralmente ele contém
uma sequência de sentenças e, caso exista mais de uma, os resultados
aparecem cada vez que as declarações são executadas. Por exemplo, o
script abaixo,

print 1
num = 5.5
print valor

irá gerar a seguinte saída:


1
5.5

como a atribuição do valor 5.5 para a variável num não gera


saída, então não terá output para esta linha de código.
Toda vez que for necessário dar uma pausa na tela de saída para
que o usuário possa ler as informações impressas como saída de um
programa Phyton, busca-se utilizar a função raw_input( ), ou seja, faz
uma pausa temporária até que algo seja digitado pelo usuário. Veja
como fica o programa anterior com o raw_input( ):

print 1
num = 5.5
print valor
raw_input( )

Quanto a saída produzida pelo programa exemplo, 1 e 5.5, nada


seria alterado, portanto.

3.4. OPERADORES E OPERANDOS

Os operadores são símbolos especiais utilizados para representar


certa operações aritmética. Os operandos são valores que os
operadores designam às variáveis.
Os operadores +, -, *, / e ** são de adição, subtração,
multiplicação, divisão e exponenciação, respectivamente. Podemos
observar os tipos de operadores existentes no Phyton, através das
tabelas de operadores ilustradas no estudo de tipos de operadores.
3.5. TIPOS DE OPERADORES

3.5.1. Operadores Aritméticos

Símbolo Descrição Exemplo


+ Adição de valores a+b
- Subtração de valores a-b
* Multiplicação de valores a*b
/ Divisão de valores reais a/b
// Divisão de valores inteiros a // b
** Exponenciação de valores a ** b
% Resto da divisão (módulo) a%b

3.5.2. Operadores Relacionais

Símbolo Descrição Exemplo


> Maior que a>b
< Menor que a< b
>= Maior ou igual a >= b
<= Menor ou igual a <= b
== Igualdade a == b
!= Diferença a != b
3.5.3. Operadores Lógicos e Deslocamento de Bits

Símbolo Descrição Exemplo


and E lógico a > b and b < c
or Ou lógico a > b or b < c
not Não lógico not (a > b)
<< Deslocamento de bits a a << b
esquerda
>> Deslocamento de bits a a >> b
direita
& Operador bit a bit AND a&b
| Operador bit a bit OR a|b
^ Operador bit a bit XOR a ^b
~ Operador bit a bit NOT ~a

3.5.4. Operador com Funções Anônimas

Permite a criação de funções que não tem um nome


especificado. Elas ainda representam um recurso
interessantíssimo na linguagem de programação Phyton,
quando se trata de valor de parâmetro, call-back.

5.5.4.1. Map( )
A função map( ) é implementada diretamente no
interpretador Python, dita como função builtin, podendo ser
utilizada sem a importação de um módulo específico.
Esta função, em especial, permite aplicarmos uma
função a cada elemento de uma lista, retornando uma nova
lista contendo os elementos resultantes da aplicação da
função especificada.

import math
lista1 = [1, 4, 9, 16, 25]
lista2 = map(math.sqrt, lista1)
print lista2
raw_input()

O programa produzirá a seguinte saída:

[1.0, 2.0, 3.0, 4.0, 5.0]

Esta saída refere-se a raíz quadrada de cada um dos


números assinalados na lista apresentada e nomeada como
lista1. Para tanto, houve a necessidade de utilizarmos a
biblioteca padrão de funções matemáticas, import math, e
em seguida, utilizar a função para retornar a raíz quadrada
de um número, math.sqrt.

5.5.4.2. Filter( )
A função filter( ) permite ao usuário filtrar elementos
de uma determinada sequência, cujas diretrizes de filtragem
serão definidas pelo programador Phyton. Observe o
exemplo a seguir:

def maior_que_zero(x):
return x > 0

valores = [10, 4, -1, 3, 5, -9, -11]


print filter(maior_que_zero, valores)
raw_input()

A saída produzida pelo programa é a seguinte:

[10, 4, 3, 5]

Ou seja, todos os números maiores que zero.

5.5.4.3. Reduce( ) e Lambda


A função reduce( ) é outra função do tipo builtin do
Python, cuja utilidade está na aplicação de uma função a
todos os valores do conjunto, de forma a agregá-los todos
em um único valor. Ela é muito utilizada com a expressão
Lambda. Na verdade, lambda na mais é que uma função
anônima que aceita argumentos, inclusive operacionais, e
que suporta apenas uma expressão. Observe o script
exemplo a seguir:

valores = [1, 2, 3, 4, 5]
soma = reduce(lambda x, y: x + y, valores)
print soma
raw_input( )

irá gerar como saída, 15, que representa a soma de


todos os números da sequência definida.
3.5.5. Precedência dos Operadores

Operadores Descrição

** Index (prioridade mais alta)

~+- Bit a bit inversão, além de unário e menos


(os dois últimos método chamado + e @ - @)

* /% // Multiplicação, divisão e módulo tomar divisível

+- Adição Subtração

>> << Certo, operador de esquerda

& Bit 'E'

^| Operadores bit a bit

<= <>> = Relacional

<> ==! = Operador de igualdade

=% = / = @ = - = + = * Operadores de atribuição
=*=

É, não está operador de identidade

Em, não em operador de membro

Ou, não e Operadores lógicos

3.5.6. Operações com String (Concatenação)

O operador ´+´ funciona com strings, mas não é uma


adição no sentido matemático, é claro. Ele tem a função de
concatenação de duas ou mais strings, isto é, proporciona a
união de strings. Veja o exemplo a seguir:
nome = ‘Alfredo’
sobrenome = ‘ Boente’
print nome + sobrenome

Dessa forma, a saída produzida pelo programa será


Alfredo Boente.

3.6. ENTRADA E SAÍDA

Existem algumas formas de realizar a entrada de dados, input,


em Phyton. Vamos observar algumas delas:

#Primeiro exemplo de entrada e saída


print 'Escreva algo:'
entrada = raw_input( )
print 'Voce escreveu... ' + entrada
raw_input( )

No primeiro programa de entrada e saída, utilizou-se então uma


variável chamada entrada para receber certo conteúdo digitado via
teclado através da instrução raw_input( ), permitindo, portanto que
aconteça o processo de entrada de dados, input. Já para o processo de
output, saída de informações, utilizou-se a instrução print.

#Segundo exemplo
nome = raw_input('Qual o seu nome? ')
print 'Ola ' + nome
raw_input( )

No segundo programa, a mensagem para entrada de dados já é


inserida automaticamente na própria instrução raw_input( ),
permitindo, portanto, que o valor lido pela variável nome ocorra ao lado
da mensagem exibida.
Para fazer a entrada de dados na próxima linha, conforme o
primeiro exemplo, pode-se utilizar o caractere especial para “pular
linha”, new line, ‘\n’. Observe o próximo exemplo.

#Terceiro exemplo
nome = raw_input('Qual o seu nome?\n')
print nome + ' tudo bem?'
raw_input( )

Como a entrada de dados realizada através da instrução


raw_input( ) refere-se a uma cadeia de caracteres, para ler um valor
numérico é necessário convertê-lo para número. Veja os exemplos a
seguir:

#Quarto exemplo
num1 = raw_input('Primeiro Numero: ')
num2 = raw_input('Segundo numero: ')
print int(num1) + int(num2)
raw_input( )

No quarto exemplo, são lidos dois valores e os mesmos são


convertidos para inteiro, através da função int( ) para que seja possível
realizar a operação aritmética. Assim, supondo que os valores lidos
sejam 4 e 5, respectivamente, será exibido como resposta 9, pois o
objetivo era somar os dois números lidos via teclado. No entanto,
partindo da mesma hipótese, caso não seja feita a conversão de tipo, o
resultado impresso será igual a 45, pois o Phyton interpretará como
concatenação de caracteres. Veja n o exemplo a seguir:

#Quinto exemplo
num1 = raw_input('Primeiro Numero: ')
num2 = raw_input('Segundo numero: ')
print num1 + num2
raw_input( )

Assim como foi feito para a conversão de número inteiro,


pode-se utilizar a função float( ) para a conversão de número real.
Observe o próximo exemplo:

#Sexto exemplo
num1 = raw_input('Primeiro Numero: ')
num2 = raw_input('Segundo numero: ')
print float(num1) + float(num2)
raw_input( )

Considerando que os valores fornecidos foram 5.5 e 2.4, o


resultado produzido será 7.9.

Você também poderá realizar a conversão de forma direta,


através da própria instrução de entrada de dados. Veja o exemplo a
seguir:

#Setimo exemplo
num1 = int(raw_input('Entre com um Numero Inteiro: '))
num2 = float(raw_input('Entre com um Numero Real: '))
soma = num1 + num2
print soma
raw_input( )

BIBLIOGRAFIA

AMARAL, Fernando. Introdução à Ciência de Dados: Mineração de


Dados e Big Data. Editora Alta Books, 2016.
BOENTE, Alfredo. Projeto de Cloud Computing. Apostila do Curso de
Pós-Graduação MBA em Computação em Nuvem da Universidade
Estácio de Sá, 2015.
CORRAR, Luiz J.; PAULO, Edilson; DIAS FILHO, José Maria. et al.
(Coordenadores). Análise Multivariada para os cursos de Administração,
Ciências Contábeis e Economia. Editora Atlas, 2007.
DAVENPORT, Thomas Hayes; PATIL, Dhanurjay. Data Scientist: The
Sexiest Job of the 21st Century, Harvard Business Review, October,
2012.
GRUS, Joel, Data Science do Zero, Primeiras Regras com o Phyton,
Editora Alta Books, 2016.
MUELLER, John Paul, Começando a Programar em Phyton, para leigos,
Editora Alta Books, 2016.
MARTINS, João Pavão, Programação em Phyton, Introdução à
Programação Utilizando Múltiplos Paradigmas, Editora IST Press, 2015.
PROVOST, Foster; FAWCETT, Tom. Data Science for Business: What you
nedd to know about data mining and Data-Analytic Thinking, Spring,
2015.
VERAS, Manoel , Arquitetura de Nuvem, Amazon Web Services (AWS),
Ed. Brasport, 2013.

Texto da disciplina: Linguagem Phyton 2.7


4. Estruturas de Controle
Alfredo Boente
professor@boente.eti.br

4.1. EXPRESSÕES BOOLEANAS E OPERADORES LÓGICOS

Uma expressão booleana é aquela que pode assumir dois valores


lógicos, verdadeiro ou falso.

>>> 1 == 1
TRUE
>>> 1 == 2
FALSE

O operador de igualdade, ‘==’, é apenas um dos operadores de


comparação utilizados pela linguagem de programação Phyton. Veja
outros tipos de operadores de comparação válidos:

a != b (a não é igual à b)
a > b (a é maior do que b)
a < b (a é menor do que b)
a >= b (a é maior ou igual à b)
a <= b (a é menor ou igual à b)
a is b (a é o mesmo que b)
a is not b (a não é o mesmo que b)

Devemos lembrar que o símbolo ‘=’ em Phyton serve para


atribuição de valores e não para representação de igualdade.
Assim como nas demais linguagens de programação, existem três
operadores lógicos para expressar uma conjunção, disjunção e negação.
Os operadores lógicos em Phyton são os seguintes: and, or e not.
Observe a semântica utilizada:

a > 0 and a < 5

será verdadeiro apenas se a for maior que 0 e menor que 5.


Portanto, ambas as condições devem ser satisfeitas obrigatoriamente.

a > 0 or a < 5

será verdadeiro se pelo menos uma das condições for verdadeira.

not(a > b)

será verdadeira somente se a > b for falso.

4.2. OPERADORES BOOLEANOS DE STRINGS-IN

A linguagem de programação Phyton tem o recurso de entradas e


saídas formatadas. Para tanto, a substituição em strings acontece
através do uso do operador %.
Para que o interpretador Phyton possa substituir strings utiliza-se
o símbolo % acompanhado da letra s (%s); Já para a substituição de
valores numéricos, por exemplo, utiliza-se o símbolo % acompanhado
da letra d (%d), para números inteiros e, o símbolo % acompanhado da
letra f (%f), para números reais.
Então, tomando como base o exemplo ilustrado na unidade 3, a
substituição ocorre da seguinte forma:

#Código do script original da unidade 3


print 1
print 5.5
print ‘Boente’
raw_input( )

#Código do Novo script


num1 = 1
num2 = 5.5
nome = 'Boente'

print '%d' % num1


print '%f' % num2
print '%s' % nome
raw_input( )

A saída produzida será a seguinte:

Note que o valor 5.5 no formatador para números reais foi


impresso como 5.500000. Para que isto não aconteça, você poderá
definir o número de casas inteiras e o número de casas reais no próprio
formatador %f. Veja no exemplo:
#Código do Novo script com definição de número de casas
inteiras e decimais do número real
num1 = 1
num2 = 5.5
nome = 'Boente'

print '%d' % num1


print '%2.1f' % num2
print '%s' % nome
raw_input( )

A saída produzida será a seguinte:

Note que foi assumido através do formatador %2.1f, duas casas


inteiras e uma casa decimal (limitador).

4.3. COMPARAÇÕES ENTRE STRINGS


Em Phyton, a comparação de strings ocorre da mesma forma da
comparação de dois valores numéricos assim:

num1 = 4
num2 = 5
num3 = 4
print num1 == num2
print num1 == num3
raw_input( )

No primeiro print teremos como resposta FALSE, pois 4 não é


igual a 5. Não obstante, no segundo print teremos como resposta TRUE,
pois 4 é igual a 4.
Vamos ver como funciona para cadeia de caracreres, strings:

palavra1 = 'Ana'
palavra2 = 'Maria'
palavra3 = 'ana'
palavra4 = 'Ana'
print palavra1 == palavra2
print palavra1 == palavra3
print palavra1 == palavra4
raw_input( )

Analisando o script apresentado, no primeiro print teremos como


resposta FALSE, pois Ana não é igual a Maria. No segundo print,
também teremos FALSE como resposta, pois Ana não é igual a ana. Isto
porque o interpretador Phyton faz a distinção entre letras maiúsculas e
letras minúsculas, ou seja, tecnicamente dizendo, a linguagem de
programação Phyton é Case Sensitive.
O Phyton permite a manipulação de outros métodos com strings.
Vejamos então alguns deles:

O método upper( ) permite transformar todas as letras de uma


cadeia de caracteres em maiúscula. Em quanto o método lower( ),
permite transformar todas as letras de uma cadeia de caracteres em
minúscula. Observe o exemplo abaixo:

#Conversão de letras maiúsculas e minúsculas


palavra = 'Alfredo Boente'
print palavra
print palavra.upper()
print palavra.lower()
raw_input( )

A saída produzida pelo script fica da seguinte forma:

Alfredo Boente
ALFREDO BOENTE
alfredo boente
O método len( ) retorna um número inteiro referente a
quantidade de caracteres de uma palavra. Veja o exemplo a seguir que
retorna o número 14 referente ao total de caracteres da palavra ‘Alfredo
Boente’:

palavra = ‘Alfredo Boente’


print len(palavra)
raw_input( )

A saída produzida será a seguinte:

O método count( ) retorna um número inteiro referente a


quantidade de um caractere específico. Veja o exemplo a seguir que
retorna o número 3 referente ao total de letras ‘e’:

palavra = ‘Alfredo Boente’


print palavra.count(‘e’)
raw_input( )

A saída produzida será a seguinte:


O método find( ) indica a localização do “vetor” de caracteres
onde se encontra a palavra ou parte dela que deseja encontrar. Veja o
exemplo a seguir que retorna o número 10 referente a posição do vetor
de caracteres onde inicia a palavra ‘ente’:

palavra = ‘Alfredo Boente’


print palavra.find(‘ente’)
raw_input( )

A saída produzida será a seguinte:


4.4. ESTRUTURA CONDICIONAL SIMPLES E COMPOSTA

As estruturas condicionais podem ser classificadas como simples


ou composta. A instrução if, é uma instrução de retorno booleano,
responsável pelo teste condicional em um programa Phyton.

4.4.1. Estrutura Simples

if a > 0:
print ‘Positivo’

A sentença é completada com o caractere ‘:’ ao final


da instrução if. Portanto, se a condição for satisfeita, TRUE,
a instrução print ‘Positivo’ será executada. Caso contrário,
nada será feito.
4.4.2. Estrutura Composta

if a > 0:
print ‘Positivo’
else:
print ‘Negativo’

Se a condição for satisfeita, será impresso ‘Positivo’,


caso contrário, será impresso ‘Negativo’. Note que a
alternativa de resposta, print ‘Negativo’, virá após o
senão, aqui representado pelo else:, conforme exemplo.
Na estrutura composta o teste lógico realizado sempre
permite duas respostas possíveis; uma verdadeira, caso a
condição testada seja satisfeita, e a outra falsa, caso não
seja satisfatória.
Vamos a mais um exemplo onde a partir da digitação
de um número seu programa seja capaz de informar se este
é um número par ou ímpar.

num = int(raw_input('Qual o numero?'))


if int(num) % 2 == 0:
print "O numero informado e par"
else:
print "O numero informado e impar"
raw_input( )

4.4.3. Encadeamento de Estruturas

if a < b:
print ‘a menor que b’
elif a>b:
print ‘a maior que b’
else:
print ‘a e b sao iguais’

Note que no encadeamento de estruturas, utilizou-se


elif a>b:, para que nova alternativa seja testada,
permitindo também duas respostas possíveis.

4.5. TRATAMENTO DE EXCEÇÕES - TRY E EXCEPT

Existe uma estrutura condicional de execução na linguagem de


programação Python denominada try/except. O objetivo do try e do
except é, a prevenção de certa ocorrência de erro, que você já tenha
conhecimento que possa vir a acontecer e, por isto, precisa ser tratado
pelo try/except. Observe o exemplo abaixo:

temp = raw_input(‘Qual a temperatura em Fahrenheit?’)


try:
fahr = float(temp)
cel = (fahr - 32.0) * 5.0 / 90
print cel
except:
print ‘Forneca a temperatura em Fahrenheit’

Você ainda poderá agregar ao try/execept, o final, perfazendo,


portanto, try/except/finaly. Vejamos outro exemplo de tratamento
de erro:

def filhos():
try:
val = int(raw_input('Quantas filhos voce tem? '))
except StandardError, e:
print 'Erro - ', e
return 'Errado!'
finally:
print "Registrado"
print val
return val
filhos() #Primeira vez
filhos() #Segunda vez
filhos() #Terceira vez
raw_input( )

4.6. ESTRUTURA DE ITERAÇÃO COM A INSTRUÇÃO FOR

A estrutura para/variando na linguagem de programação Phyton é


representada pela instrução for( ). Assim como em qualquer linguagem
de programação, esta permite que um conjunto de instruções sejam
repetidas n vezes. Observe o exemplo abaixo:

for i in range(11):
print i
raw_input( )

A saída produzida será:


Então, para que os números apareçam um ao lado do outro, basta
colocar uma vírgula no final da instrução print i,. Observe como os
números serão impressos:

Observação Importante: O loop for( ) é utilizado sobre um


conjunto de elementos, como uma lista de palavras, as linhas em um
arquivo etc.
Digamos que você queima imprimir os números pares
compreendidos entre 0 e 10. Analisando esta situação em particular,
tem-se uma lista com todos os números pares que estejam entre 0 e
10. Vejamos o script Phyton:

pares=[2,4,6,8]
for i in pares:
print i,
raw_input( )

Agora, caso você não tenha definido um conjunto ou lista com


valores, como por exemplo, encontrar todos os números ímpares,
compreendidos entre 1 e 10, inclusive. Então, você define o range do
loop for, conforme o exemplo abaixo:

for i in range(1,10):
if i % 2 != 0:
print i,
raw_input( )

4.7. ESTRUTURA DE ITERAÇÃO COM A INSTRUÇÃO WHILE

A instrução while( ) permite realizar um loop enquanto certa


condição for verdadeira. Dessa forma, executa um bloco de comandos.
Observe o exemplo a seguir:

#Mostra a soma de todos os números positivos menores que 10


cont = 1
soma = 0
while (cont < 10):
soma = soma + cont
cont = cont + 1
print 'Soma = ', soma

raw_input( )

Nesta estrutura enquanto cont, que inicia com o valor 1, for


menor que 10, soma que inicia com o valor zero vai sendo
progressivamente incrementada em um, soma = soma + 1.
Vejamos outro exemplo do loop while:

num = 5
while num > 0:
print num,
num = num-1

raw_input( )

4.8. LOOPS INFINITOS - BREAK E CONTINUE

Uma forma elegante de controlar os chamados loops infinitos é


através do uso das instruções break e continue do Phyton. Muitas das
vezes, não conseguimos saber qual a hora de acabar um loop até
chegar ao meio do corpo dessa iteração. Neste caso, em especial, pode-
se fazer a escrita de um loop infinito, controlado através da instrução
break. Veja um exemplo:

while True:
line = raw_input ('Digite algo e pressione ENTER (parar p/
terminar) > ')
if line == 'parar':
break
print line
print 'Finalizado!'

raw_input( )

Dessa forma o usuário poderá digitar qualquer coisa e ao final,


pressionar a tecla ENTER, para registrar oficialmente a entrada de
dados que, em seguida, será exibida para o usuário. No entanto, assim
que o usuário digitar ‘parar’, o loop infinito chegará ao seu fim.
Vamos agora visualizar um exemplo prático de um loop infinito
com o uso do break e continue juntos.

while True:
line = raw_input ('Digite algo e pressione ENTER (parar p/
terminar) > ')
if line[0]=='#':
continue #nao imprime nada
if line == 'parar':
break
print line
print 'Finalizado!'

raw_input( )

Dessa forma podemos observar que para trabalhar com loop


infinito o break e o continue auxilia demais o programador Phyton.

BIBLIOGRAFIA

AMARAL, Fernando. Introdução à Ciência de Dados: Mineração de


Dados e Big Data. Editora Alta Books, 2016.
BOENTE, Alfredo. Projeto de Cloud Computing. Apostila do Curso de
Pós-Graduação MBA em Computação em Nuvem da Universidade
Estácio de Sá, 2015.
CORRAR, Luiz J.; PAULO, Edilson; DIAS FILHO, José Maria. et al.
(Coordenadores). Análise Multivariada para os cursos de Administração,
Ciências Contábeis e Economia. Editora Atlas, 2007.
DAVENPORT, Thomas Hayes; PATIL, Dhanurjay. Data Scientist: The
Sexiest Job of the 21st Century, Harvard Business Review, October,
2012.
GRUS, Joel, Data Science do Zero, Primeiras Regras com o Phyton,
Editora Alta Books, 2016.
MUELLER, John Paul, Começando a Programar em Phyton, para leigos,
Editora Alta Books, 2016.
MARTINS, João Pavão, Programação em Phyton, Introdução à
Programação Utilizando Múltiplos Paradigmas, Editora IST Press, 2015.
PROVOST, Foster; FAWCETT, Tom. Data Science for Business: What you
nedd to know about data mining and Data-Analytic Thinking, Spring,
2015.
VERAS, Manoel , Arquitetura de Nuvem, Amazon Web Services (AWS),
Ed. Brasport, 2013.

Texto da disciplina: Linguagem Phyton 2.7


5. Trabalhando com Funções

Alfredo Boente
professor@boente.eti.br

5.1. FUNÇÕES EMBUTIDAS

Uma função é uma sequência de comandos que realiza certo


cálculo. Ao definirmos uma função, é necessário dá-se um nome para
ela e determinar um conjunto de comandos a serem executados.
Quando uma função já está criada, declarada, poderá chamar
essa função através do nome da função. Por exemplo:
No programa da unidade 4, definimos, criamos uma função
chamada filhos( ), conforme podemos observar a seguir:

def filhos():
try:
val = int(raw_input('Quantas filhos voce tem? '))
except StandardError, e:
print 'Erro - ', e
return 'Errado!'
finally:
print "Registrado"
print val
return val
filhos() #Primeira vez
filhos() #Segunda vez
filhos() #Terceira vez

A chamada da função filhos( ), neste programa exemplo, ocorreu


três vezes, conforme ilustrado:
filhos() #Primeira vez
filhos() #Segunda vez
filhos() #Terceira vez

A linguagem de programação Phython disponibiliza diversas


funções embutidas das quais podemos usar sem a necessidade de
definirmos antes.
No exemplo a seguir, o Phyton irá retornar a letra de maior valor
(MAX) e em seguida, a letra de menor valor (MIN). Os valores das
letras são reconhecidos pelo Phyton através da tabela ASCII –
American Standard Code for Information Interchange. Por
exemplo: a letra A vale 65(10), a letra B vale 66(10) e assim por diante.

#Exemplo didático
print max('BOENTE')
print min('BOENTE')

raw_input( )

No primeiro print será exibida a letra ‘T’, pois ela tem o maior
(MAX) valor, ou seja, 84(10). Já no segundo print será exibida a letra ‘B’,
pois ela tem o menor (MIN) valor, ou seja, 66(10).
No próximo exemplo podemos visualizar as funções max e min,
cuja função devolve o maior e o menor valor de um lista,
respectivamente.

#Segundo exemplo
d = {'a': 1000, 'b': 3000, 'c':100}
print 'a=1000, b=3000, c=100'
print 'Maximo = ' + max(d, key=d.get)
print 'Minimo = ' + min(d, key=d.get)

raw_input( )

O script retornará como resposta o maior e o menor valor


daqueles definidos na lista, ora denominada d.
A outra função embutida que podemos citar como exemplo é a
função len( ) que retorna um valor inteiro referente a quantidade total
de letras de certa string. Observe o exemplo abaixo:

#Retorna o valor referente a quantidade de caracteres de uma


String
print len('BOENTE')

raw_input( )

Neste caso, a resposta impressa será 6.

5.2. FUNÇÕES DE CONVERSÕES DE TIPO

A linguagem Python contém funções para converter valores de um


tipo para outro. Vejamos alguns exemplos:

#Converte uma String em número inteiro


num1 = raw_input('Entre com um numero inteiro: ')
num2 = raw_input('Outro numero inteiro: ')
print int(num1) + int(num2)
raw_input( )

Lembrando que toda entrada de dados é do tipo String, devemos,


portanto, converter os valores armazenados em num1 e num2 para
números inteiros, através da função int( ). Somente então poderemos
efetuar cálculos. Observe o próximo exemplo:

#Converte uma String em número real


num1 = raw_input('Entre com um numero real: ')
num2 = raw_input('Outro numero real: ')
print float(num1) + float(num2)
raw_input( )

Como podemos observar, a função float( ), converte uma valor


String em um número real, para que seja possível operações de
cálculos.

#Converte um numero em String


ano_nasc=raw_input('Qual o ano do seu nascimento? ')
ano_atual='2017'
idade=int(ano_atual)-int(ano_nasc)
print 'Voce tem ' + str(idade) + ' anos de idade'
raw_input( )

Depois que estamos trabalhando com um valor numérico,


também podemos converter esse número em String, conforme ilustrado
no programa anterior. Isso é possível na linguagem Phyton, através do
uso da função str( ).

5.3. FUNÇÕES MATEMÁTICAS


A linguagem de programação Python permite utilizar funções
matemáticas. Mas para isto é necessário à importação da biblioteca
matemática, módulo de matemática no seu programa. Vejamos um
exemplo prático:

#Funcao matematica para raiz quadrada


import math
a = 25
b = math.sqrt(a)
print 'A raiz quadrada de 25 e... ' + str(b)
raw_input( )

Utilizou-se a função math.sqr( ) para calcular a raiz quadrada de


um número. Note que foi requerida a inclusão da biblioteca matemática
através da instrução import math.
No exemplo a seguir, utilizou-se a função math.pow(x, y) cuja
objetivo é elevar um número x ao número y (x^y), ou seja,
exponenciação.

import math
a=5
b=3
c = math.pow(a,b)
print '5 ^ 3 = ' + str(c)
raw_input( )

Vejamos outro exemplo:

import math
a=5
b = math.factorial(a)
print 'O fatorial de 5 e... ' + str(b)
raw_input( )

Neste exemplo, utilizou-se a função math.factorial( ), que


permite calcular o fatorial de um número.
No próximo exemplo, utilizamos a função math.pi retorna o valor
de pi (), ou seja, 3.14159265359.

import math
a = math.pi
print 'O valor de pi e... ' + str(a)
raw_input( )

O programa exemplo a seguir tem por objetivo utilizar as funções


matemáticas math.sin(x), math.cos(x) e math.tan(x), para
retornar um valor referente ao seno, cosseno e tangente de um
número, respectivamente.

import math
x = float(raw_input('Digite um numero para saber o seno,
cosseno e tangente: '))
a = math.sin(x)
b = math.cos(x)
c = math.tan(x)

print 'Seno de ' + str(x) + ' = ' + str(a)


print 'Cosseno de ' + str(x) + ' = ' + str(b)
print 'Tangente de ' + str(x) + ' = ' + str(c)
raw_input( )

5.4. CRIANDO NOVAS FUNÇÕES


Como já mostramos anteriormente, para criarmos ou declararmos
uma função basta dá um nome a esta função, definindo, portanto o seu
conteúdo. Em Phyton isso pode ser feito através da palavra reservada
def, conforme exemplo a seguir:

def print_linguagem():
print 'Eu sou Phyton...'
print 'A melhor linguagem de programacao do mundo!'

def repeat_linguagem():
print_linguagem()
print_linguagem()

repeat_linguagem()
raw_input( )

Utilizou-se a instrução def print_linguagem( ): para criar ou


definir uma função em Phyton. O mesmo ocorreu quando criou-se uma
outra função através da instrução def repeat_linguagem( ). A
chamada das funções ocorreram, respectivamente através das
instruções print_linguagem( ) e repeat_linguagem( ).
Observe o próximo exemplo:

def fibonacci(n):
if n < 2:
return n
else:
return fibonacci(n-1)+fibonacci(n-2)
print 'Sequencia dos 10 primeiros numeros da Serie de
Fibonacci:'
for x in range(10):
print fibonacci(x),
raw_input( )

Neste programa exemplo, a instrução def fibonacci(n): defini


uma função para calcular os números da série de Fibonacci. No entanto,
esta função requer um valor n que será passado como parâmetro para
a função (veremos mais detalhes na próxima seção). A chamada da
função ocorreu quando utilizamos a instrução print fibonacci(x), que,
de forma recursiva, vinculada a estrutura de iteração, foi calculando o
próximo número da Série de Fibonacci.

5.5. ARGUMENTOS E PARÂMETROS

Quando trabalhamos com funções em Phyton, geralmente


utilizamos argumentos e parâmetros.
Argumentos ou parâmetros são variáveis próprias de uma função
que são utilizados para receber valores que serão utilizados pela função.
Essas variáveis que representam os parâmetros da função são
ditas locais, pois pertencem exclusivamente a esta função. As demais
variáveis declaradas num programa Phyton são consideradas variáveis
globais, pois podem ser utilizadas em qualquer parte do programa.
Vejamos o exemplo a seguir:

def cubo(x):
return x*x*x

a = int(raw_input('Entre com um numero: '))


print 'O cubo de ' + str(a) + ' e... ' + str(cubo(a))
raw_input( )
O programa exemplo tem por objetivo calcular o cubo de um
número que será fornecido pelo usuário. Note que o parâmetro utilizado
na chamada da função é diferente do parâmetro utilizado na declaração
da função. Os argumentos devem ser do mesmo tipo, porém devem
apresentar nomes diferentes. O valor passado como parâmetro na
chamada da função é tecnicamente chamado de parâmetro real,
enquanto o valor recebido e declarado como parâmetro da função
cubo(), é tecnicamente chamado de parâmetro formal. Vejamos o
próximo exemplo:

def troca(x, y):


aux = x
x=y
y = aux
return x,y

a = int(raw_input('Valor do 1o numero: '))


b = int(raw_input('Valor do 2o numero: '))

print troca(a, b)
raw_input( )

Neste programa o usuário entra com dois números através do


teclado e em seguida, chama a função troca( ) para inverter/trocar os
números digitados originalmente. Assim, por exemplo, se o usuário
digitou os números 2 e 5, no final a saída produzida pela instrução print
será 5 e 2, pois os números serão trocados, ou seja, o valor da variável
a passará para a variável b, e vice-versa.

5.6. FUNÇÕES PRODUTIVAS E FUNÇÕES VOID


Algumas funções em Phyton, como por exemplo, as funções
matemáticas, produzem, por si só, resultados sólidos. De acordo com
Grus (2016) estas são as chamadas funções produtivas.
Agora, quando temos uma função que não retorna valor algum,
dizemos que esta função é vazia ou, simplesmente void, sem retorno.
Então, print math.sqrt(25), é considerada uma função produtiva
e, realiza_entrada( ), é uma função sem retorno, do tipo void.

BIBLIOGRAFIA

AMARAL, Fernando. Introdução à Ciência de Dados: Mineração de


Dados e Big Data. Editora Alta Books, 2016.
BOENTE, Alfredo. Projeto de Cloud Computing. Apostila do Curso de
Pós-Graduação MBA em Computação em Nuvem da Universidade
Estácio de Sá, 2015.
CORRAR, Luiz J.; PAULO, Edilson; DIAS FILHO, José Maria. et al.
(Coordenadores). Análise Multivariada para os cursos de Administração,
Ciências Contábeis e Economia. Editora Atlas, 2007.
DAVENPORT, Thomas Hayes; PATIL, Dhanurjay. Data Scientist: The
Sexiest Job of the 21st Century, Harvard Business Review, October,
2012.
GRUS, Joel, Data Science do Zero, Primeiras Regras com o Phyton,
Editora Alta Books, 2016.
MUELLER, John Paul, Começando a Programar em Phyton, para leigos,
Editora Alta Books, 2016.
MARTINS, João Pavão, Programação em Phyton, Introdução à
Programação Utilizando Múltiplos Paradigmas, Editora IST Press, 2015.
PROVOST, Foster; FAWCETT, Tom. Data Science for Business: What you
nedd to know about data mining and Data-Analytic Thinking, Spring,
2015.
VERAS, Manoel , Arquitetura de Nuvem, Amazon Web Services (AWS),
Ed. Brasport, 2013.

Texto da disciplina: Linguagem Phyton 2.7


6. Manipulando Arquivos

Alfredo Boente
professor@boente.eti.br

6.1. PERSISTÊNCIA

Todos os programas criados até agora manipulam dados na


memória do computador. No entanto, em programas de computador do
dia-a-dia, na vida real, fazem as manipulações de dados por meio de
arquivos, pois, os dados manipulados na memória do computador são
tem seu armazenamento limitado e temporário; isso porque a memória
do computador é volátil. No caso dos arquivos, permitem armazenar
uma grande quantidade de dados e não é uma memória volátil, ou seja,
os dados vão permanecer guardados ali, mesmo com a ausência de
energia elétrica.
Aqui, iremos aprender a manipular arquivos para que os nossos
programas tenham a capacidade de guardar dados em grandes
quantidades por um período de tempo indeterminado.
Por exemplo, as linhas de código abaixo permitem criar um
arquivo de dados vazio, apenas para sinalizar a criação deste.

#Simplesmente cria um arquivo vazio


arq = open('tmp/teste.dat', 'w')
print arq
arq.close( )
raw_input('\nArquivo vazio criado com sucesso!')
Após a execução do programa, aparecerá a seguinte informação
como saída:

A linguagem de programação Phyton permite manipular tanto


arquivos texto quanto arquivos de dados. Ambos os focos são
interessantes para o trabalho de um Cientista de Dados.

6.2. ABERTURA DE ARQUIVO

Utilizaremos a instrução open, em Phyton, para realizar a


abertura de um arquivo. Portanto, a função open retorna um objeto da
classe file, que permite fazer a leitura e escrita em arquivos das mais
diversas formas.
Modos de abertura de arquivo do Phyton para arquivo texto:

‘w’ - gravação (write)


‘r’- leitura (read)
‘a’ - acrescentar (append)
O modo de abertura para gravação, ‘w’, toda vez que for
executado, permite criar um novo arquivo, subscrevendo todo o
conteúdo uma vez já criado anteriormente.
arquivo = open(‘teste.txt’, ‘w’)

O modo de abertura para leitura, ‘r’, permite que seja feita uma
leitura do conteúdo do arquivo já existente.
arquivo = open(‘teste.txt’, ‘r’)

O modo de abertura para acrescentar, ‘a’, serve para manter o


conteúdo já gravado anteriormente, acrescentando novos dados neste
arquivo, sem a necessidade de apagar os dados anteriores.
arquivo = open(‘teste.txt’, ‘a’)

Dessa forma o arquivo que será fisicamente criado na sua unidade


de armazenamento, ficará gravado no mesmo diretório, na mesma
pasta, onde o programa Phyton está sendo executado para a criação do
seu arquivo. No entanto, você poderá determinar um local onde deseja
gravar os arquivos. Por exemplo: Imagine que seus programas Phyton
estão sendo executados a partir da pasta /progphyton e, dentro dessa
pasta existe outra pasta nomeada como /tmp, por exemplo, onde os
arquivos criados serão armazenados. Para tanto, você deverá indicar na
instrução de abertura de arquivo o local desejado, dessa forma:

arquivo = open(‘tmp/teste.txt’, ‘w’)

Você também poderá manter uma pasta para manipular arquivos


diretamente no Desktop do seu computador. Vamos utilizar um
exemplo de uma pasta criada no Desktop chamada /Local, assim:
arquivo = open('/Users/Boente/Desktop/Local/teste.txt', 'w').
Note que é necessário passar todo o caminho, path, onde a pasta
se encontra, quando a mesma não se encontra no mesmo diretório
onde o programa está sendo executado.

Vejamos o exemplo da abertura de um arquivo para


gravação/criação chamado ‘arquivo.txt’.

#Criacao do arquivo
arq = open('tmp/arquivo.txt', 'w')
arq.close()
raw_input('Arquivo vazio criado com sucesso!')

Dessa forma um arquivo chamado ‘arquivo.txt’ foi criado sem


conteúdo algum, ou seja, foi criado vazio.

É claro que alguns comandos específicos de manipulação de


arquivos da linguagem de programação Phyton foram utilizados. Vamos
estudar o que cada um desses comandos faz:

Então a instrução open( ) permite abrir/criar um arquivo em


Phyton a partir da escolha de um modo de abertura (‘w’, ‘r’, ‘a’), por
exemplo, arq = open('tmp/arquivo.txt', 'w').

Vejamos um exemplo de criação de arquivo ainda não existente,


arquivo para gravação, chamado ‘arquivo.txt’. Caso esse arquivo já
exista, seu conteúdo será sobreposto, ou seja, apaga o conteúdo
antigo, substituindo por um novo a ser registrado.

#Abertura de arquivo para gravacao


arq = open('tmp/arquivo.txt', 'w')
texto = []
texto.append('Lista de Amigos\n')
texto.append('---\n')
texto.append('Alfredo Boente\n')
texto.append('Renata Miranda\n')
texto.append('Giullia Edwiges')
arq.writelines(texto)
arq.close()
raw_input('Arquivo criado com sucesso!')

Este será o arquivo criado no seu diretório /tmp:

A instrução arq.writelines(texto), permite gravar linhas em um


arquivo texto com as linhas de conteúdo de certa lista.

Agora nós iremos acrescentar outros três amigos no arquivo já


criado. Então para isto, substituiremos o modo de abertura de arquivo
de ‘w’, write, para ‘a’, append.
#Abertura de arquivo para acrescentar novos registros
arq = open('tmp/arquivo.txt', 'a')
texto = []
texto.append('\n')
texto.append('Juan Gabriel\n')
texto.append('Maria Miranda\n')
texto.append('Sergio Albano')
arq.writelines(texto)
arq.close()
raw_input('Novos Amigos gravados com sucesso!')

Este será o novo conteúdo do arquivo:


Podemos observar que os primeiros três nomes gravados no
arquivo, foram mantidos, sendo acrescentado, portanto, outros três
novos nomes, no final do arquivo.
Como auxílio, foi utilizada a instrução texto.append('Nome\n'),
para acrescentar novas linhas de texto em uma lista, ora definida no
programa exemplo como texto = [].

Para fazer a leitura do conteúdo do arquivo criado, utilizaremos o


modo de abertura de arquivo ‘r’, read.
Vamos admitir que já existisse o arquivo ‘arquivo.txt’ com o
seguinte conteúdo:

#Abertura de arquivo para leitura


arq = open('tmp/arquivo.txt', 'r')
texto = arq.readlines()
for linha in texto:
print(linha)
arq.close()
raw_input('\nLeitura realizada com sucesso!')

Esta será a tela de saída exibida como resultado:

A instrução texto = arq.readlines(), permite ler linhas de


conteúdo do arquivo, adicionando-as a uma lista, que será utilizada
como referência para a impressão das informações desse arquivo.

6.3. ARQUIVO TEXTO E LINHA

Como podemos manipular arquivos texto e arquivos binários no


Phyton, iremos explicar cada um deles.
Conceitualmente, um arquivo texto representa uma sequência de
linhas com registro de um conjunto de caracteres, da mesma forma que
uma string. Dessa forma, para quebrar o arquivo texto em diversas
linhas, busca-se utilizar o caractere especial ‘\n’, new line, já utilizado
anteriormente em alguns programas exemplo. O new line, portanto, irá
representar o final de uma linha e o início de outra.
Os arquivos de dados serão aqueles cujo conteúdo das linhas,
representa as tuplas do arquivo, ou seja, os registros que compõem
certos arquivos de dados.
Os arquivos binários registram uma tupla, um registro por vez
dentro do arquivo criado. Um arquivo texto não cria essa relação de
tupla.

6.4. LENDO ARQUIVOS

A leitura do conteúdo gravado no arquivo é feita através da


instrução s = arquivo.read( ). Veja o código exemplo:

#Leitura de arquivo
arquivo = open('tmp/arqnum.txt', ‘r’)
s = arquivo.read( )
print s
arquivo.close( )
raw_input('\nLeitura realizada com sucesso!')

A saída produzida será a seguinte:


Todo o arquivo é lido de uma só vez para a memória do
computador. Nós abrimos o arquivo texto para leitura, ‘arqnum.txt’, da
seguinte forma: arquivo = open('tmp/arqnum.txt', ‘r’). No entanto,
temos a opção de suprimir o ‘r’ de read, leitura, conforme se segue:
arquivo = open(‘tmp/arqnum.txt’).
Não podemos esquecer que o arquivo lido deve existir, ou seja, já
deve ter sido criado.

6.5. PESQUISANDO EM ARQUIVOS

Temos a opção de pesquisarmos dados em um arquivo sem ter a


necessidade de ler todo o arquivo para a memória do computador.
Dessa forma você pode processar apenas as linhas que se encaixam em
um critério particular. Nós podemos combinar tal comportamento com
métodos que atuam sobre string, para construirmos um simples
mecanismo de busca. Observe o exemplo a seguir:
#Pesquisando em Arquivos
arquivo = open('tmp/arqnum.txt', 'r')
for linha in arquivo :
if int(linha)%2!=0:
print linha
arquivo.close( )
raw_input('\nPesquisa realizada com sucesso!')

A saída produzida pelo programa será a seguinte:

Em outras palavras, nosso programa buscou no arquivo


‘tmp/arqnum.txt’ todos os números que fossem ímpares e mostrou
na tela do computador como saída.
Note que entre cada linha de dado impressa, apareceu uma linha
em branco. Para retirar essa linha em branco você deverá utilizar a
instrução print linha.rstrip( ), como se segue:

#Pesquisando em Arquivos
arquivo = open('tmp/arqnum.txt', 'r')
for linha in arquivo :
if int(linha)%2!=0:
print linha.rstrip( )
arquivo.close( )
raw_input('\nPesquisa realizada com sucesso!')

Será produzida, então, a seguinte saída:

Vejamos outro exemplo de pesquisa onde iremos buscar todos os


nomes dos amigos registrados no arquivo ‘tmp/arquivo.txt’, cujo
nome seja diferente de ‘Renata Miranda’ ou ‘Maria Miranda’.

#Pesquisando em Arquivos
arquivo = open('tmp/arquivo.txt', 'r')
for linha in arquivo :
if linha !='Renata Miranda' or linha != 'Maria Miranda':
print linha
arquivo.close( )
raw_input('\nPesquisa realizada com sucesso!')

Esta será a saída produzida pelo programa:


6.6. USANDO TRY, EXCEPT E OPEN

No exemplo a seguir, vamos pedir para que o usuário digite o


nome do arquivo que ele deseja abrir para leitura. Então, quando um
nome de arquivo válido for digitado, o Phyton irá realizar o processo de
leitura das informações do arquivo. No entanto, caso o usuário digite o
nome de um arquivo inexistente, certamente seu programa vai dar
erro, pois o Phyton irá tentar abrir um arquivo para leitura das
informações que na verdade não existe.

#Tentando Abrir um Arquivo


nome = raw_input('Digite o nome do arquivo: ')
arquivo = open('tmp/'+nome)
for linha in arquivo :
print linha.rstrip( )
arquivo.close( )
raw_input('\nPesquisa realizada com sucesso!')
Para evitar esse tipo de erro, vamos agora fazer o tratamento de
exceção com a operação de abertura de arquivo através do
try/except.

#Tratamento de Excecoes
nome = raw_input('Digite o nome do arquivo: ')
try:
arquivo = open('tmp/'+nome)
except:
print 'O arquivo '+nome+' nao pode ser aberto'
raw_input('\nPressione <Enter> para terminar...')
exit( )
for linha in arquivo :
print linha.rstrip( )
arquivo.close( )
raw_input('\nPesquisa realizada com sucesso!')

6.7. ESCREVENDO ARQUIVOS

Utilizaremos a instrução arquivo.write(str(val)+’\n’) para


realizar o processo de escrita/gravação de dados no arquivo criado.

#Escrevendo em arquivo
arquivo = open('tmp/arqnum.txt', 'w')
val = 0
for num in range(10):
val = val + 1
arquivo.write(str(val)+'\n')
arquivo.close( )
raw_input('\nGravacao realizada com sucesso!')
O arquivo criado terá o seguinte conteúdo:

6.8. FECHAMENTO DE ARQUIVOS E DEPURAÇÃO

A instrução arq.close(), é utilizada para fechar o arquivo que


esteja aberto na memória do computador.
Pronto! Depois é só executar o programa e aguardar a depuração
de erros e, caso não ocorra, seu programa será executado de forma
bem sucedida.
É importante lembrar que o Phyton também permite a
manipulação de arquivos do tipo binário. O arquivo tipo texto armazena
como conteúdo strings, enquanto o arquivo binário, irá preservar os
dados gravados de acordo com os seus respectivos tipos.
Em Phyton, para manipularmos um arquivo binário, devemos
utilizar ‘w’, ‘r’ e ‘a’, acompanhado da letra ‘b’ de binário.
Para que possamos preservar o tipo do dado que será gravado,
iremos usar a função dump( ) da biblioteca import pickle. Observe o
seguinte exemplo:

#Criando Arquivo Binario


import pickle
arquivo = open('tmp/arquivo.dat', 'wb')
for i in range(10):
pickle.dump(i, arquivo)
arquivo.close( )
raw_input('\nArquivo binario criado com sucesso!')

No exemplo anterior foi criado um arquivo binário para gravação


de dados no arquivo ‘tmp/arquivo.dat’. A gravação é realizada pela
instrução pickle.dump(i, arquivo).
Vamos visualizar o próximo exemplo onde, para o mesmo
arquivo, ‘tmp/arquivo.dat’, foi criado um programa para realizar a
leitura desse arquivo binário.

#Lendo Arquivo Binario


import pickle
arquivo = open('tmp/arquivo.dat', 'rb')
soma=0
for i in range(10):
n=pickle.load(arquivo)
soma=soma+n
print soma
arquivo.close( )
raw_input('\nArquivo binario lido com sucesso!')

Note que foi utilizada a instrução n=pickle.load(arquivo) para


realizar a leitura dos registros do arquivo.
Vamos visualizar outro exemplo de criação e leitura de arquivo
binário. Iremos manipular o arquivo ‘tmp/arqdados.dat’ para registro
de nomes e idades de três pessoas.

#Arquivo Binario Gravacao


import pickle
arq = open('tmp/arqdados.dat', 'wb')
for i in range(3):
nome=raw_input('Digite seu nome: ')
idade=raw_input('Digite a sua idade: ')
pickle.dump(nome, arq)
pickle.dump(idade, arq)
arq.close( )
raw_input('\nArquivo binario criado com sucesso!')

Depois de criado o arquivo ‘tmp/arqdados.dat’, iremos criar um


programa para realizar a leitura desses dados.

#Arquivo Binario Leitura


import pickle
arq = open('tmp/arqdados.dat', 'rb')
for i in range(3):
nome=pickle.load(arq)
idade=pickle.load(arq)
print '\n'+nome+' '+str(idade)
arq.close( )
raw_input('\nArquivo binario lido com sucesso!')

No entanto, imagine a situação onde existisse a necessidade de


acrescentar mais registros no arquivo binário ‘tmp/arqdados.dat’.
Então, seria necessário a criação de um programa para manipulação do
arquivo binário com o modo de abertura de arquivo ‘ab’, append binary,
para permitir incluir novos registros no arquivo binário já existente.
Observe o exemplo a seguir:

#Arquivo Binario Acrescentando Dados


import pickle
arq = open('tmp/arqdados.dat', 'ab')
nome=raw_input('Digite seu nome: ')
idade=raw_input('Digite a sua idade: ')
pickle.dump(nome, arq)
pickle.dump(idade, arq)
arq.close( )
raw_input('\nNovo Registro gravado no Arquivo binario com
sucesso!')

Assim com no programa de gravação/criação de arquivo binário,


houve a necessidade de utilizar a instrução pickle.dump( ) para gravar
no arquivo.

BIBLIOGRAFIA

AMARAL, Fernando. Introdução à Ciência de Dados: Mineração de


Dados e Big Data. Editora Alta Books, 2016.
BOENTE, Alfredo. Projeto de Cloud Computing. Apostila do Curso de
Pós-Graduação MBA em Computação em Nuvem da Universidade
Estácio de Sá, 2015.
CORRAR, Luiz J.; PAULO, Edilson; DIAS FILHO, José Maria. et al.
(Coordenadores). Análise Multivariada para os cursos de Administração,
Ciências Contábeis e Economia. Editora Atlas, 2007.
DAVENPORT, Thomas Hayes; PATIL, Dhanurjay. Data Scientist: The
Sexiest Job of the 21st Century, Harvard Business Review, October,
2012.
GRUS, Joel, Data Science do Zero, Primeiras Regras com o Phyton,
Editora Alta Books, 2016.
MUELLER, John Paul, Começando a Programar em Phyton, para leigos,
Editora Alta Books, 2016.
MARTINS, João Pavão, Programação em Phyton, Introdução à
Programação Utilizando Múltiplos Paradigmas, Editora IST Press, 2015.
PROVOST, Foster; FAWCETT, Tom. Data Science for Business: What you
nedd to know about data mining and Data-Analytic Thinking, Spring,
2015.
VERAS, Manoel , Arquitetura de Nuvem, Amazon Web Services (AWS),
Ed. Brasport, 2013.

Texto da disciplina: Linguagem Phyton 2.7


7. Dicionários Phyton

Alfredo Boente
professor@boente.eti.br

7.1. DICIONÁRIO COM CONJUNTO DE CONTADORES

Antes mesmo de falarmos em dicionários em Phyton, precisamos


abordar uma breve visão de listas. Ela é considerada a estrutura de
dados mais básica da linguagem de programação Phyton.
Uma lista, segundo Grus (2016), corresponde a uma coleção
ordenada de coisas (bem parecida com o conceito de array existente
em outras linguagens de programação). Observe o exemplo a seguir:

vocabulario = ['iteracao', 'selecao', 'controle']


numeros = [17, 123]
vazia = []
lista_mista = ['ola', 2.0, 5*2, [10, 20]]

print(numeros)
print(lista_mista)
nova_lista = [numeros, vocabulario]
print(nova_lista)
raw_input('pausa...')

a saída produzida pelo programa foi a seguinte:

Podemos acrescentar novos elementos numa lista. Por exemplo:


admitindo a lista numeros = [17, 123], se você atribuir a instrução
numeros.append(194), o novo elemento, 194, será acrescentado no
final da lista, gerando o seguinte resultado: numeros = [17, 123,
194].
Outro recurso interessante com listas é a possibilidade de
concatenação de listas. Por exemplo: admitindo a lista listanum = [1,
2, 3], se você atribuir a instrução listanum.extend([4, 5, 6]), o
resultado final obtido será listanum = [1, 2, 3, 4, 5, 6].
Então, listanum na posição 0 é igual a 1, listanum na posição 1 é
igual a 2, e assim por diante.
Em Phyton um dicionário é como uma lista, porém mais
generalizado (GRUS, 2016). Numa lista, os índices têm que ser
números inteiros. Já num dicionário os índices podem ser de qualquer
tipo (quase todos). Alguns autores admitem que um dicionário
representa um mapeamento entre um conjunto de índices e um
conjunto de valores. Cada chave é mapeada para um valor.

A associação de uma chave e um valor é chamado de par chave-


valor ou às vezes um item.
Para representar um dicionário em Phyton precisamos utilizar a
palavra-chave dict. Observe o exemplo:

dic = dict([(1,'um'), (2,'dois')])


print 'dic[1] = ' + dic[1]
print 'dic[2] = ' + dic[2]
raw_input('pausa...')

Dessa forma foi criado um dicionário denominado dic onde os


pares chave-valor utilizados foram (1, ‘um’) e (2, ‘dois’). Dessa forma,
no programa exemplo, quando foi referenciado dic[1], o conteúdo
mostrado pela instrução print dic[1] foi ‘um’, pois existe uma associação
pré-estabelecida. O mesmo ocorreu com dic[2], cujo conteúdo exibido
foi ‘dois’.
Um dicionário pode ser implementado como um conjunto de
contadores. Vamos supor que você tenha recebido uma string e quer
contar quantas vezes cada letra aparece nesta string.
Então você pode criar um dicionário com caracteres como chaves
e contadores como valores correspondentes. Observe o código Phyton:

palavra = 'paralelepipedo'
d = dict()
for c in palavra:
if c not in d:
d[c] = 1
else:
d[c] = d[c] + 1
print d
raw_input('pausa...')

A saída produzida pelo programa é a seguinte:

7.2. DICIONÁRIOS E ARQUIVOS


Ocorrências de palavras são facilmente detectadas quando
utilizamos o recurso de dicionário associado a certo arquivo existente.
O exemplo a seguir, manipula um arquivo simples de palavras (texto):

nomearq = raw_input('Digite o nome do arquivo: ')


try:
arq = open('tmp/'+nomearq)
except:
print 'Arquivo nao pode ser aberto: ', nomearq
exit()
counts = dict()
for line in arq:
words = line.split()
for word in words:
if word not in counts:
counts[word] = 1
else:
counts[word] +=1
print counts
raw_input('pausa...')

A instrução words = line.split( ), permite separar a string em


pedaços, partes ou subpartes.

7.3. ESTRUTURAS DE ITERAÇÃO E DICIONÁRIOS

Estruturas de iteração podem ser utilizadas com dicionários


Phyton. Por exemplo, imagine que você queira utilizar um dicionário
como a sequência em uma estrutura de iteração com a instrução for, o
que o Phyton faz é examinar as chaves do dicionário para efetivar o
processo. O programa exemplo a seguir, com o auxílio da estrutura de
iteração for busca imprimir cada chave e seu valor correspondente.

counts = { 'Juan' : 20, 'Alfredo' : 45, 'Giullia' : 25 }


for chave in counts:
print chave, counts[chave]
raw_input('pausa...')

A saída proveniente a execução do programa será a seguinte:


Alfredo 45
Giullia 25
Juan 20

As chaves não estão em uma ordem pré-definida. Podemos usar


este padrão para implementar estruturas de iteração sobre dicionários
Phyton que atuam como contadores.
Existe a possibilidade de imprimir as chaves em ordem alfabética.
Nesse caso você deve primeiro cria uma lista de chaves em um
dicionário, e em seguida, ordenar essa lista, para que no final você
possa percorrer a lista ordenada, visualizando a impressão dos pares
chave/valor na ordem de classificação, como segue:

counts = { 'Juan' : 20, 'Alfredo' : 45, 'Giullia' : 25 }


lista = counts.keys()
print lista
lista.sort( )
for chave in lista:
print chave, counts[chave]
raw_input('pausa...')

A saída ficaria como:


7.4. ANÁLISE AVANÇADA DE TEXTOS

Quando agregamos valores com outras funções Phyton ao recurso


de dicionários, criamos o que tecnicamente chamamos de análise
avançada de textos. Observe o exemplo abaixo:

import string
fname = raw_input('Digite o nome do arquivo: ')
try:
fhand = open('tmp/'+fname)
except:
print 'Arquivo nao pode ser aberto: ', fname
exit()

counts = dict()
for line in fhand:
line = line.translate(None, string.punctuation)
line = line.lower()
words = line.split()
for word in words:
if word not in counts:
counts[word] = 1
else:
counts[word] += 1
print counts
raw_input('pausa...')

Neste programa foi utilizada a instrução import string que


permite ao usuário ter acesso a algumas funções avançadas para
manipulação de strings, como por exemplo:

line = line.translate(None, string.punctuation) – o método


translate( ) retorna uma cópia da string com todos os caracteres que
devem ser traduzidos, baseado na tabela de caracteres do módulo
string. O parâmetro string.punctuation permite que as pontuações
encontradas no texto sejam desconsideradas (default).

line = line.lower() – converte todos os caracteres da string para


letras minúsculas.

words = line.split() – permite separar string em pedaços, servindo


como delimitador para um processo de análise avançada de textos.

BIBLIOGRAFIA

AMARAL, Fernando. Introdução à Ciência de Dados: Mineração de


Dados e Big Data. Editora Alta Books, 2016.
BOENTE, Alfredo. Projeto de Cloud Computing. Apostila do Curso de
Pós-Graduação MBA em Computação em Nuvem da Universidade
Estácio de Sá, 2015.
CORRAR, Luiz J.; PAULO, Edilson; DIAS FILHO, José Maria. et al.
(Coordenadores). Análise Multivariada para os cursos de Administração,
Ciências Contábeis e Economia. Editora Atlas, 2007.
DAVENPORT, Thomas Hayes; PATIL, Dhanurjay. Data Scientist: The
Sexiest Job of the 21st Century, Harvard Business Review, October,
2012.
GRUS, Joel, Data Science do Zero, Primeiras Regras com o Phyton,
Editora Alta Books, 2016.
MUELLER, John Paul, Começando a Programar em Phyton, para leigos,
Editora Alta Books, 2016.
MARTINS, João Pavão, Programação em Phyton, Introdução à
Programação Utilizando Múltiplos Paradigmas, Editora IST Press, 2015.
PROVOST, Foster; FAWCETT, Tom. Data Science for Business: What you
nedd to know about data mining and Data-Analytic Thinking, Spring,
2015.
VERAS, Manoel , Arquitetura de Nuvem, Amazon Web Services (AWS),
Ed. Brasport, 2013.

Texto da disciplina: Linguagem Phyton 2.7


8. Trabalhando com Tuplas

Alfredo Boente
professor@boente.eti.br

8.1. CARACTERIZAÇÃO DE TUPLAS


Uma tupla nada mais é que uma sequência de valores muito
parecida com uma lista, cujos valores armazenados podem ser de
qualquer tipo, porém indexados por números inteiros.
As tuplas são imutáveis, diferentemente das listas. Quando
associadas ao recurso de dicionários Phyton, permite realizar análise de
dados avançadas. Observe o exemplo de uma tupla:

tupla = ‘a’, ‘e’, ‘i’, ‘o’, ‘u’

Sintaticamente, uma tupla é uma lista de valores separados por


vírgula. Em geral os valores de uma tupla aparece em parêntese e isto,
nos ajuda a identifica-las mais facilmente.

tupla = (‘a’, ‘e’, ‘i’, ‘o’, ‘u’)

Obrigatoriamente coloca-se uma vírgula no final do elemento da


tupla, quando este é único. Sem o uso da vírgula, o Phyton interpretaria
o (‘a’) como uma string. Observe o exemplo:

tupla = (‘a’,)

No Phyton existe uma função específica para criação de tuplas,


tuple( ), que neste caso, criaria uma tupla vazia.

tupla = tuple( )

Caso o argumento de uma tupla seja uma sequência (string, lista


ou tupla), o resultado da chamada para a função tuple( ) é uma tupla
com os elementos da sequência. Veja o exemplo a seguir:

tupla = ('Boente')
print tupla
print tupla[0]
print tupla[2:5]
raw_input('pausa...')

No programa exemplo, a linha 1 imprime todos os elementos da


tupla, ‘B’ ‘o’ ‘e’ ‘n’ ‘t’ ‘e’. Já na linha 2, apenas o elemento da posição
zero será exibido, ‘B’. Para concluir, na linha 3, serão impressos os
elementos da posição [2] = ‘e’, posição [3] = ‘n’ e posição [4] = ‘t’, não
incluindo o delimitador, que neste caso é a posição [5]. Este operador
especial ‘:’ é tecnicamente denominado de operador de slice, fatia.

8.2. COMPARANDO TUPLAS

O operador de comparação trabalha com tuplas e outras


sequências possíveis. A linguagem de programação Python começa pela
comparação do primeiro elemento de cada sequência da tupla. Em caso
de igualdade, a comparação segue para o próximo elemento, e assim
por diante, até que encontre um primeiro elemento que não seja igual.

#Comparando tupas
txt = 'ciencia de dados em busca da vantagem competitiva'
words = txt.split()
t = list()
for word in words:
t.append((len(word), word))
t.sort(reverse=True)
res = list()
for length, word in t:
res.append(word)
print res
raw_input('pausa...')
A saída requerida é a seguinte:

A instrução t.sort(reverse=True), permitiu mostrar as strings


da tupla que detinham o maior número de caracteres por valoração,
isto é, de maior valor, com base na tabela ASCII. Para inverter a saída,
conforme podemos verificar a seguir, basta substituir reverse=True
por reverse=False.
8.3. ATRIBUIÇÃO DE TUPLAS

A linguagem de programação Phyton apresenta como


característica a possibilidade de ter uma tupla no lado esquerdo de um
comando de atribuição. Dessa forma, será permitido atribuir mais de
uma variável por vez, quando o lado esquerdo é, na verdade, uma
sequência. Observe o exemplo a seguir:

#Recurso de atribuição composta


m = ['Alfredo', 'Boente']
x1, x2 = m
print x1
print x2
raw_input('pausa...')

Nesse exemplo temos dois elementos, que são sequências, que


pertence a uma lista/tupla m e que, por isto, permite atribuir o primeiro
e o segundo elementos da sequência para as variáveis x1 e x2
respectivamente, em uma única sentença.

8.4. DICIONÁRIO DE TUPLAS

Em Phyton, dicionários possui um método chamado items que


retorna uma lista de tuplas, onde cada tupla corresponde a um par
chave-valor.

d = {‘a’:10, ‘b’:1, ‘c’:22}


t = d.items()
print t
raw_input( )
Neste caso a resposta será: [(‘a’, 10), (‘c’, 22), (‘b’, 1)]. Ou seja,
retorna um par chave-valor da lista de tupla definida. Incluindo a linha
de comando t.sort( ), antes da instrução print t, a saída será
modificada para: [(‘a’, 10), (‘b’, 1), (‘c’, 22)].

8.5. ATRIBUIÇÃO MÚLTIPLA COM DICIONÁRIOS

A linguagem de programação Phyton permite combinar os items,


atribuição de tuplas e o comando de iteração for. Então, é possível
construir um padrão de código bom para percorrer as chaves e valores
de um dicionário em uma única estrutura de iteração. Observe o
exemplo a seguir:

d = {'a':10, 'b':1, 'c':22}


for key, val in d.items():
print val, key
raw_input('pausa...')
Esta estrutura de iteração apresenta duas variáveis, items que
retorna uma lista de tuplas e key, val que é uma atribuição de tupla que
repete sucessivamente por cada um dos pares de chave/valor no
dicionário.
A saída produzida será a seguinte:
10 a
22 c
1b

Novamente a ordem apresentada é a ordem dada pela chave de


hash, isto é, neste caso, nenhuma ordem particular. No entanto, se
combinarmos essas duas técnicas, podemos imprimir o conteúdo de um
dicionário ordenado pelo valor armazenado em cada par chave/valor.
8.6. TUPLAS COM CHAVES DE DICIONÁRIOS

Considerando que tuplas são armazenadas em forma de hash e


listas, se quisermos criar uma chave composta para usar em um
dicionário, devemos usar uma tupla como a chave. Conceitualmente
uma chave composta seria apropriada, se quiséssemos criar uma lista
telefônica que mapeia, a partir do último e do primeiro nome, para
números de telefone (SEVERANSE, 2015).
Vamos assumir a criação das variáveis last, first e number,
poderíamos escrever uma declaração de atribuição de dicionário da
seguinte forma:

directory[last,first] = number

A expressão entre colchetes representa, portanto, uma tupla. Nós


poderíamos usar atribuição de tupla em uma estrutura de iteração for
para percorrer este dicionário.

for last, first in directory:


print first, last, directory[last,first]

Esta estrutura de iteração percorre as chaves em directory, que


são, efetivamente tuplas. Ele atribui os elementos de cada tupla para
last e first, e imprime o nome correspondente do número de telefone.

BIBLIOGRAFIA

AMARAL, Fernando. Introdução à Ciência de Dados: Mineração de


Dados e Big Data. Editora Alta Books, 2016.
BOENTE, Alfredo. Projeto de Cloud Computing. Apostila do Curso de
Pós-Graduação MBA em Computação em Nuvem da Universidade
Estácio de Sá, 2015.
CORRAR, Luiz J.; PAULO, Edilson; DIAS FILHO, José Maria. et al.
(Coordenadores). Análise Multivariada para os cursos de Administração,
Ciências Contábeis e Economia. Editora Atlas, 2007.
DAVENPORT, Thomas Hayes; PATIL, Dhanurjay. Data Scientist: The
Sexiest Job of the 21st Century, Harvard Business Review, October,
2012.
GRUS, Joel, Data Science do Zero, Primeiras Regras com o Phyton,
Editora Alta Books, 2016.
MUELLER, John Paul, Começando a Programar em Phyton, para leigos,
Editora Alta Books, 2016.
MARTINS, João Pavão, Programação em Phyton, Introdução à
Programação Utilizando Múltiplos Paradigmas, Editora IST Press, 2015.
PROVOST, Foster; FAWCETT, Tom. Data Science for Business: What you
nedd to know about data mining and Data-Analytic Thinking, Spring,
2015.
VERAS, Manoel , Arquitetura de Nuvem, Amazon Web Services (AWS),
Ed. Brasport, 2013.