Apostila Python 2 0b

download Apostila Python 2 0b

of 117

Transcript of Apostila Python 2 0b

  • 5/28/2018 Apostila Python 2 0b

    1/117

    Luiz Gabriel Olivrio Noronha

    Bruno Nunes Pinheiro

    Carlos Eduardo de Freitas Oliveira

    Carlos Eduardo Ribeiro Jnior

    Osmiro Marco Jnior

  • 5/28/2018 Apostila Python 2 0b

    2/117

    1

    Sobre a apostila

    Esta apostila foi escrita por ex-estudantes da Universidade Santa Ceclia, localizada em

    SantosSP, como exigncia parcial para obteno do ttulo de Bacharel em Cincia da

    Computao, sob orientao do Prof. Maurcio Neves Asenjo. Seu contedo destinado a

    estudantes iniciantes de programao, que tenham pelo menos conhecimento de lgica de

    programao, conceitos de bancos de dados e SQL (Structured Query Language).

    Nessa apostila ns cobriremos os recursos fundamentais da linguagem Python e de sua

    biblioteca-padro, alm de alguns assuntos mais avanados e tericos, que daro ao estudante

    a base necessria para poder se aprofundar em outros tpicos mais especficos, seja da

    biblioteca-padro do Python, comoframeworkse bibliotecas de terceiros.

    Para quem j desenvolvedor e deseja aprender Python, recomendamos a leitura do

    livro Python para Desenvolvedores - 2 edio, de Luiz Eduardo Borges, disponvel para

    downloadno seu site oficial,http://ark4n.wordpress.com/python/.

    Prefcio da 2 Edio

    A 1 edio desta apostila foi disponibilizada para downloadnoSource Forgeem

    novembro de 2010, poca em que o trabalho que a apostila fazia parte foi apresentado na 10

    edio do SEMESP CONIC (Congresso Nacional de Iniciao Cientfica). Devido a este limite de

    tempo, alguns contedos tiveram de ser deixados de fora e diversos tpicos ficaram confusos.

    Esta 2 edio, lanada em novembro de 2011, foi totalmente revisada, os contedos

    que foram deixados de fora na 1 edio foram includos, bem como alguns tpicos foram re-

    escritos. Dentre os tpicos includos podemos citar:

    Os tipos NoneTypee Unicode; O captulo Trabalhando com bancos de dados; O operador de identidade de objetos.

    A partir dessa edio a apostila passa a ser mantida por somente um dos membros do

    grupo que elaborou a apostila, Luiz Gabriel Olivrio Noronha.

    http://ark4n.wordpress.com/python/http://ark4n.wordpress.com/python/http://ark4n.wordpress.com/python/http://www.sourceforge.net/http://www.sourceforge.net/http://www.sourceforge.net/http://www.sourceforge.net/http://ark4n.wordpress.com/python/
  • 5/28/2018 Apostila Python 2 0b

    3/117

    2

    Site oficial

    A edio mais recente dessa apostila encontra-se disponvel no formato PDF para

    downloadno endereohttp://sourceforge.net/projects/apostila-python/.Dvidas,

    reclamaes, sugestes, correo (e por que no elogios?!) podem ser enviados para o e-mail

    do mantenedor do projeto,[email protected] se manter informado em

    relao a novos lanamentos e correes da apostila, basta seguir o perfil@GabrielOliveriono

    Twitter.

    Licena

    Este trabalho est licenciado sob uma Licena Creative Commons Atribuio-Uso No-

    Comercial-Compartilhamento pela mesma Licena 2.5 Brasil. Para ver uma cpia desta licena,

    visitehttp://creativecommons.org/licenses/by-nc-sa/2.5/br/ou envie uma carta para Creative

    Commons, 171 Second Street, Suite 300, San Francisco, California 94105, USA.

    Convenes

    Nesta apostila utilizamos diversas convenes de estilos para distinguir mais

    facilmente os diferentes tipos de informaes nela contida.

    Exemplos de cdigos-fontes so separados do texto e utilizam a fonte monosespaada

    Courier New; listagens com mais de uma linha aparecem enumeradas para facilitar a

    identificao na sua explicao, como em:

    1print'ola mundo'

    Nomes de variveis, palavras-chave, comandos da linguagem, funes e classes,

    quando em meio ao texto explicativo, tambm so grafados com fonte monoespaada.

    Sentenas que foram disparadas no interpretador interativo do Python, alm de seguir

    a conveno de estilo anterior, so precedidas por >>>.

    Nomes de pessoas, instituies e palavras de outros idiomas esto destacados em

    itlico, assim como termos importantes em sublinhado.

    http://sourceforge.net/projects/apostila-python/http://sourceforge.net/projects/apostila-python/http://sourceforge.net/projects/apostila-python/http://localhost/var/www/apps/conversion/tmp/scratch_3/[email protected]://localhost/var/www/apps/conversion/tmp/scratch_3/[email protected]://localhost/var/www/apps/conversion/tmp/scratch_3/[email protected]://www.twitter.com/GabrielOliveriohttp://www.twitter.com/GabrielOliveriohttp://www.twitter.com/GabrielOliveriohttp://creativecommons.org/licenses/by-nc-sa/2.5/br/http://creativecommons.org/licenses/by-nc-sa/2.5/br/http://creativecommons.org/licenses/by-nc-sa/2.5/br/http://creativecommons.org/licenses/by-nc-sa/2.5/br/http://www.twitter.com/GabrielOliveriohttp://localhost/var/www/apps/conversion/tmp/scratch_3/[email protected]://sourceforge.net/projects/apostila-python/
  • 5/28/2018 Apostila Python 2 0b

    4/117

    3

    Sumrio

    Sobre a apostila ........................................................................................................................ 1

    Prefcio da 2 Edio ................................................................................................................ 1Site oficial ................................................................................................................................. 2

    Licena...................................................................................................................................... 2

    Convenes .............................................................................................................................. 2

    Sumrio .................................................................................................................................... 3

    Introduo ................................................................................................................................ 7

    O que Python? ................................................................................................................... 7

    Histria ................................................................................................................................. 8

    Implementaes ................................................................................................................... 8

    Verses ................................................................................................................................. 9

    Ambientes de desenvolvimento e editores de texto .............................................................. 9

    Modos de execuo ............................................................................................................ 10

    Interativo ........................................................................................................................ 10

    Compilao e interpretao ............................................................................................ 12

    Sintaxe ................................................................................................................................ 14

    Blocos ............................................................................................................................. 14

    Comentrios.................................................................................................................... 15

    Identificadores ................................................................................................................ 16

    Variveis e tipos ...................................................................................................................... 17

    Tipos de dados .................................................................................................................... 17

    Tipos Numricos ................................................................................................................. 17

    Int ................................................................................................................................... 17

    Long ................................................................................................................................ 18

    Float ................................................................................................................................ 18

    Complex .......................................................................................................................... 18

    Bool ................................................................................................................................ 18

    NoneType ....................................................................................................................... 19

    Tipos de Sequncias ............................................................................................................ 19

    List .................................................................................................................................. 19

    Tuple ............................................................................................................................... 21

    Dict ................................................................................................................................. 23

  • 5/28/2018 Apostila Python 2 0b

    5/117

    4

    Strings ................................................................................................................................. 24

    Seleo e slicing .............................................................................................................. 25

    Sequncias de escape ...................................................................................................... 25

    Formatao (ou interpolao) de strings ......................................................................... 27Unicode .......................................................................................................................... 31

    Determinando o tipo de uma varivel ................................................................................. 32

    Determinando o tamanho de uma varivel ......................................................................... 33

    Converses ......................................................................................................................... 33

    Avaliao de True e False .................................................................................................... 34

    Operadores ............................................................................................................................. 35

    Operadores Aritmticos ...................................................................................................... 35

    Operadores lgicos ............................................................................................................. 37

    Identidade de objetos ......................................................................................................... 38

    Presena em Sequncias ..................................................................................................... 38

    Estruturas ............................................................................................................................... 40

    Estrutura de deciso ........................................................................................................... 40

    Estruturas de repetio ....................................................................................................... 41

    For .................................................................................................................................. 41

    While .............................................................................................................................. 41

    Controle de laos ............................................................................................................ 42

    Funes .................................................................................................................................. 44

    O que so? .......................................................................................................................... 44

    Parmetros e argumentos ................................................................................................... 44

    Parmetros com argumentos default.............................................................................. 45

    Argumentos de tamanho varivel .................................................................................... 46

    Decoradores ....................................................................................................................... 47

    DocStrings ........................................................................................................................... 48

    Mdulos ................................................................................................................................. 49

    Criando um mdulo ............................................................................................................ 49

    Importando mdulos .......................................................................................................... 50

    Espao de nomes .................................................................................................................... 54

    Local ............................................................................................................................... 54

    Global ............................................................................................................................. 54

    Embutido ou Built-in....................................................................................................... 55

  • 5/28/2018 Apostila Python 2 0b

    6/117

    5

    Pacotes ................................................................................................................................... 57

    Trabalhando com arquivos ...................................................................................................... 59

    Criando arquivos ................................................................................................................. 59

    Modos de abertura ............................................................................................................. 59Lendo arquivos ................................................................................................................... 60

    Posicionando-se em arquivos .............................................................................................. 61

    Atributos e mtodos de arquivos ........................................................................................ 62

    Tratamento de excees ......................................................................................................... 64

    O que so excees? ........................................................................................................... 64

    Try / Except ......................................................................................................................... 64

    Acionando excees ............................................................................................................ 65

    Finally ................................................................................................................................. 66

    Trabalhando com bancos de dados ......................................................................................... 67

    Criando o banco de dados ................................................................................................... 68

    Estabelecendo conexo ....................................................................................................... 71

    Executando queries............................................................................................................. 71

    Paradigmas de programao ................................................................................................... 75

    Paradigma Imperativo ......................................................................................................... 75

    Paradigma Procedural ......................................................................................................... 76

    Programao Orientada a Objetos ...................................................................................... 77

    Classes new-stylee old-style............................................................................................ 78

    Criando classes ................................................................................................................ 78

    Variveis de instncia ...................................................................................................... 79

    Variveis de classe .......................................................................................................... 80

    Mtodos ......................................................................................................................... 80

    Atributos e mtodos dinmicos ....................................................................................... 83

    Referncias a objetos ...................................................................................................... 84

    Herana .......................................................................................................................... 85

    Sobrescrita de mtodos (Method overriding) .................................................................. 86

    Sobrecarga de mtodos (Method overloading) ................................................................ 87

    Atributos e mtodos embutidos ...................................................................................... 87

    Representao de objetos ............................................................................................... 88

    Variveis e mtodos privados .......................................................................................... 91

    Propriedades ................................................................................................................... 92

  • 5/28/2018 Apostila Python 2 0b

    7/117

    6

    Exemplo prtico .............................................................................................................. 93

    Programao Funcional ..................................................................................................... 106

    Funes annimas ou lambda..................................................................................... 107

    Mapeamento ................................................................................................................ 108Filtragem ....................................................................................................................... 109

    Reduo ........................................................................................................................ 109

    Iteradores ..................................................................................................................... 110

    Generator expressionse Lists comprehensions.............................................................. 111

    Generators .................................................................................................................... 113

    Apndice .............................................................................................................................. 115

    AConfigurando o PATH do Windows .............................................................................. 115

  • 5/28/2018 Apostila Python 2 0b

    8/117

    7

    Introduo

    O que Python?

    Python uma linguagem de programao de propsito geral, utilizada dentre

    diversas outras aplicaes, para o desenvolvimento de aplicativos de console (modo texto),

    aplicativos que utilizam formulrios, aplicaes web, cientficas,parserse tambm como

    linguagem de scripting, para estender aplicativos e automatizar tarefas.

    Dentre suas caractersticas pode-se ressaltar que Python:

    interpretadaAo contrrio das linguagens compiladas, que transformam o cdigo escrito dos

    programas para uma plataforma especifica, por exemplo, Windows ou Linux, Python

    transforma o cdigo do programa em bytecodese estes so executados por um

    interpretador, o que possibilita o aplicativo ser executado em vrias plataformas com

    poucas ou mesmo nenhuma alterao.

    cdigo-abertoPython absolutamente livre, mesmo para fins comerciais, permitindo a venda de um

    produto escrito em Python, ou um produto que venha com o interpretador embutido

    sem pagar taxas ou licenas para isso. Possui tipagem dinmica e forte

    Tipagem dinmica se refere linguagem no associar tipos s variveis e sim aos seus

    valores; e como tipagem forte, entende-se que no possvel realizar operaes com

    valores que possuem tipos incompatveis de dados, como, por exemplo, unir um

    nmero a uma string.

    Possui interpretador interativoPython possui um interpretador interativo que permite testar cdigos de maneira fcil

    e rpida, sem a necessidade de criar um arquivo s para testar um bloco de cdigo.

    Tudo em Python um objetoTudo em Python - mdulos, tipos de dados, variveis, classes e funes, so objetos e

    como tais, possuem atributos (dados) e mtodos (funes) vinculados que permitem

    manipular esses atributos.

    Suporta mltiplos paradigmas de programaoParadigmas de programao so estilos de resolver problemas especficos na

    engenharia de softwares. H vrios paradigmas de programao e cada um mais

  • 5/28/2018 Apostila Python 2 0b

    9/117

    8

    adequado para resolver um problema de maneira mais fcil do que o outro. Python

    suporta os seguintes paradigmas de programao:

    Procedural;

    Orientado a objetos; Funcional;

    Veremos mais detalhadamente os paradigmas de programao mais adiante na

    apostila.

    Histria

    Python foi criada no incio de 1990 por Guido van Rossumno CWICentrum Wiskunde

    & Informatic(Instituto Nacional de Pesquisa de Matemtica e Cincia da Computao, em

    holands) nos Pases Baixos, para ser a sucessora da linguagem de programaoABC.Seu

    nome baseado na srie de televiso britnica Monty Python's Flying Circuse no na cobra

    Pton (Python, em ingles) como muitos pensam. Embora Guidoinclua contribuies de muitos

    programadores, ele ainda se mantm como o principal autor da linguagem e conhecido na

    comunidade comoBenevolent Dictator for Life(Ditador Benevolente para a Vida, em ingls).

    Em 1995, Guidocontinuou seu trabalho na Corporation for National Research

    Initiatives(Corporao para Iniciativas de Pesquisas Nacionais, em ingls), em Reston

    Virginia, onde foram lanadas vrias verses do Python. Em maio de 2000, Guidoe a equipe de

    desenvolvimento do Python se mudaram para o BeOpen.com para formar o time BeOpen

    PythonLabs. Em outubro do mesmo ano, o time PythonLabsse muda para a Digital Creations,

    agora chamada deZope Corporation.

    Em 2001, a Python Software FoundationPSFfoi formada, uma organizao sem fins

    lucrativos criada especificamente para possuir as propriedades intelectuais relacionadas

    linguagem Python.

    Implementaes

    Uma implementao de Python deve ser entendida como um programa ou ambiente

    que fornece suporte execuo de programas escritos em Python ou algum dialeto similar da

    linguagem.

    H diversos pacotes de software que fornecem o que todos conhecemos como Python,

    apesar de alguns deles serem mais como distribuies ou variantes de alguma implementao

    existente do que uma implementao completamente nova da linguagem. A implementao

    http://en.wikipedia.org/wiki/ABC_%28programming_language%29http://en.wikipedia.org/wiki/ABC_%28programming_language%29http://en.wikipedia.org/wiki/ABC_%28programming_language%29http://en.wikipedia.org/wiki/Benevolent_Dictator_For_Lifehttp://en.wikipedia.org/wiki/Benevolent_Dictator_For_Lifehttp://en.wikipedia.org/wiki/Benevolent_Dictator_For_Lifehttp://en.wikipedia.org/wiki/Benevolent_Dictator_For_Lifehttp://en.wikipedia.org/wiki/ABC_%28programming_language%29
  • 5/28/2018 Apostila Python 2 0b

    10/117

    9

    escrita na linguagem C por Guido van Rossum chamada de CPython ou simplesmente de

    Python.

    H outras implementaes da linguagem, como:

    CLPython: Implementao de Python em Common Lisp

    IronPython: Implementao para a plataforma .Net/Mono. Possibilita desenvolverprogramas que utilizam as classes do Microsoft Framework .Net / Mono e integr-los

    com aplicativos escritos em C#, VB.Net ou quaisquer linguagens que sigam a Common

    Language Specification(CLS);

    Jython: Interpretador de Python implementado em Java. Possibilita compilarprogramas escritos em Python em arquivos bytecodesJava, utilizar as classes da

    plataforma Java e integrar aplicativos com outros escritos para esta plataforma;

    Python for S60: Conhecido como PyS60, a implementao de Python portado para aplataforma de software S60 da Nokia, baseado na verso 2.2.2 do Python.

    Verses

    As implementaes oficiais do Python so mantidas pela PSF e no momento se

    encontram nas verses 2.7.2 e 3.2.2, disponveis para downloadno endereo

    http://www.python.org/download.

    As verses 2.x e 3.x esto previstas para coexistir por vrios lanamentos em paralelo,

    onde a srie 2.x existe em grande parte devido compatibilidade com bibliotecas de terceiros

    e possui algumas novas caractersticas que esto sendo portadas da srie 3.x. Devido a esta

    compatibilidade, utilizaremos nesta apostila a verso 2.7, que corrige alguns bugsda verso

    anterior e implementa alguns recursos. Apesar de utilizarmos a verso 2.7, nada o impede de

    utilizar outra verso, desde que seja superior 2.5.

    A maioria das distribuies Linux j vem com o interpretador do Python instalado. Para

    plataforma Windows h um instalador, que inclui o interpretador, a documentao e umambiente de desenvolvimento integrado (IDE)o IDLE.

    Ambientes de desenvolvimento e editores de texto

    Tanto Ambientes de Desenvolvimento Integrado (IDEs Integrated Development

    Environment) quanto editores de texto para programao, colaboram bastante no

    desenvolvimento de aplicaes em qualquer linguagem de programao, reduzindo o nmero

    de erros que o programador possa cometer.

    http://www.python.org/downloadhttp://www.python.org/downloadhttp://www.python.org/download
  • 5/28/2018 Apostila Python 2 0b

    11/117

    10

    Como dissemos anteriormente, o IDLE j vem incluido no instalador do Python para

    Windows, e no Linux, pode ser baixado e instalado atravs de gerenciadores de pacotes ou

    baixado no site do Pythonhttp://www.python.orge compilado atravs do mtodo CMMI

    (Configure, Make, Make Install).O instalador do Python no Windows inclui o IDLE, cujo nome tanto uma homenagem

    a um dos integrantes do grupo Monty Python's Flying Circus, Eric Idle, quanto abreviao de

    Integrated DeveLopment Editor, e possui recursos como colorao de sintaxe (syntax

    highlighting), autocompletar (autocomplete) e um debugger. Ele ser utilizado nesta apostila

    devido a sua aparncia simples para iniciantes em programao e j vir incluso no instalador

    do Python, mas nada impede o estudante de utilizar outros IDEs, como:

    PyScripter (Windows) -http://code.google.com/p/pyscripter/; SPE (Multi-plataforma) -http://pythonide.blogspot.com/; Eclipse com opluginPyDev (Multi-plataforma - melhor escolha) -

    http://www.eclipse.org/.

    Ou de editores, como:

    Notepad++ (Windows) -http://notepad-plus-plus.org/; KomodoEdit (Multi-plataforma) -http://www.activestate.com/komodo-edit; Vim, Emacs, GEdit, entre muitos outros na plataforma Linux.

    Modos de execuo

    Python possui dois modos de execuo: o modo interativo e o modo de compilao e

    interpretao.

    Interativo

    O interpretador interativo de Python pode ser encontrado como Python (command

    line) na aba Python 2.7 no menu Iniciar no Windows, ou digitando pythone pressionando

    ENTER em um terminal de Linux. Isto tambm pode ser configurado em ambientes Windows

    incluindo o caminho do interpretador do Python na varivel de sistema PATH. Mais

    informaes noApndice Ada apostila.

    http://www.python.org/http://www.python.org/http://www.python.org/http://code.google.com/p/pyscripter/http://code.google.com/p/pyscripter/http://code.google.com/p/pyscripter/http://pythonide.blogspot.com/http://pythonide.blogspot.com/http://pythonide.blogspot.com/http://www.eclipse.org/http://www.eclipse.org/http://notepad-plus-plus.org/http://notepad-plus-plus.org/http://notepad-plus-plus.org/http://www.activestate.com/komodo-edithttp://www.activestate.com/komodo-edithttp://www.activestate.com/komodo-edithttp://www.activestate.com/komodo-edithttp://notepad-plus-plus.org/http://www.eclipse.org/http://pythonide.blogspot.com/http://code.google.com/p/pyscripter/http://www.python.org/
  • 5/28/2018 Apostila Python 2 0b

    12/117

    11

    Os sinais >>>mostram que o interpretador est pronto para receber comandos. Digite

    os seguintes comandos no interpretador interativo:

    1 >>>print"Hello, Magrathea!" [ENTER]2 >>>if4>2: [ENTER]3 ... print"4 > 2" [ENTER]4 ... [ENTER]5 4>26 >>>

    Na primeira linhavemos print "Hello, Magrathea!". print um comando da

    linguagem, e imprime um valor, no caso o texto Hello, Magrathea!. Ao pressionar ENTER

    aps o comando printo interpretador est pronto para receber outro comando.

    Na segunda linha, ao digitar if 4 > 2:e pressionar ENTER, o interpretador mostra

    ..., que significa que ele est esperando completar a sentena anterior. Como veremos mais

    adiante, um iftesta uma condio, se ela for verdadeira ento executa um ou mais

    comandos, portanto, pelo menos um comando tem que ser inserido (ou um erro seria

    exibido). Ao entrar com o comando print "4 > 2"e pressionar ENTER, o interpretador

    exibe ...novamente, esperando mais sentenas. Podemos pressionar ENTER e a sentena

    estar terminada, o interpretador exibe o resultado, e ento estar pronto para receber outro

    comando.

    Nos exemplos acima no precisaramos necessariamente ter chamado o comando

    printpara imprimir os textos no interpretador interativo, podemos passar objetos/valores

    diretamente para o interpretador do Python e ele se vira para imprimir o valor mais que faz

    mais sentido de acordo com seu tipo. Utilizamos o comando printsomente para demonstrar

    de uma forma didtica a utilizao do interpretador interativo do Python, mas lembre-se de

    nunca omitir o comando printem um scriptno modo Compilao e interpretao, que

    veremos logo a diante. Vamos ver alguns exemplos:

  • 5/28/2018 Apostila Python 2 0b

    13/117

    12

    1 >>>'String'2 'String'3 >>>1+14 25 >>>object()

    6

    Na linha 1 passamos uma string para o interpretador interativo. Como veremos no

    prximo captulo, uma string o tipo de dado que utilizamos quando queremos definir

    sequencias de caracteres, ou seja, textos. Na linha 3, passamos uma expresso aritmtica, e o

    interpretador respondeu com o resultado da expresso. At este ponto o interpretador

    interativo imprimiu valores coerentes para todas das instrues que passamos, mas na linha 6

    o texto impresso pareceu um tanto confuso, no? O valor impresso na linha 6 significa que

    instanciamos um objeto do tipo objecte o armazenamos no endereo de memria0x00gF14B0. No se preocupe se voc no entendeu isso de instanciar objetos, veremos isso

    bem mais a frente, em Orientao a Objetos.

    Compilao e interpretao

    O cdigo-fonte de um programa escrito em Python traduzido para bytecodes, que

    um formato binrio com instrues a serem executadas pelo interpretador. Em linguagens

    compiladas, o cdigo-fonte compilado (traduzido) para cdigo de mquina, que depende da

    plataforma sendo executada. Como o interpretador do Python traduz o cdigo para o

    interpretador, e h interpretadores para a maioria as plataformas, o cdigo escrito

    provavelmente ser executado em todas elas com poucas, ou mesmo nenhuma modificao.

    Exemplo prtico

    Abra o IDLE, clique em Filee em seguida em New Window. Uma nova janela ser

    exibida, nela, digite os seguintes comandos:

    1print"Ola, mundo!"

    2 raw_input"Pressione qualquer tecla para continuar..."

    No menu File, clique em Save, escolha o local a salvar o arquivo e o nomeie como

    ola_mundo.py. Com o arquivo salvo, podemos execut-lo clicando em Rune em seguida em

    Run Module, ou pressionando a tecla de atalho F5. Desta forma, o programa executado em

    um shellno prprio IDLE, porm podemos tambm execut-lo clicando duas vezes sobre ele

  • 5/28/2018 Apostila Python 2 0b

    14/117

    13

    ou chamando o interpretador Pythonna linha de comando e passando o nome/caminho do

    arquivo como argumento 1:

    C:\caminho_do_arquivo>python ola_mundo.py

    Ao fazer isso, o interpretador compilar o cdigo-fonte para bytecodee o armazenar

    em disco. Na prxima vez que o programa for executado o interpretador no precisar

    compilar o arquivo novamente, ele se encarrega de executar o programa compilado, a no ser

    que alteraes tenham sido feitas no cdigo fonte, onde o interpretador compilar novamente

    o cdigo-fonte do programa para execut-lo na sua mquina virtual.

    O bytecode armazenado em disco na mesma pasta do cdigo-fonte e com o mesmo

    nome do arquivo, porm com a extenso .pyc(bytecode normal) ou .pyo(bytecode

    otimizado), dependendo da opo que for passada para o interpretador, sendo .pyca opo

    padro. O bytecodetambm pode ser empacotado junto com o interpretador em um

    executvel, para facilitar a distribuio da aplicao, eliminando a necessidade de instalar

    Python em cada computador que for executar o aplicativo.

    O resultado do programa ser um Ola, mundo!e um Pressione qualquer tecla para

    continuar...impressos na tela. O comando raw_input exibe um texto na tela e captura um

    valor digitado e pode armazen-lo em uma varivel, como veremos mais adiante. Neste caso,

    no estamos armazenando nada, utilizamos raw_inputsomente para dar tempo de voc lero texto caso o execute clicando duas vezes sobre o arquivo no seu gerenciador de arquivos.

    Experimente remover a segunda linha e executar o programa novamente para ver o que

    aconteceo terminal aparece, o texto impresso e ento o terminal se fecha antes mesmo de

    dar tempo de voc ler o texto.

    Ateno

    Caso voc tenha testado outros textos no exemplo prtico anterior, com caracteres

    no-ascii, como letras acentuadas e o , e tenha recebido uma mensagem de erro como

    SyntaxError: Non-ASCII character '\xe3' in file ola_mundo.py ..., no se

    preocupe - veremos mais a frente como fazemos para representar nossos caracteres latinos no

    Python.

    1Para que isso funcione necessrio incluir o caminho onde o interpretador do Python foi instalado (geralmente

    C:\Python27) na varivel de ambiente PATH e reiniciar o computador para que as alteraes sejam aplicadas. Mais

    informaes no apndice A da apostila.

  • 5/28/2018 Apostila Python 2 0b

    15/117

    14

    Sintaxe

    Um programa escrito em Python constitudo de instrues que podem ser

    distribudas em vrias linhas no cdigo-fonte. Uma das formas de se fazer isso utilizando o

    caractere barra-invertida ( \ ). Exemplos:

    1 x =3*4\2 5.03 mensagem1 ="Texto de uma linha"4 mensagem2 ="Texto distribudo \5 em mais de uma linha"

    Tambm podemos distribuir o cdigo em mais linhas com vrgulas, quando estamos

    armazenando dados em colees, como listas, tuplas e dicionrios, definindo parmetros e

    passando argumentos para funes, que veremos mais a diante. Exemplos:

    1 lista =['string1',2 'string2']34 deffuncao(param1,5 param2,param3):6 printparam1,param2,param378 funcao('string1','string2',9 'string3')

    Blocos

    Python usa espaos em branco e indentao para separar blocos de cdigo, como

    estruturas de controle e de repetio e na declarao de funes, que veremos a seguir na

    apostila. O aumento da indentao indica o incio de um novo bloco, que termina com

    diminuio da indentao.

    A linha que define a estrutura ou declarao terminada por dois-pontos e simboliza

    que as linhas com mais um nvel de indentao que seguem fazem parte do seu bloco de

    cdigo. No exemplo abaixo demonstrada a definicao de uma funo:

    1 defimprime_dados(nome,idade,genero):2 print"Nome:",nome3 print"Idade:",idade45 print"Genero sexual:",genero67print42

    No exemplo anterior, as linhas 2, 3, 4 e 5 fazem parte da funo imprime_dados,

    enquanto o print da stima linha no. importante notar que as linhas 4 e 6 em branco noinfluenciam no trmino do bloco, podemos ter linhas em branco dentro de um bloco de

  • 5/28/2018 Apostila Python 2 0b

    16/117

    15

    cdigo, e at conveniente para facilitar sua leiturao bloco s termina com a diminuio da

    indentao.

    Na maioria das linguagens de programao, a indentao bastante utilizada para

    aumentar a legibilidade do cdigo, porm no Python ela obrigatria, se um erro deindentao estiver presente no cdigo, ocorrer uma falha na interpretao. O exemplo a

    seguir demonstra um erro de indentao na linha 3:

    1 defimprime_dados(nome,idade,genero):2 print"Nome:",nome3 print"Idade:",idade4 print"Genero sexual:",genero

    Apesar de no recomendado, possvel declarar vrias instrues na mesma linha

    (inline) no Python, para isto, o caractere ponto-e-vrgula utilizado. Exemplo:

    print"Nome:",nome;print"Idade:",idade

    O ponto-e-vrgula tambm pode ser inserido no trmino de cada linha, porm seu uso

    opcional e quase nunca utilizado.

    Comentrios

    Os comentrios em uma linguagem de programao so teis para deixar algum tipo

    de informao, como lembretes de funcionamento de um processo, erros a serem corrigidos

    ou cdigo a ser melhorado para a pessoa que for ler e manter o cdigo, este sendo

    possivelmente at mesmo o programador que escreveu o cdigo.

    O caractere # marca o incio dos comentrios, a partir deste caractere todo texto

    ignorado pelo interpretador at o final da linha - com exceo dos comentrios funcionais ou

    mgicos, que sero exibidos a seguir. Exemplos de comentrios no-funcionais:

    1 # Linha inteira comentada2 conexao =None # Variavel instanciada no metodo conecta()

    3 smtp_server ="smtp.magrathea.com" # Servidor de email

    Os comentrios funcionais so interpretados pelo interpretador do Python e possuem

    duas utilidades:

    Alterar a codificao do arquivo do cdigo-fonte do programa, onde acrescentado ocomentrio # -*- coding: -*-no incio do arquivo, onde

    a codificao do arquivo, geralmente utilizado utf-8 ou latin-1para

    caracteres que no fazem parte da lingua inglesa, como caracteres latinos;

    Indicar o local do interpretador que ser utilizado para executar o programa, onde acrescentado o comentrio #!seguido do caminho do interpretador, algo como

  • 5/28/2018 Apostila Python 2 0b

    17/117

    16

    #!/usr/bin/python e utilizado somente em sistemas *NIX like, como o Linux,

    FreeBSD, OpenBSD, entre outros.

    Os dois comentrios funcionais explicados anteriormente podem existir em conjunto,

    exemplo:

    1 #!/usr/bin/python2 # -*- coding: latin-1 -*-

    Ateno

    Apesar de nessa apostila no definirmos a codificao nas listagens de cdigos-fontes a

    fim de reduzir o nmero de linhas, no se esquea de definir a codificao nos seus arquivos,

    ou os caracteres latinos neles presentes aparecero incompreensveis, na melhor das

    hipteses. Veremos mais sobre tipos de caracteres no captulo seguinte, quando falaremos

    sobre Unicode.

    Identificadores

    Identificadores so nomes utilizados para identificar objetos - variveis, funes e

    classes, por exemplo. Os identificadores devem comear com uma letra sem acentuao ou

    com um sublinhado ( _ ), e podem conter nmeros, letras sem acentuao e sublinhados.

    Python case-sensitive, ou seja, o identificador python diferente dos identificadores

    PYTHONe Python.

  • 5/28/2018 Apostila Python 2 0b

    18/117

    17

    Variveis e tipos

    Variveis so espaos reservados na memria utilizados para armazenar valores, como

    por exemplo, textos, resultados de clculos, entrada de usurio, resultados de consultas a umabase de dados, etc. Variveis devem seguir as regras de identificadores, vistos anteriormente.

    Tipos de dados

    Tipos de dados restringem os valores a serem armazenados nas variveis. Os tipos pr-

    definidos no Python podem ser simples - como nmerose tambm os tipos que funcionam

    como colees, como as listas e dicionrios. Como dito anteriormente, Python possui tipagem

    dinmica, o que associa o valor da varivel a um tipo no momento da atribuio de valor e

    aloca o espao necessrio para armazenar seus valores. Para atribuir valores s variveis

    utilizado o operador de atribuio ( = ). Exemplos:

    1 nome ="Zaphod" # Uma string2 resposta =42 # Um inteiro

    No exemplo acima a varivel nometem o valor "Zaphod"atribudo, assim como a

    varivel respostapossui o valor 42. Pode-se tambm atribuir vrios valores de uma s vez s

    variveis, por exemplo:

    x,y,z =10,-5,7 # Igual a x = 10, y = -5 e z = 7

    Os tipos em Python so divididos em duas categorias:

    Mutveisque permitem que seus valores sejam alterados; Imutveisque no permitem que seus valores sejam alterados, ou seja, ao re-atribuir

    um valor a uma varivel, este no alterado, o valor a ser atribudo um novo valor.

    Tipos Numricos

    Tipos de dados numricos em Python so imutveis e se dividem basicamente em

    quatro, alm do bool, que uma extenso do tipo int:

    Int

    Representa nmeros inteiros, como 42, 0, 1 e -3, entre -2147483648 a 2147483647.

    Ocupa 4 bytes na memria e pode armazenar tanto valores decimais (de base 10), quanto

    valores octais (de base 8) e hexadecimais (base 16). Para declarar um inteiro octal, o nmero 0

  • 5/28/2018 Apostila Python 2 0b

    19/117

    18

    (zero) tem que ser prefixado ao nmero, como 0123, e para definir um nmero hexadecimal, o

    prefixo 0x ou 0X deve ser utilizado, como 0xFFFFFF ou 0X006699.

    Long

    Representa nmeros inteiros longos e pode armazenar nmeros to grandes quanto a

    memria puder armazenar. Assim como o tipo int, o longtambm pode armazenar nmeros

    tanto decimais, quanto octais e hexadecimais. Para declarar um valor longmesmo se o

    nmero a ser atribudo estiver na faixa de valores do tipo int necessrio sufixar a letra L

    minscula ou maiscula - como em 524511574362l, 0xDDEFBDAEFBDAECBFBAEL e 0122L.

    Como a letra L minscula pode ser confundida facilmente com o nmero 1, uma boa prtica

    utilizar o L sempre maisculo ao invs de minsculo.

    Float

    Representa nmeros reais e que possuem sinal de expoente (e ou E). Esses nmeros

    so comumente chamados comumente defloating-point numbersou nmeros de ponto

    flutuante. Exemplos: 0.0042, .005 (o mesmo que 0.005), 1.14159265 e 6.02e23 (o mesmo que

    6.02). Note que o delimitador de casas decimais o ponto ( . ) e no a vrgula ( , ) padro no

    Brasil.

    Complex

    Representa nmeros complexos, como 0.42j e 9.322e-36j.

    Bool

    O tipo boolfoi adicionado na verso 2.2 do Python como uma especializao do tipo

    int. Os valores do tipo boolpodem representar dois valores completamente distintos: True

    (igual ao int1)e False(igual ao int0) para, respectivamente, verdadeiro e falso.

    Exemplos:

    1 possui_filhos =False # OK2 e_funcionario =false # Erro3 sair =True # OK4 valida_entrada =true # Erro

    Como Python case-sensitive, os valores falsee trueatribudos s variveis nas

    linhas 2 e 4 geram erro de interpretao, por isso, redobre ateno se voc veio de linguagens

    como C/C++, Java ou C#.

  • 5/28/2018 Apostila Python 2 0b

    20/117

    19

    NoneType

    NoneType o tipo de None, uma constante embutida do Python, assim como Truee

    False, e frequentemente utilizada para representar a ausncia de um valor, similar a null

    na linguagem C e derivadas.

    Tipos de Sequncias

    List

    Uma lista um conjunto linear de valores indexados por um nmero inteiro, chamado

    de ndice, que se inicia em 0 (zero). Os elementos contidos em uma lista podem ser de

    qualquer tipo, at mesmo outras listas e no precisam ser todos do mesmo tipo. Uma lista

    delimitada por colchetes, e seus elementos separados por vrgulas. Exemplos:

    1 lista1 =[]2 lista2 =[1,2,3]3 lista3 =["string 1","string 2"]4 lista4 =[1,3.1415,"string",[1,2],(4,5)]

    Nos exemplos anteriores, lista1 uma lista iniciada sem elementos. Estes podem

    ser adicionados ou inseridos na lista atravs se seus mtodos, que sero vistos mais adiante.

    lista4possui 5 elementos, sendo um int, um float, uma string, uma outra lista e uma

    tupla, que ser vista a seguir.

    Como dito anteriormente, os elementos das listas possuem ndices associados. Com

    esses ndices podemos selecionar os elementos. Exemplos:

    1 >>>lista =[1,2,3]2 >>>lista[0] # Imprime 13 >>>lista[1] # Imprime 2

    Usando ndices negativos, as posies so acessadas a partir do final da lista.

    Exemplos:

    1printlista3[-1] # Imprime string 22printlista4[-2] # Imprime (4, 5)

    Python fornece uma maneira simples de criar fatias (slices) de uma lista. Uma fatia

    nada mais do que uma lista gerada a partir de um fragmento de outra lista. Para criar um

    slice, basta especificar os dois ndices separados pelo sinal de dois-pontos (:) - o fragmento

    resultante contm os elementos correspondentes do primeiro ndice ao segundo, no

    incluindo o ltimo elemento. Se omitirmos um dos ndices, assume-se incio ou fim da lista.

    Exemplos:

  • 5/28/2018 Apostila Python 2 0b

    21/117

    20

    1 lista =[1,2,3,4,5]2printlista[0:2] # Imprime [1, 2]3printlista[2:4] # Imprime [3, 4]4 lista[:] # Imprime [1, 2, 3, 4, 5]

    possvel tambm fornecer o intervalo entre os elementos, e caso este no seja

    especificado (como nos exemplos anteriores) o valor padro 1. Exemplos:

    1 lista =[1,2,3,4,5]2printlista[0:2] # Imprime [1, 2]3printlista[2:4] # Imprime [3, 4]4 lista[:] # Imprime [1, 2, 3, 4, 5]

    Repare que na linha 3 no especificamos nem o incio, nem o final do slice, fornecemos

    somente o intervalo com o valor -1, que fez com que a lista seja gerada e exibida do ltimo

    para o primeiro elemento.

    Operaes

    Vimos que tudo em Python um objeto, listas so objetos tambm e possuem

    mtodos (funes) para manipul-las. Abaixo segue uma relao dos mtodos mais comuns e

    alguns exemplos:

    count(elemento): Retorna quantas ocorrncias de um elemento existe na lista.

    Exemplos:

    1 >>>lista =[1,2,3,2]2 >>>lista.count(2)3 24 >>>lista.count(4)5 0

    index(elemento): Retorna primeiro ndice de elemento na lista. Aciona exceo

    ValueError caso valor no exista.

    Exemplo:

    1 >>>lista =[1,2,3,2]2 >>>lista.count(2)3 2

    append(elemento): Insere elemento no final da lista.

    Exemplo:

    1 >>>lista =[1,2,3]2 >>>lista.append(4)3 >>>lista4 [1,2,3,4]

    insert(index, elemento): Insere elemento no ndice passado por argumento.

    Exemplo:

  • 5/28/2018 Apostila Python 2 0b

    22/117

    21

    1 >>>lista =[1,2,3]2 >>>lista.insert(0,-1)3 >>>lista4 [-1,1,2,3]

    remove(elemento): Remove primeira ocorrncia do valor especificado por argumento.

    Exemplo:

    1 >>>lista =[1,2,3,1,2,3]2 >>>lista.remove(1)3 >>>lista4 [2,3,1,2,3]

    pop(): Remove elemento da lista e o retorna. O mtodo popaceita o argumento index, caso

    um ndice no seja especificado, o ltimo elemento da lista removido.

    Exemplos:

    1 >>>lista =[1,2,3,4,5]2 >>>lista.pop() # Remove e retorna elemento 53 54 >>>lista.pop(0) # Remove e retorna elemento 15 16 >>>lista7 [2,3,4]

    sort(): Ordena a lista. O mtodo sortaceita o parmetro reverse, que possibilita que a

    ordenao seja crescente ou decrescente. Caso esse argumento no seja especificado a

    ordenao feita em ordem crescente.

    Exemplos:

    1 >>>lista =[5,2,1,3,4]2 >>>lista.sort()3 >>>lista4 [1,2,3,4,5]5 >>>lista.sort(reverse=True)6 >>>lista7[5,4,3,2,1]

    Tuple

    Uma tupla consiste de um nmero de valores separados por vrgulas. Tuplas ao

    contrrio das listas que acabamos de ver so imutveis - uma vez criadas no podem ser

    modificadas. Exemplos:

    1 >>>t1 =1,2,3,4,52 >>>t13 (1,2,3,4,5)4 >>>t1[0]5 16 >>>t1[2:4]7 (3,4)

    8 >>>t1[::-1]9 (5,4,3,2,1)

  • 5/28/2018 Apostila Python 2 0b

    23/117

    22

    10>>>t2 =(1,3,3)11>>>t2[1]=212Traceback (most recent call last):

    File "",line 1,inTypeError:'tuple'object does notsupport item assignment

    Como voc pode ver nos exemplos acima, as tuplas impressas aparecem sempre entre

    parnteses, de forma que tuplas aninhadas sejam interpretadas corretamente. Podemos

    definir uma tupla com ou sem os parnteses, embora muitas vezes estes sejam necessrios,

    caso a tupla faa parte de uma expresso maior ou provoque ambiguidade. Repare tambm

    nos exemplos acima que tuplas possuem as mesmas funcionalidades de indexao e slicing

    que as listas vistas anteriormente.

    O que fizemos na linha 1 se chama tuple packing, oque acontece quando agrupamos

    dois ou mais valores em uma tupla. A operao inversa, chamada de sequence unpacking,tambm possvel, dessa forma:

    1 >>>tupla =1,22 >>>x,y =tupla3 >>>x4 15 >>>y6 2

    Note que a operao de atribuio mltipla vista logo no incio do captulo nada mais

    do que uma combinao de tuple packinge sequence unpacking. Recordando:

    x,y,z =10,-5,7 # Igual a x = 10, y = -5 e z = 7

    Tuplas podem ter vrios usos, como coordenadas num eixo cartesiano (x, y), registros

    de uma consulta a um banco de dados e onde fizer sentido ou for mais eficiente um conjunto

    fixo de valores.

    Tips and tricks de tuplas

    H uma peculiaridade na construo de tuplas vazias ou com um s tem. Tuplas vazias

    so construdas por um par vazio de parnteses, dessa forma:

    >>>t =()

    Tuplas com somente um elemento devem ser construdas adicionando uma vrgula

    aps seu valor. Abra o interpretador interativo do Python e dispare as seguintes instrues:

    1 >>>x =(1)2 >>>type(x)3 4 >>>y =(1,)5 >>>type(y)

  • 5/28/2018 Apostila Python 2 0b

    24/117

    23

    6

    Repare que ao passarmos a varivel xpara a funo embutida type-que retorna o

    tipo de um objeto - o texto exibido, mostrando que xno uma tupla, mas

    um inteiro. J com yno ocorre o mesmo, j que inserimos a vrgula aps o nico elemento datupla.

    Isso ocorre porque o Python utiliza parnteses tambm para agrupar expresses,

    como em 2 * (42 + y), portanto temos que inserir a vrgula para no haver ambiguidade

    entre tuplas e expresses.

    Operaes

    Tuplas possuem dois mtodos idnticos ao das listas: indexe count. O restante dos

    mtodos de listas realiza modificaes nos valores, e como tuplas so imutveis, no suportam

    tais operaes. Mais infomaes sobre tuplas consulte a documentao oficial da linguagem,

    no endereohttp://docs.python.org/tutorial/datastructures.html#tuples-and-sequences.

    Dict

    Um dicionrio uma coleo de elementos onde possvel utilizar como ndice

    qualquer tipo imutvel, como strings, tuplas e tipos numricos. O termo normalmente

    utilizado para descrever essa associao entre ndice e elemento key/ valueou chave / valor.

    Dicionrios2so definidos entre chaves ( { e } ), as keysseparadas dos valuespor dois-

    pontos ( : ) e os pares de keyse valuesseparados por vrgulas. Exemplos:

    1 >>>dados ={"nome":"Ford","idade":42}2 >>>print"Nome:",dados["nome"]," Idade: ",dados["idade"]3 Nome:Ford,Idade:42

    Podemos tambm adicionar um valor em um dicionrio j definido por meio de

    atribuio, e remover com a instruo del. Exemplos:

    1 >>>dados["telefone"]="0000-9999" # Adiciona valor2 >>>deldados["idade"] # Remove valor

    A instruo delapaga uma referncia a um objeto. Veremos mais sobre o assunto no

    final da apostila, em Orientao a Objetos.

    Operaes

    keys(): Retorna uma lista das chaves de um dicionrio.

    2Caso voc tenha alguma experincia com outras linguagens de programao, possivel que voc j conhea o

    conceito de dicionrios porm com outro nome, como Hash e Map, por exemplo.

    http://docs.python.org/tutorial/datastructures.html#tuples-and-sequenceshttp://docs.python.org/tutorial/datastructures.html#tuples-and-sequenceshttp://docs.python.org/tutorial/datastructures.html#tuples-and-sequenceshttp://docs.python.org/tutorial/datastructures.html#tuples-and-sequences
  • 5/28/2018 Apostila Python 2 0b

    25/117

    24

    Exemplo:

    1 >>>dados ={"nome":"Arthur","idade":42}2 >>>dados.keys()3 ['idade','nome']

    values(): Retorna uma lista dos valores de um dicionrio.

    Exemplo:

    1 >>>dados ={"nome":"Arthur","idade":42}2 >>>dados.values()3 [42,'Arthur]

    items(): Retorna uma lista contendo os pares de chaves e valores em formas de tuplas.

    Exemplo:

    1 >>>dados ={"nome":"Arthur","idade":42}2 >>>dados.items()

    3 [('idade',42),('nome','Arthur')]

    has_key(chave): Retorna Truecaso chave exista em um dicionrio e Falsecaso contrrio.

    Exemplo:

    1 >>>dados ={"nome":"Arthur","idade":42}2 >>>dados.has_key("idade")3 True

    Strings

    Strings so seqncias de caracteres, sejam eles letras, nmeros, espaos, caracteres

    especiais, e etc., e assim como os tipos numricos vistos anteriormente, strings tambm so

    imutveis. Strings podem ser delimitadas por aspas simples, duplas ou triplas, sendo que estas

    devem ser idnticas na abertura e fechamento, ou seja, quando se abre uma string com aspas

    duplas, deve-se fechar com aspas duplas. Exemplos:

    1 >>>string1 ="Python" # Aspas duplas2 >>>string2 ='Python' # Aspas simples3 >>>string3 ="""Python""" # Aspas triplas

    4 >>>string4 ='''Python''' # Aspas triplas

    Strings podem ser unidas (concatenadas) utilizando o operador de adio /

    concatenao ( +). Exemplos:

    1 >>>string1 ="Python, "2 >>>string2 ='Batteries included!'3 >>>string3 =string1 +string24 >>>string4 ='Python '+"Batteries included!"56 >>>string1 # Python

    7 >>>string2 # Batteries included!8 >>>string3 # Python, Batteries included!9 >>>string4 # Python, Batteries included!

  • 5/28/2018 Apostila Python 2 0b

    26/117

    25

    10>>>string1 +string2 # Python, Batteries included!

    Seleo e slicing

    Assim como listas e tuplas, strings tambm so sequncias, portanto, podemos utilizar

    as mesmas funcionalidades de indexao e slicingde elementos vistos nos outros tipos

    seqenciais vistos anteriormente. Exemplo:

    1 >>>string="Python"2 >>>string[0]3 P4 >>>string[1:3]5 yt6 >>>string[3:]7 hon8 >>>"Batteries included!"[0:9]

    9 Batteries

    Sequncias de escape

    Como vimos, definimos strings envolvendo uma sequncia de caracteres entre aspas.

    Tambm vimos na introduo da apostila que o caractere barra-invertida ( \ ) tem a funo de

    separar uma seqncia em vrias linhas, portanto, as aspas e a barra-invertida possuem

    funes especiais no Python, mas e se precisarmos, por exemplo, inserir aspas ou barras-

    invertidas em uma string? Para isso precisamos escapar esses caracteres. Sequncias de

    escape no Python consistem de uma barra-invertida ( \ ) seguida de uma letra, sinal ou

    combinaes de dgitos. Alguns das sequncias de escape que Python dispe so:

    \n Nova linha. Move o cursor para o incio da prxima linha \t Tabulao horizontal \r Retorno de carro. Move o cursor para o incio da linha atual \b Backspace. Retrocede o cursor um caractere \a Alerta. Emite um alerta (beep) \\ Barra invertida. Escapa o caractere \ \" Aspas duplas. Escapa o caractere " \' Aspa simples. Escapa o caractere '

    Exemplos:

    1 >>>print"\"Aspas duplas em strings\""2 "Aspas duplas em strings"3 >>>print'"Aspas duplas em strings"'4 "Aspas duplas em strings"

  • 5/28/2018 Apostila Python 2 0b

    27/117

    26

    5 >>>print"'Aspas simples'"6 'Aspas simples'7 >>>print'\'Aspas simples\''8 'Aspas simples'9 >>>print"Mod.:\t301"10Mod.: 301

    11>>>print'C:\\Python27'12C:\Python2713>>>print"Mod.:\t301\nCordas:\t6"14Mod.: n30115Cordas: 6

    Repare nos exemplos anteriores que podemos inserir aspas-duplas em strings

    delimitadas por aspas-simples e vice-versa. Na linha 6 escapamos o caractere barra-invertida,

    comumente utilizado para expressar um caminho na rvore de diretrios do Windows3ou para

    definir expresses regulares. Nesses casos podemos definir uma string como sendo crua,

    chamada comumente de raw string, bastando preceder a seqncia pela letra r, maiscula

    ou minscula. Fazendo isso, todas as barras-invertidas so deixadas na string sem serem

    interpretadas. Exemplos:

    1 >>>printr"\n" # Imprime \n2 >>>regex =r"[a-zA-Z0-9_.-]{3,}@([a-zA-Z0-9_-]{3,}\.)+[a-zA-Z0-9]+"3 >>>dir=R"C:\Arquivos de programas"

    As aspas triplas so muito teis para criar strings com vrias linhas, assim, as linhas

    podem ser quebradas diretamente sem o uso do caractere de escape "\n". Exemplo:

    1 mensagem ="""\2 ls [-opcoes]3 -l Exibe permisses, data de criao e tipo do arquivo4 -a Exibe inclusive arquivos ocultos"""

    Na linha 1 utilizamos uma barra-invertida depois das aspas para dispor a sentena em

    outra linha somente para melhorar o alinhamento no cdigo, podemos igualmente definir a

    string dessa forma:

    1 mensagem ="""ls [-opcoes]2 -l Exibe permisses, data de criao e tipo do arquivo3 -a Exibe inclusive arquivos ocultos"""

    Ambos resultam a mesma string:

    ls [-opcoes]-l Exibe permisses,data de criao e tipo do arquivo-a Exibe inclusive arquivos ocultos

    3Como veremos mais adiante, em Trabalhando com Arquivos, sempre utilizamos o caractere / (barra) para definir

    um caminho em uma rvore de diretrios, independente do sistema operacional a ser executado.

  • 5/28/2018 Apostila Python 2 0b

    28/117

    27

    Formatao (ou interpolao) de strings

    Podemos formatar strings em Python pelo menos de trs maneiras:

    Por posio, com o operador de interpolao %associado de um smbolo deformatao;

    Por palavra-chave, utilizandoplaceholderse um dicionrio; Atravs do mtodo format, disponvel a partir da verso 2.6 do Python.

    Interpolao por posio

    O primeiro mtodo um dos mais populares, at mesmo porque Python o pegou

    emprestado da linguagem C, e utilizado em diversas linguagens baseadas em C/C++.

    Como vimos, para formatar strings dessa maneira utilizamos o operador %associado

    de um dos smbolos existentes no Python, que so: %s String (converte objeto utilizando a funo str) %r String (converte objeto utilizando a funo repr) %iou %d Nmeros inteiros %o Nmeros octais %h Nmeros hexadecimais %f Nmeros reais (oufloats) %e Nmeros reais exponenciais %% Sinal de porcentagem

    Exemplos:

    1 >>>nome ="Zaphod"2 >>>idade =423 >>>mensagem ="Nome: %s Idade: %d"%(nome,idade)4 >>>printmensagem5 Nome:Zaphod Idade:42

    Repare que passamos as variveis nomee idadepara o operador %atravs de uma

    tupla depois do fechamento das aspas e que no omitimos os parnteses; caso isso ocorra,

    uma exceo TypeError acionada.

    As funes stre repr, utilizadas pelos smbolos de formatao %se %r, so utilizadas

    para representar objetos, strpara uma representao mais amigvel, e reprpara uma

    representao mais especfica do objeto. Veremos mais sobre as funes stre reprmais a

    diante, em Orientao a Objetos.

  • 5/28/2018 Apostila Python 2 0b

    29/117

    28

    Como Python uma linguagem fortemente tipada, para concatenar uma string com

    um int, primeiro teramos que converter o valor da varavel idadeem string e ento

    concatenar os valores, dessa forma:

    1 mensagem = "Nome: " + nome + "Idade: " + str(idade)

    possvel controlar a formatao de tipos numricos de maneira especial atravs de

    modificadores nos smbolos no formato m.n., onde mindica o total de caracteres reservados e

    n, para floatsindica o nmero de casas decimais; para inteiros, nindica o tamanho total do

    nmero, preenchido com zeros esquerda. Ambos os modificadores podem ser omitidos.

    Exemplos:

    1 >>>euler =2.73132 >>>pi =3.141592653 >>>resp =424 >>>print"""\5 ... Pi: %10.3f.6 ... Euler: %.7f.7 ... Resposta: %3d"""%(pi,euler,resp)8 Pi: 3.142.9 Euler:2.7313000.10Resposta: 42

    Chamamos esse mtodo de formatao por posio, pois se mudarmos a posio dos

    os valores na tupla, por exemplo, inverter as variveis pie euler, que so do mesmo tipo, a

    string formatada ser diferente.

    Formatao por palavra-chave

    Esse segundo mtodo bastante semelhante ao primeiro. Exemplo:

    1 >>>mensagem ='Nome: %(nome)s. Idade: %(idade)d.'%{'nome':'Zaphod','idade':42}2 >>>printmensagem # Imprime Nome: Zaphod. Idade: 42.

    Repare que ao invs de passarmos os valores atravs de uma tupla para o operador %,

    utilizamos um dicionrio, onde a chave corresponde aoplaceholderna string a ser formatada,

    e que os smbolos utilizados para formatar strings no primeiro mtodo tambm devem ser

    utilizados nesse, aps o fechamento dos parnteses.

    A formatao de tipos numricos atravs dos modificadores m.ntambm funciona da

    mesma maneira que no mtodo de formatao por posio que vimos anteriormente.

    Exemplos:

    1 >>>euler =2.73132 >>>pi =3.141592653 >>>resp =42

  • 5/28/2018 Apostila Python 2 0b

    30/117

    29

    4 >>>print"""\5 ... Pi: %(pi)10.3f.6 ... Euler: %(euler).7f.7 ... Resposta: %(resposta)3d"""%{'euler':euler,'resposta':resp,'pi':pi}8 Pi: 3.142.

    9 Euler:2.7313000.10Resposta: 42

    Mtodo format

    Como foi dito anteriormente, outra maneira de formatao foi disponibilizada na

    verso 2.6 do Python, o mtodo formatdos objetos string. Esse mtodo o novo padro de

    formatao de strings no Python 3.0, e consiste em definirplaceholders, que podem ser tanto

    numricos (por posio) quanto por palavra-chave, entre um par de chaves ( { } ). Veja alguns

    exemplos:

    1 >>>string1 ="{0} + {1} = {2}"2 >>>string1.format(1,1,2)3 '1 + 1 = 2'4 >>>string2 ="Nome: {nome}. Idade {idade}"5 >>>string2.format(nome='Zaphod',idade=42)6 'Nome: Zaphod. Idade 42'

    No primeiro exemplo definimos osplaceholdersutilizando ndices numricos e

    passamos os valores para o mtodo formatcomo argumentos por posio. No segundo

    exemplo definimos osplaceholdersutilizando palavras-chave e fornecemos os valores para o

    mtodo formatcomo argumentos por palavras-chave 4.

    Assim como nos mtodos que vimos anteriormente, podemos controlar como os

    valores que iro substituir osplaceholderssero exibidos, mas de uma maneira diferente:

    definimos os smbolos de formatao aps o ndice numrico/keyword, precedido por um

    dois-pontos ( : ). Exemplo:

    1 """\

    2 {saudacao}!3 Agora sao {hora:02d}:{minuto:03d}""".format(saudacao='Bom dia',hora=3,minuto=5)

    Diferentemente dos mtodos de formatao anteriores, no precisamos

    obrigatoriamente inserir o smbolo que corresponde ao tipo do valor que ir substituir cada

    placeholderna string, os tipos possuem smbolos de formatao default.

    No primeiro exemplo que vimos, nome uma string, cujo smbolo s, e caso no

    definimos explicitamente seu smbolo, s utilizado implicitamente; o mesmo ocorre com

    4Voc deve estar se perguntando sobre o que so esses tais de argumentos por posio e por palavras-chave que

    falamos tanto agora, no ?! No se preocupe, teremos um tpico s deles mais a diante, em Funes.

  • 5/28/2018 Apostila Python 2 0b

    31/117

    30

    idade, um int, cujo smbolo default d. Esse novo mtodo de formatao mais completo

    que os anteriores e inclui mais simbolos de formatao.

    Para strings:

    's' Stringdefaultpara stringsPara inteiros:

    'd' Nmeros inteiros decimais (base 10)defaultpara inteiros 'b' Nmero inteiro binrio (base 2) 'o' Nmeros inteiros octais (base 8) 'x' Nmeros inteiros hexadecimais (base 16) utilizando letras minsculas

    para dgitos superiores a 9 (de A a F)

    'X' Nmeros inteiros hexadecimais (base 16) utilizando letras maisculaspara dgitos superiores a 9

    'n' Nmero. O mesmo que 'd', exceto que utiliza as configuraes delocalizao para inserir os separadores apropriados de casas decimais

    'c' Caracter. Converte o inteiro para o caractere Unicode correspondenteantes de imprimir.

    Para floats e decimais

    'e' Notao exponencial. Imprime o nmero em notao cientficautilizando a letra e para indicar o expoente

    'E' Notao exponencial. O mesmo que e exceto que utiliza a letra Epara indicar o expoente

    'f'ou 'F' Nmeros reais (oufloats) '%' Porcentagem. Multiplica o nmero por 100 e exibe no formato 'f'

    seguido de um sinal de porcentagem.

    H mais smbolos e opes de formatao disponveis nesse mtodo, como o

    preenchimento de espaos vazios, adio de sinal ( + ) e ( - ) a nmeros, controle de preciso e

    etc. Consulte a documentao oficial da linguagem para mais informaes em

    http://docs.python.org/library/stdtypes.html#string-formatting-operations.

    Operaes

    capitalize(): Retorna uma cpia da string com o primeiro caractere maisculo.

    Exemplo:

    1 string="python"2printstring.capitalize() # Imprime Python

    http://docs.python.org/library/stdtypes.html#string-formatting-operationshttp://docs.python.org/library/stdtypes.html#string-formatting-operationshttp://docs.python.org/library/stdtypes.html#string-formatting-operations
  • 5/28/2018 Apostila Python 2 0b

    32/117

    31

    upper(): Retorna uma cpia da string com todos os caracteres maisculos.

    Exemplo:

    1 string="python"

    2printstring.upper() # Imprime PYTHON

    lower(): Retorna uma cpia da string com todos os caracteres minsculos.

    Exemplo:

    1 string="PYTHON"2printstring.lower() # Imprime python

    strip(): Retorna uma cpia da string com os espaos em branco antes e depois removidos.

    Exemplo:

    1 string=" Python "

    2printstring.strip()+"!!!" # Imprime Python!!!

    startswith(prefixo) : Retorna True se uma string comea com o prefixo passado por

    argumento, e False caso contrrio.

    Exemplo:

    1 string="Python"2printstring.startswith("py") # Imprime False

    Note que, como strings so imutveis, os mtodos que aparentemente possam

    modificar seus valores, como capitalize()e lower(), somente fazem uma cpia do valor

    atual da string, tranformam-no e o retornam modificado, deixando seu valor inalterado. Para

    que a string seja modificada, precisamos atribuir o valor retornado pelo mtodo. Exemplo:

    1 string="PYTHON"2 string=string.lower()

    H muitos outros mtodos disponveis em objetos strings, listamos somente alguns

    deles. Para mais informaes consulte a documentao oficial no endereo

    http://docs.python.org/library/stdtypes.html#string-methods.

    Unicode

    Se voc reparar nas strings definidas at este ponto da apostila, ir notar que at agora

    no utilizamos nem caracteres acentuados, nem o caractere ce-cedilha ( ). Vamos fazer um

    teste, abra o IDLE ou outro editor ou IDE de sua preferncia, crie um arquivo e entre com as

    seguintes instrues:

    1print'Po com ma'2 raw_input('')

    http://docs.python.org/library/stdtypes.html%23string-methodshttp://docs.python.org/library/stdtypes.html%23string-methodshttp://docs.python.org/library/stdtypes.html%23string-methods
  • 5/28/2018 Apostila Python 2 0b

    33/117

    32

    Salve esse arquivo e o execute (clicando duas vezes sobre seu cone ou atravs da linha

    de comando, navegando at o local onde o arquivo foi salvo e executando o seguinte comando

    no terminal oupromptde comando, caso esteja no Windows5):

    python nome_do_arquivo.py

    A seguinte mensagem aparecer logo em seguida:

    C:\ > python teste.pyFile "teste.py", line 1

    SyntaxError: Non-ASCII character '\xe3' in file teste.py on line 1,but no encoding declared; see http://www.python.org/peps/pep-0263.htmlfor details

    O que diz na mensagem acima que inserimos um caractere no-ASCII no nosso

    cdigo-fonte e no declaramos uma codificao no arquivo. Para resolver esse problema e

    podermos lidar com quaisquer caracteres no nosso cdigo-fonte, temos que fazer duas coisas,

    1) declarar o encodingdo arquivo como latin-1(o mesmo que iso-8859-1) ou utf-8e; 2)

    definir nossos textos como Unicode, prefixando o caractere uantes das aspas, assim:

    1 -*- coding: latin-1 -*-2 print u'Po com ma'

    Explicando brevemente, Unicode um padro que permite aos computadores

    representar e manipular de maneira consistente, textos de quaisquer sistemas de escritasexistentes. Voc pode obter mais informaes sobre o Unicode emhttp://www.unicode.org/,

    http://pt.wikipedia.org/wiki/Unicodeehttp://docs.python.org/howto/unicode.html.

    Os mtodos disponveis em strings, como replace, upper, lower, capitalize,

    format, dentre outros, alm dos recursos de formatao, slicinge indexao, tambm esto

    disponveis para sequncias Unicode.

    Determinando o tipo de uma varivel

    A funo embutida type utilizada para descobrir o tipo de uma varivel. Exemplos:

    1 >>>a =12 >>>type(a)3 4 >>>b ="Python"5 >>>type(b)6 7 >>>c =[1,2,3]8 >>>type(c)

    5 Isso s vai funcionar no Windows se voc configurou o a varivel de ambiente PATH, conforme explicado no

    Apndice A.

    http://www.unicode.org/http://www.unicode.org/http://www.unicode.org/http://pt.wikipedia.org/wiki/Unicodehttp://pt.wikipedia.org/wiki/Unicodehttp://docs.python.org/howto/unicode.htmlhttp://docs.python.org/howto/unicode.htmlhttp://docs.python.org/howto/unicode.htmlhttp://docs.python.org/howto/unicode.htmlhttp://pt.wikipedia.org/wiki/Unicodehttp://www.unicode.org/
  • 5/28/2018 Apostila Python 2 0b

    34/117

    33

    9 10>>>d =(1,2,3)11>>>type(d)1213type(a)==type(b)14True

    15type(b)==int16True

    Determinando o tamanho de uma varivel

    A funo lenretorna o tamanho de uma varivel dependendo do seu tipo. Exemplos:

    1 >>>a ="Python"2 >>>len(a)3 6

    4 >>>b =[1,2,3]5 >>>len(b)6 37 >>>c ={"a":1,"b":2}8 >>>len(c)9 2

    Quando a funo lenrecebe uma string, retorna a quantidade de caracteres; quando

    recebe uma lista, tupla ou dicionrio, retorna a quantidade de elementos, e assim por diante.

    As funes lene typevistas anteriormente representam funes de reflexo ou introspeco

    e veremos mais delas no decorrer da apostila.

    Converses

    Python disponibiliza algumas funes para que possamos converter um valor de um

    tipo em outro. Exemplos:

    1 >>>a ="1"2 >>>b =int(a)3 >>>type(b)4

    5 >>>c =16 >>>d =float(c)7 >>>type(d)8 9 >>>e =[1,2,3]10>>>f =tuple(e)11>>>type(f)1213>>>g ="False"14>>>h =bool(g)15>>>type(h)16

  • 5/28/2018 Apostila Python 2 0b

    35/117

    34

    H obviamente algumas converses impossveis de realizar, como uma string "Python"

    em int, ou float, por exemplo. Quando uma converso resulta em um erro, uma exceo

    ValueError acionada.

    Alm dos tipos demonstrados anteriormente, Python dispe ainda de muitos outros,como as colees sete frozenset, no mostradas nessa apostila. Para mais informaes

    consulte a documentao oficial no endereohttp://docs.python.org/library/stdtypes.html.

    Avaliao de True e False

    Qualquer objeto em Python pode ser avaliado como Truee Falsepara uso em

    estruturas como o if, fore while, que veremos mais adiante ou como operandos de

    operadores lgicos, que sero vistos no prximo captulo.

    Todos os seguintes valores so avaliados como False:

    False None Zero ( 0 ) de quaisquer tipos numricos como, 0, 0L, 0.0e 0j. Qualquer sequncia vazia, como, '', (), []. Qualquer dicionrio vazio, como {}.Todos os valores no relacionados na listagem anterior so avaliados como True.

    http://docs.python.org/library/stdtypes.htmlhttp://docs.python.org/library/stdtypes.htmlhttp://docs.python.org/library/stdtypes.htmlhttp://docs.python.org/library/stdtypes.html
  • 5/28/2018 Apostila Python 2 0b

    36/117

    35

    Operadores

    Operadores Aritmticos

    H sete operadores aritmticos no Python:

    + Soma - Subtrao * Multiplicao / Diviso // Diviso truncada % Mdulo ** Exponenciao

    O interpretador interativo do Python tambm pode ser utilizado como uma

    calculadora, digitando os clculos e recebendo os valores. Exemplos:

    1 >>>2+2 # Imprime 42 >>>5/2 # Imprime 23 >>>10%5 # Imprime 04 >>>12.356/2 # Imprime 6.17799999999999995 >>>5*5 # Imprime 256 >>>2**3 # Imprime 8

    7 >>>52 # Imprime 3

    8 >>>12.356//2 # Imprime 6.0

    Explicando:

    Linha 1: Uma soma de 2 com 2; Linha 2: Uma diviso de 5 por 2 resultando em 2. Em Python, assim como em outras

    linguagens, o resultado de uma diviso entre dois inteiros ser sempre um inteiro,

    portanto, o resultado de 5 / 2 2 e no 2.5;

    Linha 3: O operador % (mdulo) utilizado para obter o resto da diviso de doisnmeros inteiros, no caso, a diviso de 10 por 5 resulta em 2 e o resto 0;

    Linha 4: A soluo para o problema da linha 2: dividir 12.356 (um nmero real), por 2um inteiro, resulta em outro nmero real;

    Linha 5: Uma multiplicao de 5 por 5; Linha 6: O operador ** (exponenciao) eleva o operando da esquerda potncia do

    operando da direita, portanto 2 elevado terceira potncia igual a 8;

    Linha 7: Subtrai 2 de 5; Linha 8: Divide o nmero, mas retorna somente parte inteira da diviso.

    A exponenciao pode ser feita tambm por meio da funo pow. Exemplo:

  • 5/28/2018 Apostila Python 2 0b

    37/117

    36

    1 >>>pow(2,3) # Imprime 82 >>>pow(5,2) # Imprime 25

    O mdulo mathda biblioteca-padro do Python implementa outras funes

    matemticas, para clculo de fatorial, seno, co-seno, logaritmo, raiz, etc.

    Alm dos operadores matemticos descritos acima, Python possui os operadores

    compostos de atribuio:

    += Soma e atribui -= Subtrai e atribui *= Multiplica e atribui /= Divide e atribui //= Divide e atribui somente a parte inteira do resultado %= Divide e atribui resto da diviso **= Eleva nmero e atribui

    Exemplos:

    1 >>>i =0 # Atribui 0 para i2 >>>i +=10 # Incrementa 10 em i. (i = 10)3 >>>i /=2 # Divide 10 por 2 e atribui para i. (i = 5)4 >>>i //2 # Divide 5 por 2 e atribui parte inteira para i. (i =2)5 >>>i +=8 # Incrementa i em 8. (i = 10)

    6 >>>i -=4 # Subtrai 4 de i e atribui resultado. (i = 6)7 >>>i **=2 # Eleva 6 ao quadrado e atribui para i. (i = 36)8 >>>i %=10 # Divide 36 por 10 e atribui resto para i. (i = 6)

    Os operadores acima so muito utilizados em laos de repetio, principalmente o de

    incremento / concatenao (+=) e decremento (-=). Sem eles, teramos que atribuir o resultado

    de uma operao com operadores simples. Abaixo seguem os mesmos exemplos, s que sem

    os operadores de atribuio:

    1 >>>i =02 >>>i =i +103 >>>i =i /24 >>>i =i //25 >>>i =i +86 >>>i =i -47 >>>i =i **28 >>>i =i %10

    Como vimos anteriormente, operadores de adio podem ser utilizados em strings. Os

    operadores de multiplicao tambm podem ser. Exemplos:

    1 a ="Python"2printa *2 # Imprime PythonPython

  • 5/28/2018 Apostila Python 2 0b

    38/117

    37

    Operadores de adio e multiplicao tambm podem ser utilizados em listas e tuplas.

    Exemplos:

    1 a =[-1,-2]

    2 b =[1,2,3]3printb *3 # Imprime [1, 2, 3, 1, 2, 3, 1, 2, 3]4printa +b # Imprime [-1, -2, 1, 2, 3]5 c =(1,2)6printc +(3,4) # Imprime (1, 2, 3, 4)

    Operadores lgicos

    Alm dos operadores matemticos, Python possui operadores lgicos, que retornam

    sempre um valor booleano, ou seja, Trueou False. Estes operadores so utilizados com

    frequncia nas estruturas de controle, e laos de repetio, que veremos mais adiante.

    Os operadores lgicos em Python so:

    > Maior < Menor >= Maior ou igual >>print1>2 # False2 >>>print2==3 # False3 >>>print5==5 # True4 >>>print10>1 # True

    5 >>>print2!=1 # True6 >>>print5>>print5>>print7>=3 # True

    O operador not utilizado para negar (inverter) o resultado de uma operao lgica,

    por exemplo:

    printnot5

  • 5/28/2018 Apostila Python 2 0b

    39/117

    38

    A expresso acima imprime o inverso do resultado de 5 < 3. Podemos ainda armazenar

    o resultado de uma expresso booleanaem uma varivel. Exemplos:

    1 idade =22

    2 maior_idade =idade >=183 senha,senha_digitada ="123","456"4 libera_entrada =senha_digitada ==senha5printlibera_entrada # Imprime False

    Identidade de objetos

    O operador ise is notso utilizados para comparar a igualdade de dois objetos. A

    diferena entre o operador ise o de igualdade ( ==) est justamente na diferena que,

    enquanto o operador ==compara os valores armazenados nos dois objetos, o operador is

    compara se as duas referncias apontam para a mesma referncia na memria, isto , se os

    dois objetos so iguais. O exemplo a seguir demonstra bem a diferena entre os operadores ==

    e is:

    1 >>>x =[1,2,3]2 >>>y =x3 >>>z =x[:]4 >>>x isy5 True6 >>>x

    7 [1,2,3]8 >>>y9 [1,2,3]10>>>z11[1,2,3]12>>>x isz13False14>>>x ==z15True

    No exemplo anterior, yaponta para a mesma referncia em memria que x, enquanto

    que zsomente possui o mesmo valor que x, no so o mesmo objeto. Ao comparmos xcom y

    atravs do operador is, este retorna True, assim como quando comparamos a varivel xcom

    yatravs do operador ==. Veremos mais sobre referncias de objetos no captulo de

    Paradigmas de Programao, em Programao Orientada a Objetos.

    Presena em Sequncias

    Para seqncias, como strings, listas e tuplas, existe o operador in, que verifica se um

    elemento est presente na seqncia e o not in, que retorna o inverso do operador in.

    Exemplos:

  • 5/28/2018 Apostila Python 2 0b

    40/117

    39

    1print"p"in"python" # True2print1in[1,2,3] # True3print"d"in("a","b","c") # False4print"d"notin("a","b","c") # True

  • 5/28/2018 Apostila Python 2 0b

    41/117

    40

    Estruturas

    Estrutura de deciso

    A funo de uma estrutura de deciso verificar o contedo de uma expresso lgica

    (ou booleana) e direcionar o fluxo do programa. Python possui uma estrutura de deciso, o if,

    que definida da seguinte forma:

    1 ifexpressao:2 expressao_13 expressao_24 else:5 expressao_36 expressao_4

    Se o resultado da expresso lgica for True, ento expressao_1e expressao_2

    so executadas, seno, expressao_3 e expressao_4so executadas. O elseno

    obrigatrio, porm, se um iffor declarado sem ele e se a expresso for avaliada como False,

    nada ser executado. Exemplo de um ifcom else:

    1 a =52 b =334 ifa >=b:

    5 print"a maior ou igual a b"6 else:7 print"a menor do que b"

    No exemplo anterior, se afor maior ou igual a b, ento a mensagem "a maior ou

    igual a b" impressa, caso contrrio, a mensagem "a menor do que b" impressa

    na tela.

    Python oferece um adicional estrutura if: o elif, que permite realizar outros testes

    caso a expresso avaliada pelo ifseja falsa. Exemplo:

    1 a =52 b =334 ifa >b:5 printu"a maior do que b"6 elifa ==b:7 printu"a igual a b"8 else:9 printu"a menor do que b"

    Pode-se inserir quantos elifs necessrios no if, contanto que o elseseja nico e o

    ltimo. Tal recurso adicional do ifse deve ao fato de Python no possuir a estrutura switch,

    comum s linguagens derivadas da linguagem C, como C++, Java, PHP e C#.

  • 5/28/2018 Apostila Python 2 0b

    42/117

    41

    Estruturas de repetio

    Estruturas ou laosde repetio so construes da linguagem que permitem repetir

    um bloco de cdigo um nmero determinado ou indeterminado de vezes. Python possui duas

    construes, uma adequada para cada caso.

    For

    O lao for adequado para o primeiro caso, quando se sabe quantas vezes ir repetir

    um bloco de cdigo. Exemplo:

    1 fori inrange(1,10):2 print"i =",i

    A funo rangechamada na definio do for, retorna uma lista contendo uma faixade valores, no caso, de 1 a 10. A varivel i utilizada para iterar na lista retornada por range,

    a cada iterao irecebe um valor, primeiro 1, depois 2, e assim por diante at o 10. A funo

    rangerecebe trs argumentoso primeiro o incio do intervalo, o segundo fim, e o

    terceiro o incremento. O incremento padro 1, bem como o incio, portanto, chamar

    range(10), range(1, 10)ou range(1, 10, 1)resulta a mesma lista. Veremos mais

    sobre argumentos padro ou defaultna parte de Funes, mais adiante na apostila.

    Qualquer objeto itervel pode ser utilizado em um for, como uma string, lista ou

    tupla. Veremos mais sobre iteradores no final da apostila, em Programao Funcional.

    Exemplo:

    1 fors in"Python":2 prints

    No exemplo anterior os caracteres da string "Python"so impressos um por linha

    com a funo print.

    WhileO lao while utilizado quando no sabemos exatamente qual o nmero de

    repeties ser realizada. Exemplos:

    1 i =02whilei

  • 5/28/2018 Apostila Python 2 0b

    43/117

    42

    Linha 4: Incrementa o valor de iem 1;Aps a linha 4 ser executada o foco (cursor) volta para o while(linha 1), que testa i

    sucessivamente at que o valor no seja menor do que 10. Repare que o whiletesta uma

    expresso lgica, vista anteriormente na apostila. Caso esta expresso retorne sempre True, owhileser repetido infinitamente, gerando um loopinfinito.

    Controle de laos

    Algumas vezes voc vai enfrentar uma situao em que precisa sair de um lao

    completamente quando uma condio externa acionada ou quando quer pular uma parte

    do lao e iterar novamente. Python fornece dois comandos para essas situaes, o breake o

    continue.

    Break

    Pode ser utilizado tanto em um lao forquanto while. O comando break, assim

    como na linguagem C e derivadas, quebra um lao. Exemplo:

    1 i =02whilei

  • 5/28/2018 Apostila Python 2 0b

    44/117

    43

    1 defteste(*args):2 pass # Lembrar de implementar isso depois!!!34 classClasseVazia:5 pass

    67whileTrue:8 pass # Aguarda interrupo por teclado (Ctrl+C)

    O exemplo da funo testemostra que o passpode ser utilizado como umplace-

    holder, quando se est trabalhando em um novo cdigo, permitindo assim continuar pensando

    em um nvel mais abstrato e implementar a funo depois.

    O segundo exemplo demonstra a definio de uma classe vazia. Classes sero

    explicadas no final da apostila, em Programao Orientada a Objetos

    O terceiro exemplo um whileinfinito que executado at que o programa seja

    interrompido por um Ctrl + C.

  • 5/28/2018 Apostila Python 2 0b

    45/117

    44

    Funes

    O que so?

    Funes so blocos de cdigo identificados por um nome, que podem receber valores

    pr-definidos, chamados de argumentos e retornar valores. As funes no Python so

    definidas na forma:

    1 deffuncao():2 expressao_13 expressao_24 returnvalor

    O nome da funo deve seguir as normas de identificadores vlidos explicados

    anteriormente na apostila. Funes podem retornar um valor e este deve ser especificado na

    clusula return, como na linha 4 do exemplo anterior. Exemplo de uma funo:

    1 defimprime_valores():2 lista =[0,1,2,3]3 fori inlista:4 printi

    Repare que a funo anterior no retorna um valor, ela somente imprime todos os

    nmeros da lista. Se voc j teve contato com linguagens de programao como C, C++, C# e

    Java, deve ter percebido que no foi preciso declarar a funo como voidpara especificar que

    ela no retorna um valor. Exemplo de funo que retorna um valor:

    1 defsoma():2 lista =[0,1,2,3]3 soma =04 fornum inlista:5 soma +=num6 returnsoma78print"Soma =",soma()

    No exemplo acima, criamos uma funo chamada soma. Nela, definimos uma lista

    contendo quatro nmeros inteiros, que so somados e o total retornado pela funo.

    Parmetros e argumentos

    Para permitir a entrada de valores na funo, chamados de argumentos, podemos

    declarar parmetros, que so variveis de entrada de uma funo. Abaixo redefinimos a

    funo criada anteriormente, incluindo o parmetro lista:

    1 defsoma(lista):

  • 5/28/2018 Apostila Python 2 0b

    46/117

    45

    2 soma =03 fornum inlista:4 soma +=num5 returnsoma67print"Soma =",soma([0,1,2,3])

    A funo acima retorna a soma de todos os elementos de uma lista, agora, passada por

    argumento na linha 7.

    Ateno

    comum os estudantes iniciantes de programao acharem que os termos

    parmetro e argumento designam a mesma coisa, porm so termos distintos. Parmetro

    a varivel que voc define na assinatura da funo, entre parnteses. Argumento o valor que

    voc passa para um parmetro. No possvel passar um argumento para uma funo que no

    tem um parmetro definido.

    Parmetros com argumentos default

    Muitas vezes necessrio criar uma funo quase idntica a outra, a nica diferena

    que uma recebe argumentos e a outra no. A funo abaixo, por exemplo, retorna um

    intervalo de nmeros, dados o incio, fim e o incremento:

    1 defintervalo(inicio,fim,incremento):2 retorno =[]3 i =inicio4 whilei

  • 5/28/2018 Apostila Python 2 0b

    47/117

    46

    7 returnretorno89printintervalo(10) # Imprime [1, 2, 3, 4, 5, 6, 7, 8, 9,10]10printintervalo(10,1,2) # Imprime [1, 3, 5, 7, 9]

    No exemplo acima definimos a funo intervalo, especificando o valor 1 para os

    parmetros inicioe incremento. Note que o parmetro fim o primeiro da lista, isto

    porque no podemos definir um parmetro no-opcional depois de um opcional, assim, estes

    devem ser os ltimos da lista.

    O Python possibilita tambm passar argumentos para as funes por palavra-chave

    (keyword). Exemplos utilizando a funo intervalodefinida anteriormente:

    1printintervalo(inicio=1,f