Introdução a Algoritmos e Programação com Python

Introdução a Algoritmos e Programação com Python Uma abordagem dirigida por testesEdição 1

Autor(es): By Raul Sidnei Wazlawick
ISBN: 9788535290516
Data de publicação : Nov 13, 2017
Nº de páginas: 232
Preço de varejo sugerido:
  • BRL: R$94.00
  • Descrição
  • Sobre o autor(es)
  • SUMÁRIO
Descrição

Características

  • Este livro é indicado para quem quer aprender ou ensinar programação de computadores usando a linguagem que nos últimos anos vem se tornando dominante nesta área: PYTHON;
  • Chancelado pela SBC;
  • Apresenta os conceitos de DESENVOLVIMENTO DIRIGIDO POR TESTE (TDD) – uma técnica de programação que produz excelentes resultados ao fazer o programador pensar sobre seu código antes de produzi-lo e escrever os testes que automaticamente irão veri¿car se o código efetivamente funciona;
  • Dezenas de exercícios propostos -  os valores e resultados são apresentados para que o estudante possa veri¿car, antes de conferir os gabaritos online, se o seu programa efetivamente está correto;
  • O livro é altamente recomendado para disciplinas de "Introdução a algoritmos" e  "Programação" em cursos superiores em todas as áreas, e também no Ensino Médio, mas também pode ser usado por aqueles que querem aprender sozinhos (autodidatas).
Sobre o autor(es)
By Raul Sidnei Wazlawick, Possui Bacharelado em Ciência da Computação pela Universidade Federal de Santa Catarina (UFSC, 1988), Mestrado em Ciência da Computação pela Universidade Federal do Rio Grande do Sul (UFRGS, 1990), Doutorado em Engenharia de Produção (UFSC, 1993) e Pós-Doutorado pela Universidade Nova de Lisboa (UNL, 1998). É Professor Titular da UFSC, tendo sido contratado em 1992. Ministra "Engenharia de Software II" e "Informática e Sociedade" no Bacharelado em Ciência da Computação e "Modelagem Orientada a Objetos" no Mestrado/Doutorado em Ciência da Computação. Na UFSC ocupou os seguintes cargos: Coordenador do Bacharelado em Ciência da Computação, Coordenador do Programa de Pós-Graduação (Mestrado) em Ciência da Computação, Conselheiro da Câmara de Pós-Graduação e Diretor Acadêmico do Campus de Araranguá. Na Sociedade Brasileira de Computação (SBC) foi Conselheiro Suplente por quatro mandatos e Conselheiro Titular por um mandato, além de Coordenador do Comitê Especial de Informática na Educação entre 1995 e 1997. Criou e foi editor da Revista Brasileira de Informática na Educação da SBC entre 1997 e 2001. Na International Federation for Information Processing (IFIP) foi representante do Brasil no Comitê Técnico de Educação (TC3) por 11 anos e Chair do Working Group on ICT and Higher Education (WG3.2) por 2 anos. Coordenou vários eventos nacionais e internacionais, incluindo o Congresso da SBC (2002), Simpósio Brasileiro de Engenharia de Software (SBES, 2006) e, juntamente com Rosa Maria Vicari, a IX IFIP World Conference on Computers in Education (2009). É autor dos seguintes livros: "Análise e Projeto de Sistemas de Informação Orientados a Objetos", (Elsevier, 2004; 2ª edição em 2011; 3ª edição em 2015) "Metodologia de Pesquisa para Ciência da Computação" (Elsevier, 2009; 2ª edição em 2014), "Engenharia de Software: Conceitos e Práticas" (Elsevier, 2012) e "Object-Oriented Analysis and Design for Information Systems: Modeling with UML, OCL, and IFML" (Morgan Kaufman, 2014). Tem experiência na área de Engenharia de Software, atuando principalmente em modelagem de sistemas orientados a objetos e melhoria do processo de desenvolvimento de software. No Ministério da Educação (MEC) foi membro do Comitê de Especialistas de Ensino em Ciência da Computação (CEEInf) por 4 anos e é atualmente membro da Comissão Assessora da Área de Sistemas de Informação para o ENADE. É Supervisor Geral do Projeto e-SUS, parceria da UFSC com o Ministério da Saúde para a reestruturação do sistema de informação da atenção básica (Postos de Saúde) no Brasil. Recebeu, juntamente com sua orientanda Marília Guterres Ferreira, o prêmio Best Paper Award na Conferência Iberoamericana de Engenharia de Software em 2011. Em 2013 recebeu o título de "Professor Honoris Causa" pelo Centro de Instrução de Guerra Eletrônica do Exército Brasileiro.
SUMÁRIO

Agradecimentos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . v

O autor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii

Prefácio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix

Para professores e coordenadores de curso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi

CAPÍTULO 1

Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

1.1 Por que aprender a programar? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

1.2 O que significa “programar¿ um computador? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

1.3 Linguagens de programação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

1.4 História da linguagem Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

1.5 Como obter um ambiente de programação Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

CAPÍTULO 2

Alô Mundo! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

2.1 Escrevendo seu primeiro programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

2.2 Explicando a função “print¿ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

2.3 Expressões com números inteiros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

2.4 Expressões com números de ponto flutuante . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

CAPÍTULO 3

Variáveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

3.1 Significado de uma variável . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

3.2 Comando de atribuição . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

3.3 Identificador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

3.4 Tipos de valores numéricos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

3.5 Operações aritméticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

3.6 Formatação de saída . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

3.7 Entrada de dados pelo teclado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

3.8 Precedência de operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

3.9 Constantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

3.10 Arredondamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

3.11 Notação científica ou exponencial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

CAPÍTULO 4

Repetição de Comandos um Número Fixo de Vezes . . . . . . . . . . . . . . . . . . . . . 37

4.1 Fundamentos: Contagem simples e variável de iteração . . . . . . . . . . . . . . . . . . . . . . . . . 37

4.2 Contagem a partir de valores quaisquer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

4.3 Vários comandos subordinados a uma estrutura de repetição . . . . . . . . . . . . . . . . . . . . . 40

4.4 Contando de n em n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

4.5 Contando de trás para frente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

4.6 Progressão não aritmética . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

4.7 Revisitando variáveis: Comandos de atualização . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

4.8 Somatório . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

4.9 Fatorial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

4.10 Aninhamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

CAPÍTULO 5

Comandos de Seleção . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

5.1 Fundamentos: Decisão e condição . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

5.2 Comparação de números de ponto flutuante . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55

5.3 Comando “if¿ sem “else¿ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56

5.4 Estruturas de seleção aninhadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58

5.5 Uso combinado de estruturas de seleção e repetição . . . . . . . . . . . . . . . . . . . . . . . . . . . 59

5.6 Revisitando variáveis: Variável booleana . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62

5.7 Condição composta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64

5.8 Seleção múltipla . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66

CAPÍTULO 6

Repetição Condicionada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70

6.1 Fundamentos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70

6.2 Simulações com números . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73

6.3 Repetição infinita . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75

6.4 Revisitando operadores aritméticos: Divisão por zero . . . . . . . . . . . . . . . . . . . . . . . . . . . 76

6.5 Comparação entre repetições fixa e condicionada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78

6.6 Repetição com condição composta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79

6.7 Atalhos em expressões com “and¿ e “or¿ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80

6.8 Cálculo de séries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81

6.9 Séries alternadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84

CAPÍTULO 7

Funções . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87

7.1 Fundamentos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87

7.2 Funções predefinidas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88

7.3 Bibliotecas de funções . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89

7.4 Como definir novas funções . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91

7.5 Parâmetros default . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93

7.6 Funções sem retorno ou não frutíferas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95

7.7 Escopo de variáveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96

7.8 Alteração de argumentos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99

7.9 Recursividade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100

7.10 Tópico especial: Otimização de código . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102

7.11 Criando sua própria biblioteca de funções . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105

CAPÍTULO 8

Desenvolvimento Dirigido por Teste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107

8.1 Tratamento de exceções . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107

8.2 Filosofia do desenvolvimento dirigido por teste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109

8.3 Classes de equivalência . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112

8.4 Testando valores inválidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115

8.5 Precondições . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116

8.6 Análise de valor limítrofe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117

CAPÍTULO 9

Estruturas de Dados Primitivas em Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120

9.1 Listas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120

9.2 Tuplas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130

9.3 Dicionários . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131

CAPÍTULO 10

Estruturas de Dados Derivadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137

10.1 Pilhas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137

10.2 Filas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142

10.3 Simulação discreta com filas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145

10.4 Matriz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150

CAPÍTULO 11

Arquivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156

11.1 Criação de arquivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156

11.2 Escrita em arquivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159

11.3 Leitura em arquivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161

11.4 Operações com strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164

CAPÍTULO 12

Busca e Ordenação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173

12.1 Busca sequencial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173

12.2 Busca binária . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176

12.3 Ordenação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179

CAPÍTULO 13

Noções de Programação Orientada a Objetos . . . . . . . . . . . . . . . . . . . . . . . . . . 188

13.1 História e motivação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188

13.2 Modelagem conceitual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190

13.3 Transformando modelo conceitual em código . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195

13.4 Desenvolvimento do programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200

13.5 Para onde podemos ir a partir daqui . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207

Bibliografi a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209

Índice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211