Table Of ContentO autor e a editora empenharam-se para citar adequadamente e dar o devido crédito a todos os detentores dos direitos
autorais de qualquer material utilizado neste livro, dispondo-se a possíveis acertos caso, inadvertidamente, a
identificação de algum deles tenha sido omitida.
Não é responsabilidade da editora nem do autor a ocorrência de eventuais perdas ou danos a pessoas ou bens que
tenham origem no uso desta publicação.
Apesar dos melhores esforços do autor, do tradutor, do editor e dos revisores, é inevitável que surjam erros no texto.
Assim, são bem-vindas as comunicações de usuários sobre correções ou sugestões referentes ao conteúdo ou ao nível
pedagógico que auxiliem o aprimoramento de edições futuras. Os comentários dos leitores podem ser encaminhados
à LTC — Livros Técnicos e Científicos Editora pelo e-mail [email protected].
Traduzido de INTRODUCTION TO COMPUTING USING PYTHON: AN APPLICATION DEVELOPMENT
FOCUS, FIRST EDITION
Copyright © 2012 John Wiley & Sons, Inc.
All rights reserved.
Authorised translation from the English language edition published by John Wiley & Sons Limited. Responsibility for
the accuracy of the translation rests solely with LTC — Livros Técnicos e Cientifícos Editora Ltda., and is not the
responsibility of John Wiley & Sons Limited. No part of this book may be reproduced in any form without the written
permission of the original copyright holder, John Wiley & Sons Limited.
ISBN 978-0-470-61846-2
Portuguese edition copyright © 2016 by
LTC — Livros Técnicos e Científicos Editora Ltda.
All rights reserved.
Direitos exclusivos para a língua portuguesa
Copyright © 2016 by
LTC — Livros Técnicos e Científicos Editora Ltda.
Uma editora integrante do GEN | Grupo Editorial Nacional
Reservados todos os direitos. É proibida a duplicação ou reprodução deste volume, no todo ou em parte, sob quaisquer
formas ou por quaisquer meios (eletrônico, mecânico, gravação, fotocópia, distribuição na internet ou outros), sem
permissão expressa da editora.
Travessa do Ouvidor, 11
Rio de Janeiro, RJ − CEP 20040-040
Tels.: 21-3543-0770 / 11-5080-0770
Fax: 21-3543-0896
[email protected]
www.ltceditora.com.br
Design de capa: Wendy Lai
Foto de capa: ©simon2579/iStockphoto
Produção digital: Geethik
CIP-BRASIL. CATALOGAÇÃO NA PUBLICAÇÃO
SINDICATO NACIONAL DOS EDITORES DE LIVROS, RJ
P526i
Perkovic, Ljubomir
Introdução à computação usando Python : um foco no desenvolvimento de aplicações / Ljubomir Perkovic ; tradução
Daniel Vieira. - 1. ed. - Rio de Janeiro : LTC, 2016.
il. ; 28 cm
Tradução de: Introduction to computing using python: an application development focus
Inclui índice
ISBN 978-85-216-3092-0
1. Computação. I. Vieira, Daniel. II. Título.
16-30406 CDD: 004
CDU: 004
Ao meu pai, Milan Perković (1937-1970),
que não teve a chance de concluir seu livro.
Sumário
Prefácio
1
Introdução à Ciência da Computação
1.1 Ciência da Computação
O que os Profissionais da Computação Fazem?
Modelos, Algoritmos e Programas
Ferramentas do Ofício
O que É Ciência da Computação?
1.2 Sistemas de Computação
Hardware do Computador
Sistemas Operacionais
Redes e Protocolos de Rede
Linguagens de Programação
Bibliotecas de Software
1.3 Linguagem de Programação Python
Pequena História do Python
Configurando o Ambiente de Desenvolvimento Python
1.4 Pensamento Computacional
Um Exemplo de Problema
Abstração e Modelagem
Algoritmo
Tipos de Dados
Atribuições e Estruturas de Controle de Execução
Resumo do Capítulo
2
Tipos de Dados Python
2.1 Expressões, Variáveis e Atribuições
Expressões Algébricas e Funções
Expressões e Operadores Booleanos
Variáveis e Atribuições
Nomes de Variáveis
2.2 Strings
Operadores de String
Operador de Indexação
2.3 Listas
Operadores de Lista
Listas São Mutáveis, Strings Não
Métodos de Lista
2.4 Objetos e Classes
Tipo de Objeto
Valores Válidos para Tipos Numéricos
Operadores para Tipos Numéricos
Criando Objetos
Conversões de Tipo Implícitas
Conversões de Tipo Explícitas
Métodos de Classe e Programação Orientada a Objeto
2.5 Biblioteca Padrão Python
Módulo
math
Módulo
fractions
2.6 Estudo de Caso: Objetos Turtle Graphics
Resumo do Capítulo
Soluções dos Problemas Práticos
Exercícios
3
Programação Imperativa
3.1 Programas em Python
Nosso Primeiro Programa Python
Módulos Python
Função Embutida
print()
Entrada Interativa com
input()
Função
eval()
3.2 Estruturas de Controle de Execução
Decisões de Caminho Único
Decisões de Caminho Duplo
Estruturas de Iteração
Aninhando Estruturas de Fluxo de Controle
Função
range()
3.3 Funções Definidas pelo Usuário
Nossa Primeira Função
versus
print() return
Definições de Função São Instruções de “Atribuição”
Comentários
Docstrings
3.4 Variáveis e Atribuições em Python
Tipos Mutáveis e Imutáveis
Atribuições e Mutabilidade
Troca (swapping)
3.5 Passagem de Parâmetros
Passagem de Parâmetro Imutável
Passagem de Parâmetro Mutável
3.6 Estudo de Caso: Automatizando o Turtle Graphics
Resumo do Capítulo
Soluções dos Problemas Práticos
Exercícios
Problemas
4
Dados de Texto, Arquivos e Exceções
4.1 Revisão de Strings
Representações de String
Revisão do Operador de Indexação
Métodos de String
4.2 Saída Formatada
Função
print()
Método de String
format()
Alinhando Dados em Colunas
4.3 Arquivos
Sistema de Arquivos
Abrindo e Fechando um Arquivo
Padrões para Leitura de um Arquivo de Texto
Gravando em um Arquivo de Texto
4.4 Erros e Exceções
Erros de Sintaxe
Exceções Embutidas
4.5 Estudo de Caso: Registrando o Acesso ao Arquivo
Uma Pequena Função Wrapper
Registrando Nomes de Arquivo
Obtendo e Formatando Data e Hora
Implementação Final de
openLog()
Resumo do Capítulo
Soluções dos Problemas Práticos
Exercícios
Problemas
5
Estruturas de Controle de Execução
5.1 Controle de Decisão e a Instrução
if
Decisões em Três Vias (e Mais!)
Ordenação das Condições
5.2 Laço e Padrões de Iteração
for
Padrão de Laço: Laço de Iteração
Padrão de Laço: Laço Contador
Padrão de Laço: Laço Acumulador
Acumulando Tipos Diferentes
Padrões de Laço: Laço Aninhado
5.3 Mais sobre Listas: Listas Bidimensionais
Listas Bidimensionais
Listas Bidimensionais e o Padrão de Laço Aninhado
5.4 Laço
while
5.5 Mais Padrões de Laço
Padrões de Iteração: Laço de Sequência
Padrão de Laço: Laço Infinito
Padrão de Laço: Laço e Meio
5.6 Estruturas Adicionais de Controle de Iteração
Instrução
break
Instrução
continue
Instrução
pass
Resumo do Capítulo
Soluções dos Problemas Práticos
Exercícios
Problemas
6
Contêineres e Aleatoriedade
6.1 Dicionários
Índices Definidos pelo Usuário como Motivação para Dicionários
Propriedades da Classe de Dicionário
Operadores de Dicionário
Métodos de Dicionário
Um Dicionário como um Substituto para a Condição Multivias
Dicionário como uma Coleção de Contadores
6.2 Outros Tipos de Contêiner Embutidos
Classe
tuple
Objetos Podem Ser Chaves de Dicionário
tuple
Revisão do Método de Dicionário
items()
Classe
set
Usando o Construtor para Remover Duplicatas
set
Operadores
set
Métodos
set
6.3 Codificações de Caracteres e Strings
Codificações de Caracteres
ASCII
Unicode
Codificação UTF-8 para Caracteres Unicode
6.4 Módulo random
Escolhendo um Inteiro Aleatório
Escolhendo um “Real” Aleatório
Embaralhando, Escolhendo e Examinando Aleatoriamente
6.5 Estudo de Caso: Jogos de Sorte
Blackjack
Criando e Misturando o Baralho de Cartas
Distribuindo uma Carta
Calculando o Valor de uma Mão
Comparando as Mãos do Jogador e da Casa
Função Blackjack Principal
Resumo do Capítulo
Soluções dos Problemas Práticos
Exercícios
Problemas
7
Namespaces
7.1 Encapsulamento em Funções
Reutilização de Código
Modularidade (ou Decomposição Procedural)
Encapsulamento (ou Ocultação de Informações)
Variáveis Locais
Namespaces Associados a Chamadas de Função
Namespaces e a Pilha de Programa
7.2 Namespaces Globais versus Locais
Variáveis Globais
Variáveis com Escopo Local
Variáveis com Escopo Global
Alterando Variáveis Globais Dentro de uma Função
7.3 Fluxo de Controle Excepcional
Exceções e Fluxo de Controle Excepcional
Capturando e Manipulando Exceções
O Manipulador de Exceção Padrão
Capturando Exceções de Determinado Tipo
Manipuladores de Exceção Mútliplos
Controlando o Fluxo de Controle Excepcional
7.4 Módulos como Namespaces
Atributos do Módulo
O que Acontece Quando um Módulo é Importado
Caminho de Busca do Módulo
Módulo de Alto Nível
Diferentes Maneiras de Importar Atributos de Módulo
7.5 Classes como Namespaces
Uma Classe é um Namespace
Métodos de Classe São Funções Definidas no Namespace da Classe
Resumo do Capítulo
Soluções dos Problemas Práticos
Exercícios
Problemas
8
Programação Orientada a Objeto
8.1 Definindo uma Nova Classe em Python
Métodos da Classe
Ponto
Uma Classe e Seu Namespace
Cada Objeto Tem um Namespace Associado
Implementação da Classe
Ponto
Variáveis de Instância
Instâncias Herdam Atributos de Classe
Definição de Classe de Forma Mais Geral
Documentando uma Classe
Classe
Animal
8.2 Exemplos de Classes Definidas pelo Usuário
Operador de Construtor Sobrecarregado
Construtor Padrão
Jogando com a Classe Carta
8.3 Criando Novas Classes Contêiner
Criando uma Classe que Representa um Baralho de Cartas
Implementando a Classe (de Cartas)
Baralho
Classe Contêiner
Queue
Implementando uma Classe de Fila
8.4 Operadores Sobrecarregados
Operadores São Métodos de Classe
Tornando a Classe Amiga do Usuário
Ponto
Contrato entre o Construtor e o Operador
repr()
Tornando a Classe Queue Amigável ao Usuário
8.5 Herança
Herdando Atributos de uma Classe
Definição de Classe Geral
Sobrescrevendo Métodos de Superclasse
Estendendo Métodos da Superclasse
Implementando uma Classe Herdando de
Queue list
8.6 Exceções Definidas pelo Usuário
Levantando uma Exceção
Classes de Exceção Definidas pelo Usuário
Melhorando o Encapsulamento da Classe
Queue
8.7 Estudo de Caso: Indexação e Iteradores
Sobrecarga dos Operadores de Indexação
Iteradores e Padrões de Projeto POO
Resumo do Capítulo
Soluções dos Problemas Práticos
Exercícios
Problemas
9
Interfaces Gráficas do Usuário
9.1 Fundamentos do Desenvolvimento GUI com
tkinter
Widget : A Janela GUI
Tk
Widget para Exibição de Texto
Label
Exibindo Imagens
Posicionando Widgets
Arrumando Widgets em uma Grade
9.2 Widgets Baseados em Evento
tkinter
Widget e Manipuladores de Evento
Button
Eventos, Manipuladores de Evento e
mainloop()
O Widget
Entry
Widget e Vínculo de Eventos
Text
Padrões de Evento e a Classe
Eventdotkinter
9.3 Criando GUIs
Widget
Canvas
Widget como um Widget Organizador
Frame
9.4 POO para GUIs
Fundamentos de POO para GUI
Widgets Compartilhados São Atribuídos a Variáveis de Instância
Dados Compartilhados São Atribuídos a Variáveis de Instância
9.5 Estudo de Caso: Desenvolvendo uma Calculadora
Botões da Calculadora e Passagem de Argumentos aos Manipuladores
Implementando o Manipulador de Evento “Não Oficial”
click()
Resumo do Capítulo
Soluções dos Problemas Práticos
Exercícios
Problemas
10
Recursão
10.1 Introdução à Recursão
Funções Recursivas
Pensamento Recursivo