© CasadoCódigo Todos os direitos reservados e protegidos pela Lei nº9.610, de 10/02/1998. Nenhumapartedestelivropoderáserreproduzida,nemtransmitida,sem autorização prévia por escrito da editora, sejam quais forem os meios: fotográficos,eletrônicos,mecânicos,gravaçãoouquaisqueroutros. CasadoCódigo Livrosparaoprogramador RuaVergueiro,3185-8ºandar 04101-300–VilaMariana–SãoPaulo–SP–Brasil CasadoCódigo Prefácio Pythonéumalinguagemdeprogramaçãoquevemsendoempregadanacons- truçãodesoluçõesparaosmaisdiversosfins educacionais,comerciaisecien- tíficos eplataformas web,desktope,maisrecentemente,móvel. Éumalin- guagemdefácilaprendizado,expressiva,concisaemuitoprodutiva;porisso, suaadoçãotemcrescidobastantenosúltimosanospelosmaisvariadosperfis deprofissionaisnomeiocientíficoeacadêmico,tantoparadesenvolvimento deferramentasquantoparaensinodealgoritmoseintroduçãoàprograma- ção. É uma linguagem de uso gratuito e de código-fonte aberto, compatível comosprincipaissistemasoperacionais,como:Linux,OSX,Windows,BSDs etc.Elacontacomumavastabibliotecapadrãoedocumentaçãoquepossibi- litamquemuitascoisassejamfeitassemdependênciasadicionais. Apesar de ser simples de aprender, Python é uma linguagem bastante poderosa e flexível. Essa combinação resulta em um rico ecossistema que melhoraaprodutividadedosdesenvolvedores. Issotudotornaadecisãode aprenderPythonimportantíssima,poismuitoshorizontesabrem-sequando sedominaumalinguagemcomecossistematãopoderosoquantoodela. Sevocêestálendoestelivro,possivelmenteseinteressouporPythonem algum momento. Então, espero que ele possa contribuir, de alguma forma, comoseuaprendizado.Olivroapresentaalinguagemdeumaformacontex- tualizada e, por isso, ao longo dele, vamos criar um aplicativo para analisar dadospúblicosdoGovernoFederal.Aideiaéapresentarmotivaçõespráticas, paradepoisdemonstrarosrecursosdalinguagemquenospermitemtratara motivaçãoinicial. Estelivroestádivididoemduaspartes.Aprimeirafocanosaspectosfun- i CasadoCódigo damentais de Python, muitos dos quais já são conhecidos por quem já tem experiênciacomoutraslinguagensdeprogramação. Jánasegunda,passare- mosaolharcaracterísticasmaisespecíficasdalinguagemque,emborapossam nãoserexclusivas,sãomarcantesedevemsertratadascommaiscuidado. PorquePython3? Oanode2014foiumanochavenaadoçãodePython3,porgrandeparte dacomunidade.Muitosprojetosrelevantesforamportadosoulançaramver- sões compatíveis nesse ano. A família 3.4 tem maior aceitação que as ante- riores da versão 3 e, inclusive, foi adotada como versão padrão em alguns sistemas operacionais. Python 3 nunca chamou tanta atenção como agora, entãonadamaisjustoqueumlivrootenhacomoassuntobase. Nosso objetivo é apresentar os recursos básicos da linguagem, ideias e conceitoscentraisconstruindoumaplicativosimplesdeleituraemanipula- çãodedados. Olivroéconceitualepráticoaomesmotempo,paraqueoaprendizado sejamaisprofundosemserchatoedifícildeentender. Livrosextremamente práticos podem, muitas vezes, pular conceitos e ideias centrais do assunto abordado, ao ponto que textos apenas conceituais podem ficar cansativos e teóricosdemais. Assim, o propósito é fazer com que você entenda melhor o universo Python,aomesmotempoemqueaprendeausarnapráticaosprincipaisre- cursosdalinguagem. Público-alvo Esteéumlivroparainiciantesemprogramaçãooudesenvolvedoresavan- çadoscompoucaexperiênciaemPython.Sevocêforuminiciante,leia-ocom calma para não acumular dúvidas ao longo do aprendizado. Em termos de complexidade,amaioriadosexemplosébemsimplesefocaempassarpara oleitorcomousarosrecursosdisponíveisdamelhorforma.Emtermoscon- ceituais,todasasexplicaçõesbuscamsercompletasparanãoexigirconsulta afontesexternas. Caso você já tenha alguma experiência em programação, mas não co- nheça Python, o livro contribui para que você rapidamente descubra como ii CasadoCódigo implementarnessalinguagemcoisasquesãocomunsemoutras.Alémdisso, oscapítulosabordamaspectosbemespecíficos,comexplicaçõesconceituais eexemplospráticos. AquiexplicocomoascoisasfuncionamnouniversoPythoneapresento umpoucodavisãopythônicaparaoleitor.Atémesmoaspartesmaistriviais podemconterinsightsimportantessobreocomportamentodalinguagemou decisõesdedesignadotadas. Os pedaços de código apresentados serão autocontidos e permitirão ao leitormodificareobterresultadosdiferentes. Todososcódigossãoexplica- dos,muitasvezeslinhaalinha,paraquevocêentendaclaramenteoobjetivo eafunçãodecadaparte. Caso tenha alguma dúvida ou sugestão, procure a comuni- dade do livro para tirar dúvidas. Ela está disponível em livro- [email protected]êserámuitobem-vindo! Os códigos-fonte dos exemplos utilizados ao longo do livro podem serencontradosem:https://github.com/felipecruz/exemplos Sobreoautor FelipeCruzédesenvolvedordesoftwarehá10anos. Trabalhounomer- cadocorporativoedestartupserecentementeatuacomoCientistadeDados, área onde reencontrou sua paixão pela construção de software. Mestrando emComputaçãopelaPUC-Rio,tambémestudaAprendizadodeMáquinase atualmentebuscanovasformasderesolveroproblemadarecomendaçãoeo aprendizadonãosupervisionadodeatributos. Pythonistahá6anos,palestranteeparticipantedediversasPythonBrasil, semprebuscoucompartilharconhecimentoeaprendercadavezmaissobrea linguagemeoecossistemaaolongodessesanos. iii CasadoCódigo Agradecimentos Agradeço, primeiramente, à minha família pelo apoio e paciência ao longo do tempo de criação do livro. Em especial, para minhas filhas Maya eLiz,minhaesposaFernanda,mãeeirmãsIlka,IlkaeIeda. Também agradeço muito pela confiança e paciência da equipe Casa do Códigoaolongodestaárduajornada. Emdiversosmomentos,nãoconsegui produzir o que era esperado mas mesmo assim sempre pude contar com a paciênciaeapoiodetodos. Porfim, agradeçoatodosquetrabalharamcomigo, emespecialparaos diversosamigosquefiznouniversoPython. iv CasadoCódigo Agradecimentos Erratas Essecapítuloédedicadoaoscontribuidoresdolivro: • SandroDutra-Errata-Seção2.2 • FranciscoAndré-Errata-Seção3.1 • AndréFrança-Errata-Seção4.1 v CasadoCódigo Sumário Sumário SeusprimeirospassoscomoPython 1 1 IniciandocomPython 3 1.1 AlinguagemPython. . . . . . . . . . . . . . . . . . . . . . . . 3 1.2 DePython2paraPython3 . . . . . . . . . . . . . . . . . . . . 6 1.3 Diversosinterpretadoresemesmalinguagem . . . . . . . . . 7 1.4 Preparandooambiente . . . . . . . . . . . . . . . . . . . . . . 8 1.5 Primeiropasso:abraointerpretador . . . . . . . . . . . . . . 8 1.6 Primeirasexplorações . . . . . . . . . . . . . . . . . . . . . . . 9 1.7 Próximospassos . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2 AprendendoPythonnaprática:númerosestrings 11 2.1 Números . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.2 ComomanipulartextoemPython . . . . . . . . . . . . . . . 16 2.3 Criandoemanipulandotexto:strings. . . . . . . . . . . . . . 16 2.4 ComoPythonrepresentastringsinternamente? . . . . . . . . 21 2.5 Conclusão. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 3 Manipulaçõesbásicas 25 3.1 Umacalculadora:oexemplorevisadomaiscomum . . . . . 25 3.2 Pegandodadosnoterminal. . . . . . . . . . . . . . . . . . . . 26 3.3 Comparações:maior,menor,igualeoutras . . . . . . . . . . 27 3.4 Condicionais:if,elif&else . . . . . . . . . . . . . . . . . . . . 28 3.5 Operadoreslógicos . . . . . . . . . . . . . . . . . . . . . . . . 31 vii Sumário CasadoCódigo 3.6 Loopscomwhile . . . . . . . . . . . . . . . . . . . . . . . . . . 31 3.7 Primeiraestruturadedados:lista . . . . . . . . . . . . . . . . 32 3.8 Looppythônicocomforelistas . . . . . . . . . . . . . . . . . 34 3.9 Percorrendointervalosdezeroaténcomrange() . . . . . . . 35 3.10 Enumerandocoleçõescomforefunçãoenumerate . . . . . . 36 3.11 Declarandofunções:comandodef . . . . . . . . . . . . . . . 37 3.12 Valorespadronizadosdeargumentos . . . . . . . . . . . . . . 37 3.13 Parâmetrosnomeados . . . . . . . . . . . . . . . . . . . . . . . 38 3.14 Recebendoumnúmeroarbitráriodeargumentos:packing& unpacking. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 3.15 Usandocódigojápronto:importandomódulos . . . . . . . . 41 3.16 Conclusão. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 4 Primeiroprograma:downloaddedadosdaCopa2014 43 4.1 Criandoumafunçãoparadownloadnaweb . . . . . . . . . . 43 4.2 Primeiroprogramacompleto. . . . . . . . . . . . . . . . . . . 45 4.3 Definindofunçõesmain . . . . . . . . . . . . . . . . . . . . . 45 4.4 Realizandoodownload . . . . . . . . . . . . . . . . . . . . . . 48 4.5 Maisdobásico:extraindoarquivosdedadosemetadados . . 49 4.6 Conclusão. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 5 Estruturasdedados 53 5.1 Montandoummodeloconceitualusandoestruturasdedados 53 5.2 Dicionários:fundaçãodalinguagem . . . . . . . . . . . . . . 55 5.3 Montandoodicionáriodemetadados . . . . . . . . . . . . . 56 5.4 Adicionandoeremovendoelementosemumalista . . . . . . 58 5.5 Iterandodicionários:vendovaloresechaves . . . . . . . . . . 60 5.6 Tuplas:sequênciasimutáveis . . . . . . . . . . . . . . . . . . . 62 5.7 Explorandoosdadosquecoletamos. . . . . . . . . . . . . . . 63 5.8 Exemplo final usando estruturas de dados para explorar os metadados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 5.9 Estruturasdedadossãoimportantes? . . . . . . . . . . . . . . 70 5.10 Conclusão. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 viii
Description: