Ensine Seus Filhos A Programar SUMÁRIO Agradecimentos19 Introdução O que é programar e por que isso é bom para seus filhos?20 Por que as crianças devem aprender a programar? . . . . . . . . . . . . . . . . . . . 21 Programar é divertido . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 Saber programar é uma habilidade importante no trabalho . . . . . . . . . 22 Em que locais as crianças podem aprender a codificar? . . . . . . . . . . . . . . . . 22 Como usar este livro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .23 Explore! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Trabalhe junto! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Recursos online . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Programar = resolver problemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 24 25 26 1 Básico sobre o PYTHON: Conheça o seu ambiente 27 Introdução ao Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 1. Fazer download do Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2. Instalar o Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3. Testar o Python com um programa . . . . . . . . . . . . . . . . . . . . . . . . . . . Criando programas em Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 31 31 32 Executando programas em Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 O que você aprendeu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 2 Gráficos tartaruga: desenhando com o python 37 Nosso primeiro programa com a tartaruga . . . . . . . . . . . . . . . . . . . . . . . . . . 38 Como o programa funciona . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 O que o programa faz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 SUMÁRIO | 13 A tartaruga dando voltas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 A tartaruga em círculos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 Acrescentando um toque de cor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 Uma espiral de quatro cores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 Mudando as cores de fundo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 Uma variável para controlar tudo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 O que você aprendeu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 3 números e variáveis: O Python faz a matemática 58 Variáveis: onde armazenamos nossas informações . . . . . . . . . . . . . . . . . . . . 59 Números e matemática em Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 Números em Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Operadores em Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Realizando operações matemáticas no shell Python . . . . . . . . . . . . . . . . Erro de sintaxe: o que foi que você disse? . . . . . . . . . . . . . . . . . . . . . . . . Variáveis no shell Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Programando com operadores: uma calculadora para pizzas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Strings: os verdadeiros caracteres em Python . . . . . . . . . . . . . . . . . . . . . . . 62 63 64 65 66 68 71 Aperfeiçoando nossa espiral colorida com strings . . . . . . . . . . . . . . . . . . . . . 74 Listas: reunindo informações . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 O Python faz a sua lição de casa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 O que você aprendeu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 4 os laços são divertidos (você pode repetir isso) 84 Criando seus próprios laços for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 Usando um laço for para criar uma roseta com quatro círculos . . . . . . . 87 Modificando nosso laço for para criar uma roseta com seis círculos . . . 89 Aperfeiçoando nosso programa de roseta com dados de entrada do usuário 91 Laços de jogos e laços while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 A espiral da família . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 Reunindo tudo: a espiral torna-se viral . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 O que você aprendeu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 14 | SUMÁRIO 5 Condições (e se?) 110 Instruções if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 Conheça os booleanos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 Operadores de comparação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 Você não tem idade suficiente! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 Instruções else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 Polígonos ou rosetas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 Par ou ímpar? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 Instruções elif . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 Condições complexas: if, and, or, not . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 Mensagens secretas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 Trabalhando com strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . O valor do(s) caractere(s) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Nosso programa codificador/decodificador . . . . . . . . . . . . . . . . . . . . . . O que você aprendeu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 133 134 136 6 diversão e jogos com aleatoriedade: vá em frente, faça sua jogada! 140 Um jogo de adivinhação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141 Espirais aleatórias coloridas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145 Escolha uma cor, qualquer cor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Obtendo coordenadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Qual é o tamanho de nosso canvas? . . . . . . . . . . . . . . . . . . . . . . . . . . . . Reunindo tudo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Pedra-Papel-Tesoura (Rock-Paper-Scissors) . . . . . . . . . . . . . . . . . . . . . . . . 146 147 149 152 154 Escolha uma carta, qualquer carta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 Preparando o baralho . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Tirando uma carta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Comparando cartas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Continuar jogando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Reunindo tudo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Jogando dados: criando um jogo no estilo do Yahtzee . . . . . . . . . . . . . . . . . 157 159 160 162 164 165 Criando o jogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166 Ordenando os dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167 SUMÁRIO | 15 Testando os dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 Reunindo tudo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 Caleidoscópio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173 O que você aprendeu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178 7 Funções: Há um nome para isso 183 Organizando o código com funções . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185 Definindo random_spiral() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185 Chamando random_spiral() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187 Parâmetros: alimentando a sua função . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188 Carinhas felizes em posições aleatórias . . . . . . . . . . . . . . . . . . . . . . . . 189 Reunindo tudo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195 Retorno: o que você dá de volta é o que conta . . . . . . . . . . . . . . . . . . . . . . . 197 Retornando um valor a partir de uma função . . . . . . . . . . . . . . . . . . . . 198 Usando valores de retorno em um programa . . . . . . . . . . . . . . . . . . . . 199 Um toque de interação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202 Tratando eventos: TurtleDraw . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 Ouvindo eventos do teclado: ArrowDraw . . . . . . . . . . . . . . . . . . . . . . . . 206 Tratando eventos com parâmetros: ClickSpiral . . . . . . . . . . . . . . . . . . 209 Dando um passo a mais: ClickAndSmile . . . . . . . . . . . . . . . . . . . . . . . 212 ClickKaleidoscope . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 A função draw_kaleido() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A função draw_spiral() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Reunindo tudo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . O que você aprendeu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 Timers e animação: o que DISNEY faria? 215 216 217 219 222 GUI para todo lado com o Pygame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223 Desenhando um ponto com o Pygame . . . . . . . . . . . . . . . . . . . . . . . . . . O que há de novo no Pygame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . As partes de um jogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Calcule o timing correto: mover, bater e voltar . . . . . . . . . . . . . . . . . . . . . . 224 228 229 233 Movendo uma carinha feliz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235 Fazendo a animação de uma carinha feliz com a classe Clock . . . . . . . 237 16 | SUMÁRIO Fazendo uma carinha feliz bater em uma parede e voltar . . . . . . . . . . 240 Fazendo uma carinha feliz bater em quatro paredes e voltar . . . . . . . 247 O que você aprendeu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252 9 interação com o usuário: entre no jogo 259 Adicionando interação: clicar e arrastar . . . . . . . . . . . . . . . . . . . . . . . . . . . 260 Clicando para desenhar pontos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260 Arrastando para pintar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263 Interação avançada: explosão de carinhas felizes . . . . . . . . . . . . . . . . . . . . 268 Sprites de carinhas felizes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Criando sprites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Atualizando os sprites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Carinhas felizes maiores e menores . . . . . . . . . . . . . . . . . . . . . . . . . . . Reunindo tudo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . SmileyPop versão 1.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269 272 274 275 276 278 Detectando colisões e removendo sprites . . . . . . . . . . . . . . . . . . . . . . . . 279 Reunindo tudo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281 O que você aprendeu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283 10 Criação de jogos: codificando por diversão 286 Criando o esqueleto de um jogo: Smiley Pong versão 1.0 . . . . . . . . . . . . . . 287 Desenhando um tabuleiro e as partes do jogo . . . . . . . . . . . . . . . . . . . . Mantendo uma pontuação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Exibindo a pontuação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Reunindo tudo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Aumentando a dificuldade e finalizando o jogo: Smiley Pong versão 2.0 . 289 291 297 299 302 Fim de jogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Jogar novamente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Cada vez mais rápido . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Reunindo tudo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Acrescentando novas funcionalidades: SmileyPop v2.0 . . . . . . . . . . . . . . . 302 303 304 307 310 Adicionando um som com o Pygame . . . . . . . . . . . . . . . . . . . . . . . . . . . Monitorando e exibindo o progresso dos jogadores . . . . . . . . . . . . . . . . Reunindo tudo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . O que você aprendeu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310 312 316 320 SUMÁRIO | 17 A INSTALAÇÃO do Python para WINDOWS, MAC e LINUX 324 Python para Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325 Download do programa de instalação . . . . . . . . . . . . . . . . . . . . . . . . . . Execute o programa de instalação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Teste o Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Python para Mac . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325 327 331 333 Download do programa de instalação . . . . . . . . . . . . . . . . . . . . . . . . . . Execute o programa de instalação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Teste o Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Python para Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333 334 338 340 B instalação DO PYGAME PARA WINDOWS, MAC E LINUX 343 Pygame para Mac . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349 Python 2.7 e Pygame 1.9.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349 Pygame para Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352 Pygame para Python 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353 C Criando seus próprios módulos 355 Criando o módulo colorspiral . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356 Utilizando o módulo colorspiral . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358 Reutilizando o módulo colorspiral . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359 Recursos adicionais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360 Glossário361 18 | SUMÁRIO