guia introdutório para programação em python

51
Bem Vindo Este tutorial é uma tradução do original disponível em www.learnpython.org/en/Welcome . Neste site você, além de aprender a programar usando a linguagem Python de forma interativa sem precisar realizar nenhuma instalação em sua máquina, poderá treinar a leitura e compreensão de textos em inglês, portanto eu recomendo fortemente que você use o site. Mas se você precisa de uma ajudinha para começar, eu traduzi os itens básicos do tutorial que são apresentados a seguir, e complementei com alguns exercícios do site Learn Python The Hard Way (http://learnpythonthehardway.org/book/ ). Se puder, faça este tutorial inteiro. É muito importante que você treine os exercícios para realmente aprender a programar. Não existe programação de computadores teórica! Ou você escreve seus códigos e os testa em uma máquina ou nunca vai saber se realmente funcionam. Programar computadores é um exercício de comunicação e expressão, mas com um receptor (computador) que não tem a mínima capacidade de “entender o que você quis dizer”. Para computadores, “meias palavras NÃO bastam”, e “um pingo NUNCA será um i”! É muito comum cometermos erros de ortografia e sintaxe quando escrevendo comandos em linguagens de programação, e só se percebe estes erros quando se submete o código à execução pela máquina. Portanto, não há como fugir: instale o Python e um bom editor de textos para programação (Sublime, Notepad++, Crimson, etc - que te ajudarão com as particularidades da linguagem) para realizar seus exercícios. Caso queira, você pode usar o Bloco de Notas ou qualquer editor de textos simples (não use editores de textos mais sofisticados pois eles inserem caracteres especiais de formatação no texto, que não são entendidos pelo interpretador do Python). Baixar e instalar o Python é fácil (tem aqui: https://www.python.org/downloads/ ). Sugiro usar a versão 2.7.6 por questões de compatibilidade com o tutorial original. Depois que você dominar os fundamentos da programação Python, vá para a versão 3.4.0. Depois da instalação, você só vai precisar configurar a variável de ambiente PATH do seu Windows para que o sistema operacional encontre o interpretador da linguagem na pasta onde ele foi instalado. Existem inúmeros tutoriais na internet que podem te ajudar nisso. Dê uma procurada lá no Dr. Google. É importante que você faça esta configuração para que possa organizar seus estudos, criando os arquivos de teste em uma pasta própria do tutorial. Crie já uma pasta, em local de fácil acesso no disco do seu micro, para usar neste estudo. Eu sugiro que você crie uma pasta “IPBD” dentro da pasta Python27 criada na instalação do Python. Deve facilitar significativamente sua vida... Se quiser ser um bom programador, comece desde já a organizar suas coisas. Crie Prof. Ms. Carlos E F ROLAND ([email protected] ) 2014 Centro Universitário de Franca UNI-Facef Engenharia Civil – Introdução à Programação e Uso de Bancos de Dados

Upload: ceroland

Post on 08-Apr-2016

76 views

Category:

Documents


31 download

DESCRIPTION

Conheça os fundamentos da programação em Python

TRANSCRIPT

Page 1: Guia Introdutório para programação em Python

Bem Vindo

Este tutorial é uma tradução do original disponível emwww.learnpython.org/en/Welcome. Neste site você, além de aprender a programarusando a linguagem Python de forma interativa sem precisar realizar nenhuma instalaçãoem sua máquina, poderá treinar a leitura e compreensão de textos em inglês, portanto eurecomendo fortemente que você use o site.

Mas se você precisa de uma ajudinha para começar, eu traduzi os itens básicos dotutorial que são apresentados a seguir, e complementei com alguns exercícios do siteLearn Python The Hard Way (http://learnpythonthehardway.org/book/). Se puder, faça estetutorial inteiro.

É muito importante que você treine os exercícios para realmente aprender aprogramar. Não existe programação de computadores teórica! Ou você escreve seuscódigos e os testa em uma máquina ou nunca vai saber se realmente funcionam.Programar computadores é um exercício de comunicação e expressão, mas com umreceptor (computador) que não tem a mínima capacidade de “entender o que você quisdizer”. Para computadores, “meias palavras NÃO bastam”, e “um pingo NUNCA será umi”!

É muito comum cometermos erros de ortografia e sintaxe quando escrevendocomandos em linguagens de programação, e só se percebe estes erros quando sesubmete o código à execução pela máquina. Portanto, não há como fugir: instale o Pythone um bom editor de textos para programação (Sublime, Notepad++, Crimson, etc - que teajudarão com as particularidades da linguagem) para realizar seus exercícios. Casoqueira, você pode usar o Bloco de Notas ou qualquer editor de textos simples (não useeditores de textos mais sofisticados pois eles inserem caracteres especiais de formataçãono texto, que não são entendidos pelo interpretador do Python).

Baixar e instalar o Python é fácil (tem aqui: https://www.python.org/downloads/).Sugiro usar a versão 2.7.6 por questões de compatibilidade com o tutorial original. Depoisque você dominar os fundamentos da programação Python, vá para a versão 3.4.0.

Depois da instalação, você só vai precisar configurar a variável de ambiente PATHdo seu Windows para que o sistema operacional encontre o interpretador da linguagemna pasta onde ele foi instalado. Existem inúmeros tutoriais na internet que podem teajudar nisso. Dê uma procurada lá no Dr. Google.

É importante que você faça esta configuração para que possa organizar seusestudos, criando os arquivos de teste em uma pasta própria do tutorial. Crie já uma pasta,em local de fácil acesso no disco do seu micro, para usar neste estudo. Eu sugiro quevocê crie uma pasta “IPBD” dentro da pasta Python27 criada na instalação do Python.Deve facilitar significativamente sua vida...

Se quiser ser um bom programador, comece desde já a organizar suas coisas. Crie

Prof. Ms. Carlos E F ROLAND ([email protected])2014

Centro Universitário de Franca UNI-FacefEngenharia Civil – Introdução à Programação e Uso de Bancos de Dados

Page 2: Guia Introdutório para programação em Python

pastas em lugares de fácil acesso, faça SEMPRE backup de seus arquivos (mais deum!!!!), e documente tudo o que faz, tanto os locais onde guarda seus trabalhos, quanto ocódigo que escreve (veremos isso durante o tutorial).

Muito bem, dadas as dicas iniciais, este tutorial é dirigido a qualquer um que queiraaprender a linguagem de programação Python. O site original oferece um grupo noFacebook que você pode se juntar a outros programadores para esclarecer dúvidas,realizar discussões sobre os exercícios e se atualizar. Atualmente, desenvolver software éuma atividade colaborativa onde quem participa desenvolve o princípio do ganha-ganha.

A seguir você pode conferir a lista de itens que são tratados no site. Neste tutorialfarei a tradução dos Fundamentos da linguagem e te convido a continuar com os temasavançados lá no site em inglês. Olha só com sou camarada: além de te dar umamãozinha no começo, te incentivo a ganhar um bônus treinando também o seu inglês.Lembre-se: inglês para profissionais de Sistemas de Informação não é mais diferencial, écommodity, ou você sabe ou você sabe!

Tópicos tratados - Aprenda os Fundamentos

. Alô, Mundo!

. Variáveis e Tipos

. Listas

. Operadores Básicos

. Formatação de Cadeias

. Operações Básicas com Cadeias

. Condições

. Laços

. Funções

. Classes e Objetos

. Dicionários

. Módulos e Pacotes

Mãos à obra: para você testar as diretivas e comandos Python apresentados aseguir, execute o Prompt de Comando do Windows de mude para a pasta criada paraseus estudos. Caso ainda não saiba como fazer essas operações no sistema, vá ao Dr.Google! A essa altura do campeonato você já percebeu que para ser um programador,muita coisa você terá que buscar... Faça este exercício! Use intensamente a pesquisa noDr. Google para, inclusive, melhorar sua performance de procura de solução paraproblemas. No site How To Think Like a Computer Scientist(http://interactivepython.org/runestone/static/thinkcspy/toc.html) é dito que:

“A habilidade mais importante para um cientista da computação é a solução deproblemas. Resolver problemas significa se desenvolver a habilidade de formularproblemas, pensar criativamente sobre possíveis soluções, e expressar a solução clara eprecisamente. Com se vê, o processo de aprender a programar é uma excelenteoportunidade para praticar as habilidades de resolver problemas.”

Prof. Ms. Carlos E F ROLAND ([email protected])2014

Centro Universitário de Franca UNI-FacefEngenharia Civil – Introdução à Programação e Uso de Bancos de Dados

Page 3: Guia Introdutório para programação em Python

(vá lá dar uma olhada também... é outra fonte incrível de conteúdo para se aprender aprogramar com Python).

. Alô, Mundo

Python é uma linguagem muito simples, e tem uma sintaxe muito direta. Elaencoraja programadores a programar sem o uso de códigos pré-criados. A diretiva(comando) mais simples do Python é “print” - ela simplesmente escreve uma linha nodispositivo de saída (console de comandos do sistema operacional, por exemplo) e jáinclui uma mudança de linha (diferente de outras linguagens como C).

Obs: manterei os exercícios em inglês pois esta é uma Boa Prática indicada paraprogramação de computadores. Para executar o interpretador Python na console executeo comando “python”. Por exemplo:

C:\sua_pasta>python

serão mostradas informações relativas ao interpretador e o prompt de comandos Python“>>>”.

Na versão adotada aqui (versão 2.7.6) o comando “print” não é uma função, comona versão 3.4.0 e para usá-lo, simplesmente escreva, na console:

>>> print “This line will be printed.”

ao teclar <ENTER>, a resposta ao comando será mostrada na linha seguinte na console.

Exercícios 1

Use o comando “print” para escrever as linhas:

Alô, Mundo!Hello, World!Alô de Novo.Hello AgainEu gosto de digitar isso.I like typing this.Isso é legal.This is fun.Ôpa!!!! Escrevendo na console.Yay! Printing.

Obs: para sair do interpretador digite “exit()” e tecle <ENTER>.

Indentação

Prof. Ms. Carlos E F ROLAND ([email protected])2014

Centro Universitário de Franca UNI-FacefEngenharia Civil – Introdução à Programação e Uso de Bancos de Dados

Page 4: Guia Introdutório para programação em Python

Python usa a indentação para definir blocos de código, em vez de outros elementos(chaves “{ }” como Java ou C). Ambos, tabulação e espaços são aceitos, mas aindentação padrão requer que o código padrão Python use 4 (quatro) espaços. Porexemplo:

x = 1if x == 1: # indented four spaces print “ x is 1.”

Obs: no ambiente trabalhado anteriormente (mikroBasic), não havia necessidade de seusar indentação, mas em Python ela é obrigatória. Se não usar, muita coisa não vaifuncionar!!! CUIDADO... Preste atenção!

Variáveis e Tipos

Python é completamente orientada a objetos, e não “estaticamente tipada” (dê umabuscada no Dr. Google sobre isso). Você não precisa declarar variáveis antes de usá-las,ou declarar seus tipos (como em outras linguagens). Toda variável em Python é umobjeto.

Este tutorial tratará de alguns tipos básicos de variáveis.

Números

Python suporta dois tipos de números – inteiros e números de ponto flutuante(números reais). (Ela também suporta números complexos, que não serão explicadosaqui).

Para definir um inteiro, use a seguinte sintaxe:

>>>myint = 7

Para definir um número de ponto flutuante, você pode usar uma das seguintes notações:

>>>myfloat = 7.0

>>>myfloat = float(7)

Cadeias (Strings)

Cadeias de caracteres (strings) são definidas tanto com aspas simples, quanto com aspasduplas:

>>>mystring = 'Hello'

Prof. Ms. Carlos E F ROLAND ([email protected])2014

Centro Universitário de Franca UNI-FacefEngenharia Civil – Introdução à Programação e Uso de Bancos de Dados

Page 5: Guia Introdutório para programação em Python

>>>mystring = “Hello”

A diferença entre as duas é que usando aspas duplas torna fácil a inclusão deapóstrofos (enquanto este iria fechar a cadeia se tivesse sido usada aspa simples paraabrir). Veja o exemplo (em inglês porque não temos o uso em português):

>>>mystring = “Don't worry about apostrophes”

>>>mystring = “I'd much rather you 'not'.”

>>>mystring = 'I “said” do not touch this.'

Existem variações adicionais para a definição de cadeias que tornam mais fácil ainclusão de coisas como mudanças de linhas (return), barras contrárias (\) e caracteresUnicode (procure mais sobre estes termos...). Estes recursos estão fora do escopo destetutorial, mas são cobertos na Documentação do Python (aqui:http://www.python.org.br/wiki/DocumentacaoPython).

Operadores simples podem ser executados sobre números e cadeias:

>>>one = 1>>>two = 2>>>three = one + two

>>>hello = “hello”>>>world = “world”>>>helloword = hello + “ “ + word

Atribuições podem ser feitos a mais de uma variável “simultaneamente” numamesma linha como:

>>>a, b = 3, 4

Misturar operadores numéricos e cadeias não é suportado:

# This will not work!

>>>print one + two + hello

Obs: note no exemplo acima que o texto “This will not work!” foi precedido do carácter “#”.Ele é usado para inserir comentários dentro do bloco de comandos. Sempre que ointerpretador encontra este carácter, tudo que for digitado após ele (até o final da linha)será desconsiderado como código.

Prof. Ms. Carlos E F ROLAND ([email protected])2014

Centro Universitário de Franca UNI-FacefEngenharia Civil – Introdução à Programação e Uso de Bancos de Dados

Page 6: Guia Introdutório para programação em Python

Exercícios 2

O objetivo deste exercício é criar uma string, um inteiro, e um número real (float). Astring deve ser chamada mystring e deve conter a palavra “hello”. O número real deve serchamado de myfloat e deve conter o valor 10, e o inteiro deve ser chamado myint e deveconter o valor 20.

Obs: a partir deste ponto no tutorial, insira o código dos exercícios em arquivos (usando oeditor que você escolheu) e salve na sua pasta de estudos com a extensão “.py”, porexemplo: exerc2.py. Então execute o script (outro nome muito usado para designar umconjunto de comandos) com o comando “python <nome_do_script.py>”. Assim:

C:\sua_pasta>python exerc2.py

Indo além... crie as seguintes variáveis:

>>>cars = 100>>>space_in_a_car = 4.0>>>drivers = 30>>>passengers = 90>>>cars_not_driven = cars – drivers>>>cars_driven = drivers>>>carpool_capacity = cars_driven * space_in_a_car>>>average_passengers_per_car = passengers / cars_driven

E imprima as seguintes linhas:

“Existem“, cars, “carros disponíveis.”“Existem somente”, drivers, “motoristas disponiveis.”“Existirão”, cars_not_driven, “carros vazios hoje.”“Podemos transportar”, carpool_capacity, “pessoas hoje.”“Temos”, passengers, “para transportar hoje.”“Precisamos colocar”, average_passengers_per_car, “em cada carro.”

Procure entender o que foi feito... estude cada variável, as operações que foramrealizadas e como foram apresentados os resultados do processamento.

Listas

Listas são muito parecidas com vetores. Eles podem conter qualquer tipo devariáveis, e eles podem conter tantas variáveis quantas você quiser. Listas tambémpodem ser percorridas de uma maneira muito simples. Segue um exemplo de como secriar uma lista.

Prof. Ms. Carlos E F ROLAND ([email protected])2014

Centro Universitário de Franca UNI-FacefEngenharia Civil – Introdução à Programação e Uso de Bancos de Dados

Page 7: Guia Introdutório para programação em Python

>>>mylist = []>>>mylist.append(1)>>>mylist.append(2)>>>mylist.append(3)

>>>print mylist[0]>>>print mylist[1]>>>print mylist[2]

>>>for x in mylist:. . . print x

Obs: é necessário começar a linha abaixo do “for” com 4 espaços.

Procure entender e explicar o que foi feito no exemplo.

Acessar um índice que não existe, gera uma exceção (um erro) na interpretação.Verifique:

>>>mylist = [1,2,3]>>>print mylist[10]

Exercícios 3

Neste exercício, você terá que inserir números e cadeias às cadeias corretasusando o método de listas “append”. Você deve inserir os números 1, 2, e 3 a uma lista“numérica”, e as palavras 'hello' e 'world' a lista de strings.

Você também terá que criar uma lista de nomes (names), inserir alguns nomes nalista, e preencher a variável second_name com o segundo nome da lista names usando ooperador colchetes “[ ]”. Note que o índice de listas é base-zero (0,1,2,3,4,...), então sevocê quiser acessar o segundo item da lista, o índice é 1.

Indo além... teste o seguinte código:

>>>the_count = [1, 2, 3, 4, 5]>>>fruits = ['apples', 'oranges', 'pears', 'apricots']

>>># para percorrer uma lista pode-se usar for-loop>>>for number in the the-count:. . . print “Este é o valor %d” % number

>>>for fruit in fruits:. . . print “Uma fruta do tipo: %s” % fruit

>>># pode-se criar listas, primeiro criando uma lista vazia

Prof. Ms. Carlos E F ROLAND ([email protected])2014

Centro Universitário de Franca UNI-FacefEngenharia Civil – Introdução à Programação e Uso de Bancos de Dados

Page 8: Guia Introdutório para programação em Python

>>>elements = []

>>># então usar a função “range” para inserir os números de 0 a 5>>>for i in range(0, 6):. . . print “Adicionando %d a lista.” % i. . . elements.append(i)

>>># agora se pode imprimir os conteúdos>>>for i in elements:. . . print “Elemento: %d” % i

Obs: os operadores % serão tratados mais a frente, em Formatação de Cadeias.

Operadores Básicos

Esta sessão explica como usar operadores básicos em Python.

Operadores Aritméticos

Como qualquer outra linguagem de programação operadores de adição, subtração,multiplicação, e divisão podem ser usados com números.

>>>number = 1 + 2 * 3 / 4.0

Tente predizer qual será o resultado da operação. O Python segue a ordem dosoperadores?

Outro operador disponível é o módulo (%), que retorna o resto da divisão inteira dodividendo pelo divisor (dividendo % divisor = resto).

>>>reminder = 11 % 3

Usar dois símbolos de multiplicação (*) realiza a operação de potência.

>>>squared = 7 ** 2>>>cubed = 2 ** 3

A ordem de precedência das operações aritméticas é:

1. Exponenciação ou potenciação (**)2. Multiplicação (*), divisão (/) e módulo (%)3. Adição (+) e subtração (-)

Usando Operadores com Cadeias (Strings)

Prof. Ms. Carlos E F ROLAND ([email protected])2014

Centro Universitário de Franca UNI-FacefEngenharia Civil – Introdução à Programação e Uso de Bancos de Dados

Page 9: Guia Introdutório para programação em Python

Python suporta a concatenação de cadeias usando o operador de adição:

>>>helloword = 'hello' + ' ' + 'world'

Python também suporta a multiplicação de cadeias para formar uma cadeia comuma sequencia repetida:

>>>lotsofhellos = 'hello' * 10

Usando Operadores com Listas

Listas podem ser unidas com operadores de adição:

>>>even_numbers = [2,4,6,8]>>>odd_numbers = [1,3,5,7]>>>all_numbers = odd_numbers + even_numbers

Da mesma forma que com cadeias, Python suporta a formação de novas listas comuma sequência repetida, usando o operador de multiplicação:

>>>print [1,2,3] * 3

Exercícios 4

O objetivo deste exercício é criar duas listas chamadas x_list e y_list, que contém10 instâncias das variáveis x e y, respectivamente. É pedido também que você crie umalista chamada big_list, que contém as variáveis x e y, 10 vezes cada, pela concatenaçãodas duas listas criadas.

Indo além... teste o seguinte código:

>>>print “Vou contar minhas galinhas:”>>>print “Galinhas”, 25 + 30 / 6>>>print “Galos”, 100 – 25 * 3 % 4>>>print “Agora vou contar os ovos:”>>>print 3 + 2 + 1 – 5 + 4 % 2 – 1 / 4 + 6

Indo além... usando lápis e papel, calcule o resultado da expressão abaixo. Emseguida, execute a mesma expressão no interpretador Python. O resultado foi o mesmo?Explique porque.

10 % 3 * 10 ** 2 + 1 – 10 * 4 / 2

Formatando Cadeias

Prof. Ms. Carlos E F ROLAND ([email protected])2014

Centro Universitário de Franca UNI-FacefEngenharia Civil – Introdução à Programação e Uso de Bancos de Dados

Page 10: Guia Introdutório para programação em Python

Python usa a formatação de cadeias padrão-C para criar novas cadeiasformatadas. O operador “%” é usado para formatar um conjunto de variáveis contidas emuma “tupla” (uma lista de tamanho fixo), junto com uma cadeia de formatação, quecontém texto normal junto com “especificadores de argumentos”, símbolos especiaiscomo “%s” e “%d”.

Digamos que você tenha uma variável chamada “name” com seu nome de usuárionela, e você gostaria de imprimir uma mensagem de boas vindas àquele usuário.

>>># Este código irá imprimir “Hello, John!”>>>name = “John”>>>print “Hello, %s!” % name

Para usar dois ou mais especificadores de argumento, use uma tupla (entreparênteses):

>>># Este exemplo imprime “John is 23 years old.”>>>name = “John”>>>age = 23>>>print “%s is %d years old.” % (name, age)

Qualquer objeto que não seja uma cadeia pode ser formatado usando o operador%s. A cadeia que retorna do método “repr” daquele objeto é formatada como a cadeia.Por exemplo:

>>># Este exemplo imprime: A List: [1, 2, 3]>>>mylist = [1,2,3]>>>print “A list: %s” % mylist

Seguem mais alguns especificadores de argumento que você deve conhecer:

%s – String (ou qualquer objeto com uma representação de cadeia, como números)

%d – Inteiros

%f – Números de ponto flutuante (reais)

%.<number of digits> - Números de ponto flutuante com uma quantidade fixa dedígitos após o ponto decimal

%x/%X – Inteiros com representação hexadecimal (minúsculas/maiúsculas)

Exercícios 5

Você precisará escrever uma cadeia formatada que imprima os dados com aseguinte sintaxe: Hello John Doe. Your current balance is 53.44$

Prof. Ms. Carlos E F ROLAND ([email protected])2014

Centro Universitário de Franca UNI-FacefEngenharia Civil – Introdução à Programação e Uso de Bancos de Dados

Page 11: Guia Introdutório para programação em Python

Indo além... escreva os comandos para se calcular o aumento (percentual) do seusalário ou mesada. Crie as variáveis necessárias (salario e aumento) atribua valores aelas e em seguida imprima o resultado com a seguinte sintaxe:

Seu novo salario/mesada é R$ 9999.99 Calculado com base no salario original de R$ 9999.99 Com o aumento de 99.9 %

Operações Básicas com Cadeias (Strings)

Cadeias (strings) são bits de texto. Elas podem se definidas como qualquer coisaentre aspas:

>>>astring = “Hello world!”

Obs: daqui em diante, irei usar neste tutorial o termo string para designar cadeia, paraque você se habitue mais facilmente com as funções de manipulação de stringsexistentes no Python.

Como você pode ver, a primeira coisa que você aprendeu foi imprimir umasentença simples. Esta sentença foi armazenada pelo Python como uma string.Entretanto, em vez de imprimir strings imediatamente, exploraremos as várias coisas quese pode fazer com elas.

>>>print len(astring)

Este comando resultou na apresentação de 12, porque “Hello world!” é uma stringque contém 12 caracteres, incluindo espaços e pontuação.

>>>print astring.index(“o”)

O resultado neste caso é 4, porque a localização da primeira ocorrência da letra “o”está na posição 4 a partir do primeiro carácter. Perceba que existem dois “o” na frase –este método (.index()) reconhece a primeira ocorrência.

Mas porque não foi mostrado o valor 5? O primeiro “o” não é o quinto carácter dastring? Para tornar isso mais simples, Python (e a maioria das outras linguagens deprogramação) iniciam as coisas em 0 (zero) em vez de em 1. Então o índice do primeiro“o” da string é 4.

>>>print astring.count(“l”)

Para os desavisados, aquela é a letra L minúscula, não o número 1... Este método

Prof. Ms. Carlos E F ROLAND ([email protected])2014

Centro Universitário de Franca UNI-FacefEngenharia Civil – Introdução à Programação e Uso de Bancos de Dados

Page 12: Guia Introdutório para programação em Python

(.count()) conta o número de “l” na string. Assim o resultado impresso é 3.

>>>print astring[3:7]

Este comando imprime uma faixa da string, iniciando no índice 3 e terminando noíndice 6. Mas porque índice 6 e não 7? Novamente, a maioria das linguagens deprogramação fazem isso – tornando a realização de cálculos matemáticos dentro doscolchetes mais fácil (quero ver 4 carácteres a partir da posição 3).

Se você tiver só um número dentro dos colchetes, obterá o carácter (único) queocupa a posição do índice. Se tirar o primeiro número mantendo os “:” e o segundonúmero, receberá como resultado uma faixa começando no primeiro carácter com aquantidade de carácteres do número que segue o “:”. Se você tirar o segundo número,receberá uma faixa iniciando na posição definida pelo número antes do “:” e terminandono final da string.

Você pode até usar números negativos dentro dos colchetes. Eles facilitampercorrer a string de trás para frente. Assim, -3 significa “o terceiro carácter a partir doúltimo”.

>>>print astring.upper()>>>print astring.lower()

Estes métodos criam uma nova string com todas as letras convertidas para caixaalta (maúsculas - .upper()) ou caixa baixa (minúsculas - .lower()), respectivamente.

>>>print astring.startswith(“Hello”)>>>print astring.endswith(“asdfasdfasdf”)

Estes métodos são usados para determinar se uma string inicia (.startswith()) comalguma coisa ou termina (.endswith()) com alguma coisa, respectivamente. O primeiroexemplo resulta “True” (verdade), porque a string começa com “Hello”. O segundo resulta“False” (falso) porque a string não termina com aquelas letras.

>>>afewwords = astrng.split(“ “)

Este método (.split()) quebra a string em uma porção de strings agrupadas em umalista. Como no exemplo foi especificado o espaço (“ “) como referência para a quebra, oprimeiro item da lista será “Hello”, e o segundo será “world!”.

Exercícios 6

Corrija o código abaixo para obter a informação correta, mudando a string.

s = "Hey there! what should this string be?"

Prof. Ms. Carlos E F ROLAND ([email protected])2014

Centro Universitário de Franca UNI-FacefEngenharia Civil – Introdução à Programação e Uso de Bancos de Dados

Page 13: Guia Introdutório para programação em Python

# Length should be 20print "Length of s = %d" % len(s)

# First occurrence of "a" should be at index 8print "The first occurrence of the letter a = %d" % s.index("a")

# Number of a's should be 2print "a occurs %d times" % s.count("a")

# Slicing the string into bitsprint "The first five characters are '%s'" % s[:5] # Start to 5print "The next five characters are '%s'" % s[5:10] # 5 to 10print "The twelfth character is '%s'" % s[12] # Just number 12

print "The last five characters are '%s'" % s[-5:] # 5th-from-last to end

# Convert everything to uppercaseprint "String in uppercase: %s" % s.upper()

# Convert everything to lowercaseprint "String in lowercase: %s" % s.lower()

# Check how a string startsif s.startswith("Str"): print "String starts with 'Str'. Good!"

# Check how a string endsif s.endswith("ome!"): print "String ends with 'ome!'. Good!"

# Split the string into three separate strings,# each containing only a wordprint "Split the words of the string: %s" % s.split(" ")

Obs: a string para execução correta deve ser: s = "Strings are awesome!"

Indo além na teoria

Agora é a hora de você começar a aprender lógica. Até este ponto você estudou oscomandos mais básicos do Python, bem como algumas operações aritméticas. Você nãoaprenderá as teorias complexas que os acadêmicos adoram estudar mas apenas a lógicabásica simples que faz com que programas reais funcionem, e que programadores reaisprecisam todos os dias.

Aprender lógica tem que vir depois de você fazer algumas memorizações. Façaestes exercícios por uma semana inteira. Não vacile. Mesmo que você esteja com a

Prof. Ms. Carlos E F ROLAND ([email protected])2014

Centro Universitário de Franca UNI-FacefEngenharia Civil – Introdução à Programação e Uso de Bancos de Dados

Page 14: Guia Introdutório para programação em Python

cabeça cheia, continue o exercício. Ele apresenta um conjunto de tabelas lógicas quevocê deve memorizar para tornar a realização dos exercícios seguintes mais fácil. É bomavisar que não vai ser muito divertido de início. Vai chegar a ser sacal e entediante mas épara que você aprenda uma habilidade muito importante como programador. Você teráque ser capaz de memorizar conceitos importantes na sua vida. A maioria destesconceitos serão excitantes a medida que você os domina. Você vai travar uma batalhacontra eles e então de repente você irá entendê-los. Todo o trabalho de memorização dobásico, você verá, vai ter valido a pena.

Te dou uma dica de como memorizar algo sem ficar maluco: estude por umpequeno intervalo de tempo, várias vezes ao dia e anote suas dificuldades. Não tenteestudar por duas horas memorizando estas tabelas. Isso não funciona! Seu cérebro iráreter somente o que você estudou por 15 ou 30 minutos. Assim, o que você deve fazer épegar papel de rascunho e escrever as colunas da esquerda de cada tabela em um ladoda folha e as colunas da direita no verso. Você deve então ser capaz de, vendo ascombinações de “True” ou “False” da frente, imediatamente dizer quais são “True”!Pratique até que tenha destreza.

Assim que conseguir isso, comece a escrever suas próprias tabelas verdade em um editorde textos. Não as copie. Tente escrevê-las de memória, e quando você estiver seguro dêuma rápida olhada nas que estão aqui para refrescar sua memória. Fazendo isso vocêtreinará seu cérebro a se lembrar da tabela completa.

Os Termos Verdade

Em Python existem os seguintes termos (caracteres e frases) para determinar sealguma coisa é “True” ou “False”. Lógica em computadores tem tudo a ver com descobrorse alguma combinação destes caracteres e algumas variáveis é “True” em alguma parteem um programa.

. and

. or

. not

. != (not equal)

. == (equal)

. >= (greater-than-equal)

. <= (less-than-equal)

. True

. False

As Tabelas Verdade

Estes caracteres serão usados para fazer as tabelas verdade que você precisamemorizar:

Prof. Ms. Carlos E F ROLAND ([email protected])2014

Centro Universitário de Franca UNI-FacefEngenharia Civil – Introdução à Programação e Uso de Bancos de Dados

Page 15: Guia Introdutório para programação em Python

NOT True?

Not False True

Not True False

OR True?

True or False True

True or True True

False or True True

False or False False

AND True?

True and False False

True and True True

False and True False

False and False False

NOT OR True?

Not (True or False) False

Not (True or True) False

Not (False or True) False

Not (False or False) True

NOT AND True?

Not (True and False) True

Not (True and True) False

Not (False and True) True

Not (False and False) True

!= True?

1 != 0 True

1 != 1 False

0 != 1 True

0 != 0 False

== True?

1 == 0 False

1 == 1 True

0 == 1 False

0 == 0 True

Pronto, você tem as tabelas. Escreva em rascunho várias vezes para memorizá-las. Lembre-se, só depende de você. Estude tudo o que puder cada dia, e um pouco amais...

Praticando Lógica

As combinações lógicas vistas acima são chamadas expressões lógicasbooleanas. Lógica booleana está e todo lugar em programação. São parte fundamental dacomputação e conhecê-las muito bem é o mesmo que dominar escalas em música.

Nas sentenças seguintes você aplicará o que aprendeu na sessão anterior e vaitestá-los em Python. Pegue cada um dos exercícios, escreva qual a resposta para cadaum deles. Em cada caso, será “True” ou “False”. Assim que tiver as respostas, abra o

Prof. Ms. Carlos E F ROLAND ([email protected])2014

Centro Universitário de Franca UNI-FacefEngenharia Civil – Introdução à Programação e Uso de Bancos de Dados

Page 16: Guia Introdutório para programação em Python

interpretador Python na console e escreva as sentenças para verificar suas respostas.

Sentença True?

True and False

False and True

1 == 1 and 2 == 1

“test” == “test”

1 == 1 or 2 != 1

True and 1 == 1

False and 0 != 0

True or 1 == 1

"test" == "testing"

1 != 0 and 2 == 1

"test" != "testing"

"test" == 1

not (True and False)

not (1 == 1 and 0 != 1)

not (10 == 1 or 1000 == 1000)

not (1 != 10 or 3 == 4)

not ("testing" == "testing" and "Zed" == "Cool Guy")

1 == 1 and not ("testing" == 1 or 1 == 0)

"chunky" == "bacon" and not (3 == 4 or 3 == 3)

3 == 3 and not ("testing" == "testing" or "Python" == "Fun")

Veja uma dica para te ajudar a resolver as questões mais complicadas. Para resolver expressões booleanas complexas, siga os seguintes passos:

1. Encontre um teste de igualdade (== ou !=) e substitua por seu resultado (“True” ou “False”).

2. Encontre cada “and”/”or” dentro de parênteses e resolva as expressões primeiro.

3. Encontre cada “not” e o inverta.

4. Encontre os restantes “and”/”or” e resolva-os.

5. Quando completar, você deverá ter como resultado “True” ou “False”

Seja a expressão: 3 != 4 and not ("testing" != "test" or "Python" == "Python")

Prof. Ms. Carlos E F ROLAND ([email protected])2014

Centro Universitário de Franca UNI-FacefEngenharia Civil – Introdução à Programação e Uso de Bancos de Dados

Page 17: Guia Introdutório para programação em Python

Vamos aplicar os passos acima até chegarmos ao resultado:

1. Resolver cada teste de igualdade:. 3 != 4 é True → True and not (“testing” != “test” or “Python” == “Python”). “testing” != “test é True → True and not (True or “Pyhton” == “Python”). “Python” == “Python” é True → True and not (True or True)

2. Encontre cada “and”/”or” entre parênteses:. (True or True) é True → True and not (True)

3. Encontre cada “not” e os inverta:. not (True) é False → True and False

4. Encontre quaisquer “and”/”or” restantes e resolva-os:. True and False é False → Resposta final: False.

Atenção: as mais complicadas podem parecer muito difíceis à primeira vista. Vocêdeve conseguir começar a resolvê-las, mas não se preocupe se ainda não conseguir.Persistindo você verá que a cada dia tudo fica mais fácil. Anote o que deu errado e não sepreocupe se as coisas ainda não estão ajustadas na sua cabeça. Elas ficarão!

Testes Condicionais

Python usa variáveis booleanas para avaliar condições. Os valores booleanos“True” e “False” são retornados quando uma expressão é comparada ou avaliada. Porexemplo:

>>>x = 2>>>print x == 2 # imprime True>>>print x == 3 # imprime False>>>print x < 3 # imprime True

Perceba que atribuição de conteúdo a variáveis é feito usando-se o operador igual“=”, ao passo que a comparação entre duas variáveis é feita usando-se o operador duplo-igual “==”. O operador diferente (ou não igual) é marcado por “!=”.

Operadores Booleanos

Os operadores “and” (“e”) e o “or” (“ou”) permitem a construção de expressõesbooleanas complexas, por exemplo:

>>>name = “John”>>>if name == “John” and age == 23:. . . print “Your name is John, and you are 23 years old.”

Prof. Ms. Carlos E F ROLAND ([email protected])2014

Centro Universitário de Franca UNI-FacefEngenharia Civil – Introdução à Programação e Uso de Bancos de Dados

Page 18: Guia Introdutório para programação em Python

>>>if name == “John” or name == “Rick”:. . . print “Your name is either John or Rick.”

O Operador “in”

O operador “in” deve ser usado para verificar se um objeto específico existe em umcontainer de objetos iterativos, como uma lista:

>>>if name in [“John”, “Rick”]:. . . print “Your name is either John or Rick.”

Obs: lembre-se, sempre, das regras de indentação em Python! Evite problemas!!!!!

Segue um exemplo para uso de comandos “if” em Python, usando blocos decódigo:

if <statement is true>: <do something> … …elif <another statement is true>: # same as else if <do something else> … …else: # case statement is false <do another thing> … …

Por exemplo:

>>>x = 2>>>if x == 2:. . . print “x equals two!”. . . else:. . . print 'x does not equal to two.”

Obs: note que existe um “:” encerrando a expressão lógica ou o elemento do comandocondicional “else”.

Uma expressão é avaliada como “True” (verdade) se uma das seguintes condiçõesfor satisfeita: 1. A variável booleana “True” é fornecida, ou calculada usando umaexpressão, como uma expressão aritmética. 2. Um objeto considerado não vazio forpassado.

Prof. Ms. Carlos E F ROLAND ([email protected])2014

Centro Universitário de Franca UNI-FacefEngenharia Civil – Introdução à Programação e Uso de Bancos de Dados

Page 19: Guia Introdutório para programação em Python

Alguns exemplos de objetos vazios: 1. Uma cadeia vazia: “”; 2. Uma lista vazia: [];3. O número zero: 0; 4. A variável booleana falso: False.

O Operador 'is'

Ao contrário do operador de igualdade duplo-igual (“==”), o operador “is” nãocompara os valores das variáveis, mas suas instâncias propriamente ditas. Por exemplo:

>>>x = [1,2,3]>>>y = [1,2,3]>>>print x == y # imprime True>>>print x is y # imprimr False

O Operador “not”

Usar o “not” antes de uma expressão booleana a inverte (faz a negação dela):

>>>print not False # imprime True>>>print (not False) == (False) # imprime False

Exercícios 7

Troque as variáveis na primeira sessão, de tal forma que cada comando if resulteTrue.

# change this codenumber = 10second_number = 10first_array = []second_array = [1,2,3]

if number > 15: print "1"

if first_array: print "2"

if len(second_array) == 2: print "3"

if len(first_array) + len(second_array) == 5: print "4"

if first_array and first_array[0] == 1: print "5"

if not second_number:

Prof. Ms. Carlos E F ROLAND ([email protected])2014

Centro Universitário de Franca UNI-FacefEngenharia Civil – Introdução à Programação e Uso de Bancos de Dados

Page 20: Guia Introdutório para programação em Python

print "6"

Indo além... resolva as sentenças e depois teste com Python:

people = 20cats = 30dogs = 15

if people < cats: print "Too many cats! The world is doomed!"

if people > cats: print "Not many cats! The world is saved!"

if people < dogs: print "The world is drooled on!"

if people > dogs: print "The world is dry!"

dogs += 5

if people >= dogs: print "People are greater than or equal to dogs."

if people <= dogs: print "People are less than or equal to dogs."

if people == dogs: print "People are dogs."

Obs: o que += significa? O código x += 1 é o mesmo que x = x + 1, mas envolve menosdigitação. Este é conhecido como o operador “incremento de”. O mesmo vale para -= evárias outras expressões que serão mostradas adiante.

Laços

Existem dois tipos de laços em Python, “for” e “while”.

O Laço “for”

Os laços “for” iteram sobre uma dada sequência. Por exemplo:

Prof. Ms. Carlos E F ROLAND ([email protected])2014

Centro Universitário de Franca UNI-FacefEngenharia Civil – Introdução à Programação e Uso de Bancos de Dados

Page 21: Guia Introdutório para programação em Python

>>>primes = [2,3,5,7]>>>for prime in primes:. . . print prime

Os laços “for” podem iterar sobre uma sequência de números usando a função“range”. Exemplos:

>>> range(10)[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]>>> range(1, 11)[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]>>> range(0, 30, 5)[0, 5, 10, 15, 20, 25]>>> range(0, 10, 3)[0, 3, 6, 9]>>> range(0, -10, -1)[0, -1, -2, -3, -4, -5, -6, -7, -8, -9]>>> range(0)[]>>> range(1, 0)[]

Laços “while”

Laços “while” repetem um bloco de código enquanto uma condição booleana forverdadeira. Por exemplo:

>>># imprime 0,1,2,3,4>>>count = 0>>>while count < 5:. . . print count. . . count += 1

Comandos “break” e “continue”

“break” é usado para sair de laços “for” ou “while”, ao passo que “continue” é usadopara pular o bloco corrente, e retornar para o teste condicional do laço “for” ou “while”.Veja os exemplos:

>>># imprime 0,1,2,3,4>>>count = 0>>>while True:. . . print count. . . count += 1. . . if count >= 5:. . . break

Prof. Ms. Carlos E F ROLAND ([email protected])2014

Centro Universitário de Franca UNI-FacefEngenharia Civil – Introdução à Programação e Uso de Bancos de Dados

Page 22: Guia Introdutório para programação em Python

>>># imprime somente números ímpares (odd) – 1,3,5,7,9>>>for x in range(10):. . . # verifique se x é par (even). . . if x % 2 == 0:. . . continue. . . print x

Exercícios 8

Escreva o código que percorre a lista dada e imprime todos os números pares namesma ordem que são recebidos. Não imprima quaisquer números que vierem depois de237 na sequência.

numbers = [ 951, 402, 984, 651, 360, 69, 408, 319, 601, 485, 980, 507, 725, 547, 544, 615, 83, 165, 141, 501, 263, 617, 865, 575, 219, 390, 984, 592, 236, 105, 942, 941, 386, 462, 47, 418, 907, 344, 236, 375, 823, 566, 597, 978, 328, 615, 953, 345, 399, 162, 758, 219, 918, 237, 412, 566, 826, 248, 866, 950, 626, 949, 687, 217, 815, 67, 104, 58, 512, 24, 892, 894, 767, 553, 81, 379, 843, 831, 445, 742, 717, 958, 609, 842, 451, 688, 753, 854, 685, 93, 857, 440, 380, 126, 721, 328, 753, 470, 743, 527]

Indo além... teste e procure explicar o que acontece em cada caso:

the_count = [1, 2, 3, 4, 5]fruits = ['apples', 'oranges', 'pears', 'apricots']change = [1, 'pennies', 2, 'dimes', 3, 'quarters']

# this first kind of for-loop goes through a listfor number in the_count: print "This is count %d" % number

# same as abovefor fruit in fruits: print "A fruit of type: %s" % fruit

# also we can go through mixed lists too# notice we have to use %r since we don't know what's in itfor i in change: print "I got %r" % i

# we can also build lists, first start with an empty oneelements = []

# then use the range function to do 0 to 5 counts

Prof. Ms. Carlos E F ROLAND ([email protected])2014

Centro Universitário de Franca UNI-FacefEngenharia Civil – Introdução à Programação e Uso de Bancos de Dados

Page 23: Guia Introdutório para programação em Python

for i in range(0, 6): print "Adding %d to the list." % i # append is a function that lists understand elements.append(i)

# now we can print them out toofor i in elements: print "Element was: %d" % i

e:

i = 0numbers = []

while i < 6: print "At the top i is %d" % i numbers.append(i)

i = i + 1 print "Numbers now: ", numbers print "At the bottom i is %d" % i

print "The numbers: "

for num in numbers: print num

Fazendo Perguntas

Agora é hora de esquentar um pouco. Você fez uma série de exercícios mas quenão são lá muito excitantes... O que se quer, agora é obter dados externos paraprocessamento. Isso é um pouco complicado, porque você tem que aprender a fazer duascoisas que podem não fazer sentido imediatamente, mas acredite e toque em frente. Farásentido daqui a pouco.

A maioria dos programas fazem o seguinte:

1. Recebem algum tipo de entrada de um usuário.2. Processam esta entrada.3. Imprimem o resultado do processamento.

Até agora os exercícios imprimiram os resultados, mas não receberam entradas dousuário. Então veja como é possível se fazer isso:

print "How old are you?",

Prof. Ms. Carlos E F ROLAND ([email protected])2014

Centro Universitário de Franca UNI-FacefEngenharia Civil – Introdução à Programação e Uso de Bancos de Dados

Page 24: Guia Introdutório para programação em Python

age = raw_input()print "How tall are you?",height = raw_input()print "How much do you weigh?",weight = raw_input()

print "So, you're %r old, %r tall and %r heavy." % ( age, height, weight)

Obs: perceba que foi colocada uma “,” ao final de cada linha de impressão. Isso é paraque o comando não mude de linha para receber a entrada.

Escreva o programa em um arquivo (exerc9.py, por ex.) e execute algumas vezescom diferentes dados de entrada.

Refatorando o Código

Refatorar o código significa literalmente “limpá-lo”! Programas devem ser escritosde forma clara, limpa e o mais simples possível. SEMPRE há uma forma melhor de seescrever o mesmo programa. Estude mais a fundo cada um dos comandos e funçõesusadas e descubra todas as suas características. Lembre-se sempre de documentar seucódigo e torná-lo o mais claro, limpo, e enxuto possível.

Quer ver como o exercício anterior pode ser melhorado usando recursos dométodo raw_input()? Veja:

age = raw_input("How old are you? ")height = raw_input("How tall are you? ")weight = raw_input("How much do you weigh? ")

print "So, you're %r old, %r tall and %r heavy." % ( age, height, weight)

Percebeu a diferença? Não ficou mais bonito???? Isso é refatorar! Modifique seuexercício e teste novamente. Tem que funcionar da mesma forma...

Parâmetros, Descompactação, Variáveis

Neste exercício trataremos de mais um método de entrada que pode ser usadopara passar variáveis para um script. Você já deve estar executando seus programas apartir do comando “python seu_prog.py”. Muito bem, o termo “seu_prog.py” na linha decomando é chamado “argumento” (ou parâmetro). Agora vamos escrever um script quetambém aceite argumentos. Digite o programa a seguir e vamos examiná-lo:

from sys import argv

script, first, second, third = argv

Prof. Ms. Carlos E F ROLAND ([email protected])2014

Centro Universitário de Franca UNI-FacefEngenharia Civil – Introdução à Programação e Uso de Bancos de Dados

Page 25: Guia Introdutório para programação em Python

print "The script is called:", scriptprint "Your first variable is:", firstprint "Your second variable is:", secondprint "Your third variable is:", third

Na primeira linha temos o comando “import”. É desta forma que se adicionarecursos aos seus scripts Python. Diz-se que Python é uma linguagem com as “bateriasincluídas” como referência aos brinquedos eletrônicos que não costumam ser vendidoscom as baterias e são uma tremenda fonte de frustrações à maioria das crianças que osganham! Python vem com uma enorme quantidade de recursos prontos e todos àdisposição do programador para serem importados em seus scripts. A única ação que odesenvolvedor tem que tomar é importar os módulos que serão usados.

A “argv” é a variável argumento, um nome padrão em programação usado emvárias linguagens. Esta variável recebe os argumentos passados para o script Pythonexecutado. Você verá como funciona nos exemplos a seguir.

A linha seguinte “descompacta” o conteúdo de “argv” de tal forma que cada um sejaassociado às variáveis declaradas à esquerda do sinal de atribuição (“=”) - script, first,second e third. Pode parecer estranho, mas descompactar é provavelmente a melhorpalavra para descrever o que é feito. Simples assim: pegue o que quer que esteja emargv, descompacte, e atribua às variáveis à esquerda, em ordem.

Em seguida o script as imprime como de costume. Crie o arquivo (exerc10.py) eexecute da seguinte forma:

C:\sua_pasta>python exerc10.py arg1 arg2 arg3

Teste outras opções de argumentos. Teste também fornecendo só dois argumentose veja o que acontece.

C:\sua_pasta>python exerc10.py banana laranja tangerinaC:\sua_pasta>python exerc10.py prego martelo alicateC:\sua_pasta>python exerc10.py vai bugar!

Vamos agora usar os dois recursos vistos: argv e raw_input para pedir ao usuárioalgo específico. Isso será usado no exercício seguinte, quando você irá aprender a ler eescrever arquivos de dados. Neste exercício o raw_input será usado de uma forma umpouco diferente, apresentando só um sinal de prompt “>”. Crie o script com o código aseguir e salve com o nome exerc11.py.

from sys import argv

script, user_name = argvprompt = '> '

Prof. Ms. Carlos E F ROLAND ([email protected])2014

Centro Universitário de Franca UNI-FacefEngenharia Civil – Introdução à Programação e Uso de Bancos de Dados

Page 26: Guia Introdutório para programação em Python

print "Hi %s, I'm the %s script." % (user_name, script)print "I'd like to ask you a few questions."print "Do you like me %s?" % user_namelikes = raw_input(prompt)

print "Where do you live %s?" % user_namelives = raw_input(prompt)

print "What kind of computer do you have?"computer = raw_input(prompt)

print """Alright, so you said %r about liking me.You live in %r. Not sure where that is.And you have a %r computer. Nice.""" % (likes, lives, computer)

Note que foi criada uma variável prompt que é inicializada com o sinal que sedeseja usar na interface, e o raw_input usou esta variável em vez de um texto fixo. Agora,se quiser alterar o sinal de pronto do programa, basta alterar a linha de atribuição de valorà variável prompt. Em um só lugar... Uma mão na roda!

Execute o script passando como argumento o seu nome:

C:\sua_pasta>python exerc11.py seu_nome

e veja o resultado. Modifique o sinal de pronto e teste. Adicione um outro argumento euse-o no script.

Obs: veja que foi usado um novo recurso do Python para definir cadeias com múltiplaslinhas: as aspas triplas (“””). Pesquise mais sobre este recurso para usá-lo com maisfrequência.

Lendo Arquivos

O que foi estudado sobre raw_input e argv vai permitir começar a ler arquivos dedados. Você precisa ir fundo neste exercício para entender o que vai acontecer, e vai terque executá-lo muitas vezes, portanto tenha algum cuidado antes de executar e sempreverifique o que você fez, porque trabalhar com arquivos é uma forma MUITO fácil de seapagar e perder o que se fez. Portanto SEJA CUIDADOSO!

Este exercício envolve escrever dois arquivos. Um é o usual script do exercício(exerc12.py) que será executado, mas o outro (exerc12_sample.txt) não é um script, masum arquivo de texto puro, que será lido pelo script. O conteúdo dele é:

This is stuff I typed into a file.It is really cool stuff.

Prof. Ms. Carlos E F ROLAND ([email protected])2014

Centro Universitário de Franca UNI-FacefEngenharia Civil – Introdução à Programação e Uso de Bancos de Dados

Page 27: Guia Introdutório para programação em Python

Lots and lots of fun to have in here.

No seu editor, digite o texto acima e salve como exerc12_sample.txt na sua pasta deestudo.

O que se quer fazer é “abrir” (“open”) este arquivo pelo script, ler e imprimir seuconteúdo. Entretanto, não é para se engessar o script definindo no seu código fonte onome do arquivo a ser usado. Ou seja, deve-se pedir que o usuário informe o nome doarquivo a ser aberto, para inclusive poder usar o mesmo script com outros arquivos detexto. Para isso, usa-se o argv para pedir ao usuário o nome do arquivo:

from sys import argv

script, filename = argv

txt = open(filename)

print "Here's your file %r:" % filenameprint txt.read()

print "Type the filename again:"file_again = raw_input("> ")

txt_again = open(file_again)

print txt_again.read()

Algumas novidades apareceram por aqui: as duas primeiras linhas são velhasconhecidas... Na linha seguinte foi usado um novo comando “open”. Pesquise o que estecomando faz. Você tem um recurso legal no Python que é executar o comando “pydoc”para receber instruções sobre cada recurso da linguagem. Teste “pydoc open” e veja oque descobre. Aqui o arquivo cujo nome foi informado como argumento do script foiaberto e atribuído a uma variável chamada “txt”.

Na linha seguinte foi impresso uma mensagem seguida do nome do arquivorecebido, mas na linha de baixo, algo novo e muito legal foi feito. Foi chamado um métododo objeto “txt” (o arquivo obtido do comando “open”). Métodos são executadosassociando-os ao nome do objeto com um ponto (“.”), como no caso: txt.read(). O queisso significa é: “Ei txt! Execute o seu comando read sem parâmetros!”

Existem casos que se pode usar os métodos de um objeto passando parâmetroscomo já foi visto com o open e o raw_input.

Agora vamos dedicar um pouco mais de tempo a este exercício, porque vale apena. Invista um tempo fazendo as seguintes atividades:

Prof. Ms. Carlos E F ROLAND ([email protected])2014

Centro Universitário de Franca UNI-FacefEngenharia Civil – Introdução à Programação e Uso de Bancos de Dados

Page 28: Guia Introdutório para programação em Python

1. Sobre cada linha do script escreva um comentário sobre o que ela faz.2. Pesquise os documentos existentes no Python sobre cada um dos comandos usados.3. Faça uma pesquisa na internet sobre as definições de comando, função e método. Nãose preocupe se as coisas ficarem pior. No início é assim mesmo, mas insista!4. Elimine as linhas a partir da 6a e teste o script de novo.5. Use somente raw_input e faça novo teste. Pense sobre porque uma forma de se obtero nome do arquivo é melhor do que outra.6. Execute o “pydoc file” e role até encontrar o método “read()”. Veja todos os outros quepodem ser usados. Desconsidere aqueles que tenham “__” (dois sublinhados) na frentedo nome. Tente outras opções de comando.7. Abra a console do Python e execute o método “open”. Veja como se pode abrir arquivose executar o “read” neles.8. Faça o script do exercício executar um “close()” nas variáveis “txt” e “txt_again”. ÉMUITO importante fechar os arquivos quando tiver terminado de usá-los.

Lendo e Escrevendo Arquivos

Se você fez as atividades propostas no item anterior (se não fez VÁ JÁ FAZER!!!!),você deve ter visto vários métodos que podem ser executados em arquivos. Refrescandoa memória, segue uma lista:

. close – fecha o arquivo.

. read – lê o conteúdo do arquivo aberto. Pode-se atribuir o resultado a uma variável.

. readline – lê apenas uma linha do arquivo de texto.

. truncate – esvazia o arquivo. Tome cuidado ao usar este comando.

. write(stuff) – escreve stuff no arquivo.

Por agora estes são os métodos importantes que serão usados. Alguns requeremparâmetros, mas isso nem tem tanta importância agora. Só é preciso lembrar que ométodo write requer um parâmetro: a string que será escrita no arquivo.

Vamos usar alguns destes para fazer um simplérrimo editor de textos:

from sys import argv

script, filename = argv

print "We're going to erase %r." % filenameprint "If you don't want that, hit CTRL-C (^C)."print "If you do want that, hit RETURN."

raw_input("?")

print "Opening the file..."target = open(filename, 'w')

print "Truncating the file. Goodbye!"

Prof. Ms. Carlos E F ROLAND ([email protected])2014

Centro Universitário de Franca UNI-FacefEngenharia Civil – Introdução à Programação e Uso de Bancos de Dados

Page 29: Guia Introdutório para programação em Python

target.truncate()

print "Now I'm going to ask you for three lines."

line1 = raw_input("line 1: ")line2 = raw_input("line 2: ")line3 = raw_input("line 3: ")

print "I'm going to write these to the file."

target.write(line1)target.write("\n")target.write(line2)target.write("\n")target.write(line3)target.write("\n")

print "And finally, we close it."target.close()

Este é um script longo (exerc13.py)! O maior até agora... Então não tenha pressa,verifique tudo o que digitou, e faça-o rodar. Uma dica é ir fazendo e testando aos poucos.Faça as cinco primeiras linhas funcionarem, depois mais cinco, depois mais algumas atéque tudo esteja funcionando.

Mais atividades complementares:

1. Se você estiver confuso, volte e use o truque do comentário no código para arejar suacabeça. Escreva o que cada linha faz no código.2. Escreva um script parecido com o anterior para ler o arquivo criado por este.3. Há muita repetição neste código. Refatore seu scrpit usando “strings”, “formats”, ecaracteres escape (procure sobre eles na internet e na documentação do Python –caracteres \) para imprimir as variáveis line1, line2 e line3 com um único “target.write()”em vez de seis.4. Descubra porque é necessário passar um argumento 'w' no método open. Dica: opententa ser seguro fazendo com que o programador explicite que ele quer escrever em umarquivo.5. Se o arquivo foi aberto com o argumento 'w', então é realmente necessário executar otarget.truncate()? Leia a documentação do método open do Python e veja se isso éverdade.

Mais um pouco de Arquivos

Vamos fazer mais algumas coisas com arquivos. Vamos escrever um script Pythonpara copiar um arquivo para outro. É bem rápido, mas vai te dar algumas ideias sobreoutras coisas que podem ser feitas com arquivos.

Prof. Ms. Carlos E F ROLAND ([email protected])2014

Centro Universitário de Franca UNI-FacefEngenharia Civil – Introdução à Programação e Uso de Bancos de Dados

Page 30: Guia Introdutório para programação em Python

from sys import argvfrom os.path import exists

script, from_file, to_file = argv

print "Copying from %s to %s" % (from_file, to_file)

# we could do these two on one line too, how?in_file = open(from_file)indata = in_file.read()

print "The input file is %d bytes long" % len(indata)

print "Does the output file exist? %r" % exists(to_file)print "Ready, hit RETURN to continue, CTRL-C to abort."raw_input()

out_file = open(to_file, 'w')out_file.write(indata)

print "Alright, all done."

out_file.close()in_file.close()

Veja que foi importado um outro módulo chamado exists. Ele permite verificar seuma arquivo existe, retornando “True” caso verdade, com base na string passada comoargumento. Ele retorna “False” se o arquivo não existir.

Crie o script (exerc14.py) e um outro arquivo “test.txt” com qualquer texto e executecom a sintaxe (passando dois argumentos):

C:\sua_pasta>exerc14.py test.txt new_test.txt

Deve funcionar com quaisquer arquivos. Mas tenha cuidado ao informar osargumentos. Você pode perder coisas importantes.

Para complementar os estudos:

1. Leia mais sobre o comando import. Tente importar algumas coisas e veja se consegue.Não se preocupe se não der certo!2. Este script é um pouco irritante, não é? Fica perguntando um monte de coisa emostrando um monte de mensagens. Tente torná-lo mais amigável removendo osexcessos.3. Tente encurtar ao máximo o script (refatorá-lo). É possível fazê-lo com uma única linha(um pouco longa, mas só 1!).4. Descubra porque é necessário fazer o output.close() no script.

Prof. Ms. Carlos E F ROLAND ([email protected])2014

Centro Universitário de Franca UNI-FacefEngenharia Civil – Introdução à Programação e Uso de Bancos de Dados

Page 31: Guia Introdutório para programação em Python

FUNÇÕES

O que são funções?

Funções são uma maneira conveniente de dividir o código em blocos úteis,permitindo que se ordene o programa, tornando-o mais legível e reutilizar estas parteseconomizando algum tempo de desenvolvimento. Funções também são uma tremendasacada para definir interfaces de tal forma que programadores possam compartilhar seuscódigos.

Como se escreve funções em Python?

Como visto nos itens anteriores, Python faz uso de blocos de código.Um bloco é uma parte do código escrito como:

block_head: 1st block line 2nd block line …

Onde uma “block line” é mais código Python (ou mesmo um outro bloco), e o “blockhead” é algo com o seguinte formato:

block_keyword block_name(argument1,argument2, …)

“block_keyword” são expressões do tipo “if”, “for”, e “while” (já vistas).

Funções em Python são definidas usando a block_keyword “def”, seguida do nomeda função como o nome do bloco de código. Por exemplo:

>>>def my_function():. . . print “Hello From My Function!”

Funções também podem receber argumentos (variáveis passadas pelo código queas chama para execução). Por exemplo:

>>>def my_function_with_args(username, greeting):. . . print “Hello, %s, From My Function!, I wish you %s” % (username, greeting)

Funções podem retornar um valor para o código que as chamou, usando akeyword “return”. Por exemplo:

Prof. Ms. Carlos E F ROLAND ([email protected])2014

Centro Universitário de Franca UNI-FacefEngenharia Civil – Introdução à Programação e Uso de Bancos de Dados

Page 32: Guia Introdutório para programação em Python

>>>def sum_two_numbers(a, b):. . . return a + b

Como chamar funções em Python?

Simplesmente escreva o nome da função seguido de (), colocando quaisquerargumentos requeridos dentro dos parênteses. Por exemplo, para chamar as funçõesacima:

>>># para chamar a função my_function>>>my_function()

>>># para chamar a função my_function_with_args>>>my_function_with_args(“Meu nome”, “Bom dia/tarde/noite”)

>>># para chamar a função sum_two_numbers>>>print sum_two_numbers(15, 67)

Exercícios 15

Neste exercício você usará uma função existente, e acrescentará seu código paracriar um programa completo.

1. Adicione uma função chamada list_benefits() que retorne as seguinte lista de strings:“More organized code”, “More readable code”, “Easier code reuse”, “Allowingprogrammers to share and connect code together”

2. Adicione uma função chamada build_sentence(info) que recebe um argumento únicocontendo uma string e retorna a sentença iniciando com a dada string e terminando com astring “ is a benefit of functions!”

3. Execute e veja todas as funções trabalhando juntas!.

# Modify this function to return a list of strings as defined abovedef list_benefits(): pass

# Modify this function to concatenate to each benefit:# " is a benefit of functions!"def build_sentence(benefit): pass

def name_the_benefits_of_functions(): list_of_benefits = list_benefits() for benefit in list_of_benefits:

Prof. Ms. Carlos E F ROLAND ([email protected])2014

Centro Universitário de Franca UNI-FacefEngenharia Civil – Introdução à Programação e Uso de Bancos de Dados

Page 33: Guia Introdutório para programação em Python

print build_sentence(benefit)

name_the_benefits_of_functions()

Indo além... estude o código a seguir e tente descobrir o que ele faz. Depois de tersua resposta, escreva o código em um arquivo e teste no Python.

from sys import exit

def gold_room(): print "This room is full of gold. How much do you take?"

next = raw_input("> ") if "0" in next or "1" in next: how_much = int(next) else: dead("Man, learn to type a number.")

if how_much < 50: print "Nice, you're not greedy, you win!" exit(0) else: dead("You greedy bastard!")

def bear_room(): print "There is a bear here." print "The bear has a bunch of honey." print "The fat bear is in front of another door." print "How are you going to move the bear?" bear_moved = False

while True: next = raw_input("> ")

if next == "take honey": dead("The bear looks at you then slaps your face off.") elif next == "taunt bear" and not bear_moved: print "The bear has moved from the door. You can go through it now." bear_moved = True elif next == "taunt bear" and bear_moved: dead("The bear gets pissed off and chews your leg off.") elif next == "open door" and bear_moved: gold_room() else: print "I got no idea what that means."

Prof. Ms. Carlos E F ROLAND ([email protected])2014

Centro Universitário de Franca UNI-FacefEngenharia Civil – Introdução à Programação e Uso de Bancos de Dados

Page 34: Guia Introdutório para programação em Python

def cthulhu_room(): print "Here you see the great evil Cthulhu." print "He, it, whatever stares at you and you go insane." print "Do you flee for your life or eat your head?"

next = raw_input("> ")

if "flee" in next: start() elif "head" in next: dead("Well that was tasty!") else: cthulhu_room()

def dead(why): print why, "Good job!" exit(0)

def start(): print "You are in a dark room." print "There is a door to your right and left." print "Which one do you take?"

next = raw_input("> ")

if next == "left": bear_room() elif next == "right": cthulhu_room() else: dead("You stumble around the room until you starve.")

start()

Classes e Objetos

Objetos são um encapsulamento de variáveis e funções em uma entidade única.Objetos recebem suas variáveis e funções das classes. Classes são essencialmente ummodelo para se criar objetos.

Uma classe bem básica se pareceria com o seguinte:

>>>class MyClass:. . . variable = “blah”

Prof. Ms. Carlos E F ROLAND ([email protected])2014

Centro Universitário de Franca UNI-FacefEngenharia Civil – Introdução à Programação e Uso de Bancos de Dados

Page 35: Guia Introdutório para programação em Python

. . . # method defined

. . . def function(self):

. . . print “This is a message inside the class.”

A explicação de porque se tem que incluir aquele “self” como um parâmetro vai serfeita lá nos Tópicos Avançados (no site). Em primeiro lugar, para instanciar a classe(modelo) acima para um objeto deve-se fazer o seguinte:

>>>myobjectx = MyClass()

Agora a variável myobjectx instanciou um objeto da classe MyClass que contém avariável e a função definidas dentro da classe chamada MyClass.

Acessando Variáveis de Objetos

Para acessar a variável dentro do recém criado objeto MyObject faz-se o seguinte:

>>>myobjectx.variable

Então instanciando o objeto como anteriormente, na execução abaixo seriaimpressa a string “blah”:

>>>print myobjectx.variable

Você pode criar múltiplos objetos diferentes que são da mesma classe (têm amesmas variáveis e funções definidas). Entretanto, cada objeto contém cópiasindependentes das variáveis definidas na classe. Por exemplo, se definirmos outro objetocom a classe MyClass e então trocarmos a string na variável acima:

>>>myobjecty = MyClass()>>>myobject.variable = “yackity”

Então imprimindo os dois valores tem-se:

>>>print myobjectx.variable # this would print “blah”>>>print myobjecty.variable # this would print “yackity”

Acessando Funções (ou Métodos) de Objetos

Para acessar uma função (método) dentro de um objeto usa-se a notação similaràquela para acessar variáveis:

>>>myobjectx.function()

O comando acima iria imprimir a mensagem: “This is a message inside the class.”

Prof. Ms. Carlos E F ROLAND ([email protected])2014

Centro Universitário de Franca UNI-FacefEngenharia Civil – Introdução à Programação e Uso de Bancos de Dados

Page 36: Guia Introdutório para programação em Python

Exercícios 16

Temos a classe definida para veículos. Crie dois novos veículos chamados car1 ecar2. Defina car1 para ser vermelho, conversível, valendo $ 60.000 com um nome Fer, e ocar2 como azul, uma Van, chamada Jump que vale $ 10.000.

# define the Vehicle classclass Vehicle: name = "" kind = "car" color = "" value = 100.00 def description(self): desc_str = "%s is a %s %s worth $%.2f." % (self.name, self.color, self.kind, self.value) return desc_str# your code goes here

# test codeprint car1.description()print car2.description()

Dicionários

Um dicionário é um tipo de dado similar aos vetores, mas opera com chaves evalores em vez de índices. Cada valor armazenado em um dicionário pode ser acessadousando uma chave, que é qualquer tipo de objeto (uma string, um número, uma lista, etc.)em vez de um índice para endereçá-lo.

Por exemplo, um banco de dados de números telefônicos poderiam serarmazenados usando um dicionário como o seguinte:

>>>phonebook = {}>>>phonebook[“John”] = 938477566>>>phonebook[“Jack”] = 938377264>>>phonebook[“Jill”] = 947662781

Alternativamente, um dicionário pode ser inicializado com os mesmos valores coma seguinte notação:

>>>phonebook = {. . . “John” : 938477566,. . . “Jack” : 938377264,. . . “Jill” : 947662781. . .}

Iterações sobre Dicionários

Dicionários pode ser iterados da mesma forma que listas. Entretanto um dicionário,

Prof. Ms. Carlos E F ROLAND ([email protected])2014

Centro Universitário de Franca UNI-FacefEngenharia Civil – Introdução à Programação e Uso de Bancos de Dados

Page 37: Guia Introdutório para programação em Python

ao contrário de uma lista, não mantém a ordem dos valores armazenada neles. Para iterarsobre os pares chave e valor, use a seguinte sintaxe:

>>>for name, number in phonebook.iteritems():. . . print “Phone number of %s is %d” % (name, number)

Removendo um Valor

Para remover um valor de uma chave especificada, use uma das seguintes formas:

>>>del phonebook[“John”]

ou

>>>phonebook.pop(“John”)

Exercícios 17

Adicione “Jack” à agenda de telefones com o número 938273443, e remova o Jillda agenda.

phonebook = { "John" : 938477566, "Jack" : 938377264, "Jill" : 947662781}

# write your code here

# testing codeif "Jake" in phonebook: print "Jake is listed in the phonebook."if "Jill" not in phonebook: print "Jill is not listed in the phonebook."

Módulos de Pacotes

Módulos em Python são simples arquivos com a extensão .py, que implementamum conjunto de funções. Módulos são importados de outros módulos usando o comandoimport.

Pesquise a lista completa de módulos da biblioteca padrão do Python emhttps://docs.python.org/2/library/.

A primeira vez que um módulo é carregado em um script Python, ele é inicializado

Prof. Ms. Carlos E F ROLAND ([email protected])2014

Centro Universitário de Franca UNI-FacefEngenharia Civil – Introdução à Programação e Uso de Bancos de Dados

Page 38: Guia Introdutório para programação em Python

pela execução do código no módulo uma vez. Se outro módulo em seu código importa omesmo módulo, ele não será carregado duas vezes mas uma única – assim, variáveislocais dentro de um módulo atuam como um singleton – elas são inicializadas uma únicavez.

Se quisermos importar o módulo urllib, que habilita a leitura de dados de URLs, nóssimplesmente importamos o módulo:

>>># import the library>>>import urllib>>># use it>>>urllib.urlopen(...)

Explorando Módulos Prontos (built-in)

Duas funções muito importantes são uma “mão na roda” quando se exploramódulos em Python – as funções “dir” e a “help”. Pode-se procurar quais funções sãoimplementadas em cada módulo usando a função “dir”:

>>>import urllib>>>dir(urllib)

(teste esta função na console).

Quando se encontra a função que se quer usar no módulo, pode-se saber maissobre ela com a função “help”, pelo interpretador Python:

>>>help(urllib.urlopen)

Escrevendo Módulos

Escrever módulos Python é muito simples. Para criar seu próprio módulo,simplesmente crie um novo arquivo .py com o nome do módulo, e então importe-o usandoo comando import e especificando o nome do módulo (sem a extensão .py).

Escrevendo Pacotes (Packages)

Pacotes são namespaces que contém múltiplos pacotes e módulos. Eles sãosimples diretórios, mas com uma alteração.

Cada pacote em Python é um diretório que TEM QUE conter uma arquivo especialchamado “__init__.py”. Este arquivo pode ser vazio, e indica que o diretório contém umpacote Python, de tal forma que ele pode ser importado da mesma maneira que ummódulo é importado.

Se criarmos um diretório chamado “foo”, que marca o nome do pacote, então

Prof. Ms. Carlos E F ROLAND ([email protected])2014

Centro Universitário de Franca UNI-FacefEngenharia Civil – Introdução à Programação e Uso de Bancos de Dados

Page 39: Guia Introdutório para programação em Python

podemos criar um módulo dentro daquele pacote chamado “bar”. Não se pode esquecerde criar o arquivo “__init__.py” dentro do diretório “foo”.

Para usar o módulo “bar”, pode-se importar de duas formas:

>>>import foo.bar

ou

>>> from foo import bar

No primeiro método, deve-se usar o prefixo “foo” sempre que se for acessar omódulo “bar”. No segundo método, não é necessário, porque o módulo foi importado parao namespace do módulo.

O arquivo “__init__.py” pode também decidir quais módulos o pacote exporta comoa API, enquanto mantém outros módulos internos, pela sobreposição da variável“__all__”, da seguinte forma:

__init__.py:

__all__ = [“bar”]

Exercícios 18

Neste exercício, você terá que imprimir uma lista ordenada alfabeticamente, detodas as funções existentes no módulo “re”, que contenham a palavra “find”.

Obs: não conseguiu???? quer saber como fazer? Procure lá no www.learnpython.org!

Solução:

import re

# Your code goes herefind_members = []for member in dir(re): if "find" in member: find_members.append(member)

print sorted(find_members)

Atividades de fixação (avaliação)

1. Converter valores entre bases numéricas.

Prof. Ms. Carlos E F ROLAND ([email protected])2014

Centro Universitário de Franca UNI-FacefEngenharia Civil – Introdução à Programação e Uso de Bancos de Dados

Page 40: Guia Introdutório para programação em Python

DePara

Dec(d) Bin(b) Oct(o) Hex(h)

Dec(d) XXXXX

Bin(b) XXXXX

Oct(o) XXXXX

Hex(h) XXXXX

Fazer um script que pergunte ao usuário quais as bases origem (De) e destino(Para) será realizada a conversão e qual o valor a ser convertido. Imprima o resultado daconversão. Procure escrever o algoritmo de conversão em vez de usar funções prontasdo Python.

2. Cálculo de área de figuras geométricas.Fazer um script que pergunte ao usuário qual figura geométrica quer usar, e peça

as dimensões para cálculo. Imprima o resultado apresentando a figura, os dadosfornecidos e a área calculada. Possíveis figuras: triângulo, retângulo, quadrado, losango,trapézio, e círculo.

3. Verificador de CPF e CNPJ.Fazer um script que pergunte qual o código deve ser verificado, descubra se é um

CPF ou um CNPJ, calcule os dígitos verificadores e informe se o código fornecido é válidoou não.

Mais exemplos de programas simples:

Disponível em: https://wiki.python.org/moin/SimplePrograms

1 line: Output

print 'Hello, world!'

2 lines: Input, assignment

name = raw_input('What is your name?\n')

print 'Hi, %s.' % name

3 lines: For loop, built-in enumerate function, new style formatting

friends = ['john', 'pat', 'gary', 'michael']

for i, name in enumerate(friends):

Prof. Ms. Carlos E F ROLAND ([email protected])2014

Centro Universitário de Franca UNI-FacefEngenharia Civil – Introdução à Programação e Uso de Bancos de Dados

Page 41: Guia Introdutório para programação em Python

print "iteration {iteration} is {name}".format(iteration=i, name=name)

4 lines: Fibonacci, tuple assignment

parents, babies = (1, 1)

while babies < 100:

print 'This generation has {0} babies'.format(babies)

parents, babies = (babies, parents + babies)

5 lines: Functions

def greet(name):

print 'Hello', name

greet('Jack')

greet('Jill')

greet('Bob')

6 lines: Import, regular expressions

import re

for test_string in ['555-1212', 'ILL-EGAL']:

if re.match(r'^\d{3}-\d{4}$', test_string):

print test_string, 'is a valid US local phone number'

else:

print test_string, 'rejected'

7 lines: Dictionaries, generator expressions

prices = {'apple': 0.40, 'banana': 0.50}

my_purchase = {

'apple': 1,

'banana': 6}

grocery_bill = sum(prices[fruit] * my_purchase[fruit]

for fruit in my_purchase)

print 'I owe the grocer $%.2f' % grocery_bill

8 lines: Command line arguments, exception handling

Prof. Ms. Carlos E F ROLAND ([email protected])2014

Centro Universitário de Franca UNI-FacefEngenharia Civil – Introdução à Programação e Uso de Bancos de Dados

Page 42: Guia Introdutório para programação em Python

# This program adds up integers in the command line

import sys

try:

total = sum(int(arg) for arg in sys.argv[1:])

print 'sum =', total

except ValueError:

print 'Please supply integer arguments'

9 lines: Opening files

# indent your Python code to put into an email

import glob

# glob supports Unix style pathname extensions

python_files = glob.glob('*.py')

for file_name in sorted(python_files):

print ' ------' + file_name

with open(file_name) as f:

for line in f:

print ' ' + line.rstrip()

print

10 lines: Time, conditionals, from..import, for..else

from time import localtime

activities = {8: 'Sleeping',

9: 'Commuting',

17: 'Working',

18: 'Commuting',

20: 'Eating',

22: 'Resting' }

time_now = localtime()

hour = time_now.tm_hour

for activity_time in sorted(activities.keys()):

if hour < activity_time:

print activities[activity_time]

Prof. Ms. Carlos E F ROLAND ([email protected])2014

Centro Universitário de Franca UNI-FacefEngenharia Civil – Introdução à Programação e Uso de Bancos de Dados

Page 43: Guia Introdutório para programação em Python

break

else:

print 'Unknown, AFK or sleeping!'

11 lines: Triple-quoted strings, while loop

REFRAIN = '''

%d bottles of beer on the wall,

%d bottles of beer,

take one down, pass it around,

%d bottles of beer on the wall!

'''

bottles_of_beer = 99

while bottles_of_beer > 1:

print REFRAIN % (bottles_of_beer, bottles_of_beer,

bottles_of_beer - 1)

bottles_of_beer -= 1

12 lines: Classes

class BankAccount(object):

def __init__(self, initial_balance=0):

self.balance = initial_balance

def deposit(self, amount):

self.balance += amount

def withdraw(self, amount):

self.balance -= amount

def overdrawn(self):

return self.balance < 0

my_account = BankAccount(15)

my_account.withdraw(5)

print my_account.balance

13 lines: Unit testing with unittest

import unittest

def median(pool):

copy = sorted(pool)

size = len(copy)

if size % 2 == 1:

Prof. Ms. Carlos E F ROLAND ([email protected])2014

Centro Universitário de Franca UNI-FacefEngenharia Civil – Introdução à Programação e Uso de Bancos de Dados

Page 44: Guia Introdutório para programação em Python

return copy[(size - 1) / 2]

else:

return (copy[size/2 - 1] + copy[size/2]) / 2

class TestMedian(unittest.TestCase):

def testMedian(self):

self.failUnlessEqual(median([2, 9, 9, 7, 9, 2, 4, 5, 8]), 7)

if __name__ == '__main__':

unittest.main()

14 lines: Doctest-based testing

def median(pool):

'''Statistical median to demonstrate doctest.

>>> median([2, 9, 9, 7, 9, 2, 4, 5, 8])

7

'''

copy = sorted(pool)

size = len(copy)

if size % 2 == 1:

return copy[(size - 1) / 2]

else:

return (copy[size/2 - 1] + copy[size/2]) / 2

if __name__ == '__main__':

import doctest

doctest.testmod()

15 lines: itertools

from itertools import groupby

lines = '''

This is the

first paragraph.

This is the second.

'''.splitlines()

# Use itertools.groupby and bool to return groups of

# consecutive lines that either have content or don't.

for has_chars, frags in groupby(lines, bool):

Prof. Ms. Carlos E F ROLAND ([email protected])2014

Centro Universitário de Franca UNI-FacefEngenharia Civil – Introdução à Programação e Uso de Bancos de Dados

Page 45: Guia Introdutório para programação em Python

if has_chars:

print ' '.join(frags)

# PRINTS:

# This is the first paragraph.

# This is the second.

16 lines: csv module, tuple unpacking, cmp() built-in

import csv

# write stocks data as comma-separated values

writer = csv.writer(open('stocks.csv', 'wb', buffering=0))

writer.writerows([

('GOOG', 'Google, Inc.', 505.24, 0.47, 0.09),

('YHOO', 'Yahoo! Inc.', 27.38, 0.33, 1.22),

('CNET', 'CNET Networks, Inc.', 8.62, -0.13, -1.49)

])

# read stocks data, print status messages

stocks = csv.reader(open('stocks.csv', 'rb'))

status_labels = {-1: 'down', 0: 'unchanged', 1: 'up'}

for ticker, name, price, change, pct in stocks:

status = status_labels[cmp(float(change), 0.0)]

print '%s is %s (%s%%)' % (name, status, pct)

18 lines: 8-Queens Problem (recursion)

BOARD_SIZE = 8

def under_attack(col, queens):

left = right = col

for r, c in reversed(queens):

left, right = left - 1, right + 1

if c in (left, col, right):

return True

return False

def solve(n):

Prof. Ms. Carlos E F ROLAND ([email protected])2014

Centro Universitário de Franca UNI-FacefEngenharia Civil – Introdução à Programação e Uso de Bancos de Dados

Page 46: Guia Introdutório para programação em Python

if n == 0:

return [[]]

smaller_solutions = solve(n - 1)

return [solution+[(n,i+1)]

for i in xrange(BOARD_SIZE)

for solution in smaller_solutions

if not under_attack(i+1, solution)]

for answer in solve(BOARD_SIZE):

print answer

20 lines: Prime numbers sieve w/fancy generators

import itertools

def iter_primes():

# an iterator of all numbers between 2 and +infinity

numbers = itertools.count(2)

# generate primes forever

while True:

# get the first number from the iterator (always a prime)

prime = numbers.next()

yield prime

# this code iteratively builds up a chain of

# filters...slightly tricky, but ponder it a bit

numbers = itertools.ifilter(prime.__rmod__, numbers)

for p in iter_primes():

if p > 1000:

break

print p

21 lines: XML/HTML parsing (using Python 2.5 or third-party library)

dinner_recipe = '''<html><body><table>

<tr><th>amt</th><th>unit</th><th>item</th></tr>

<tr><td>24</td><td>slices</td><td>baguette</td></tr>

Prof. Ms. Carlos E F ROLAND ([email protected])2014

Centro Universitário de Franca UNI-FacefEngenharia Civil – Introdução à Programação e Uso de Bancos de Dados

Page 47: Guia Introdutório para programação em Python

<tr><td>2+</td><td>tbsp</td><td>olive oil</td></tr>

<tr><td>1</td><td>cup</td><td>tomatoes</td></tr>

<tr><td>1</td><td>jar</td><td>pesto</td></tr>

</table></body></html>'''

# In Python 2.5 or from http://effbot.org/zone/element-index.htm

import xml.etree.ElementTree as etree

tree = etree.fromstring(dinner_recipe)

# For invalid HTML use http://effbot.org/zone/element-soup.htm

# import ElementSoup, StringIO

# tree = ElementSoup.parse(StringIO.StringIO(dinner_recipe))

pantry = set(['olive oil', 'pesto'])

for ingredient in tree.getiterator('tr'):

amt, unit, item = ingredient

if item.tag == "td" and item.text not in pantry:

print "%s: %s %s" % (item.text, amt.text, unit.text)

28 lines: 8-Queens Problem (define your own exceptions)

BOARD_SIZE = 8

class BailOut(Exception):

pass

def validate(queens):

left = right = col = queens[-1]

for r in reversed(queens[:-1]):

left, right = left-1, right+1

if r in (left, col, right):

raise BailOut

def add_queen(queens):

for i in range(BOARD_SIZE):

test_queens = queens + [i]

try:

validate(test_queens)

if len(test_queens) == BOARD_SIZE:

return test_queens

Prof. Ms. Carlos E F ROLAND ([email protected])2014

Centro Universitário de Franca UNI-FacefEngenharia Civil – Introdução à Programação e Uso de Bancos de Dados

Page 48: Guia Introdutório para programação em Python

else:

return add_queen(test_queens)

except BailOut:

pass

raise BailOut

queens = add_queen([])

print queens

print "\n".join(". "*q + "Q " + ". "*(BOARD_SIZE-q-1) for q in queens)

33 lines: "Guess the Number" Game (edited) from http://inventwithpython.com

import random

guesses_made = 0

name = raw_input('Hello! What is your name?\n')

number = random.randint(1, 20)

print 'Well, {0}, I am thinking of a number between 1 and

20.'.format(name)

while guesses_made < 6:

guess = int(raw_input('Take a guess: '))

guesses_made += 1

if guess < number:

print 'Your guess is too low.'

if guess > number:

print 'Your guess is too high.'

if guess == number:

break

if guess == number:

print 'Good job, {0}! You guessed my number in {1}

guesses!'.format(name, guesses_made)

Prof. Ms. Carlos E F ROLAND ([email protected])2014

Centro Universitário de Franca UNI-FacefEngenharia Civil – Introdução à Programação e Uso de Bancos de Dados

Page 49: Guia Introdutório para programação em Python

else:

print 'Nope. The number I was thinking of was {0}'.format(number)

Outros sites sobre Python que valem visita e estudo:

http://www.diveintopython.net/

http://www.pythonchallenge.com/index.php

http://www.lightbird.net/py-by-example/index.html

Tutoriais Avançados

. Geradores (Generators)

. Interpretação de Listas (List Comprehensions)

. Funções de Múltiplos Argumentos (Multiple Function Arguments)

. Expressões Regulares (Regular Expressions)

. Gerenciando Excessões (Exception Handling)

. Conjuntos (Sets)

. Serialização (Serialization)

. Funções Parciais (Partial functions)

. Introspecção de Código (Code Introspection)

. Decoradores (Decorators)

Geradores (Generators)

Geradores são muito fáceis de implementar, mas um tanto quanto difíceis de seentender.

Geradores são usados para criar iteradores (iterators), mas com uma abordagemdiferente. Geradores são funções simples que retornam um conjunto de itens iterativos,um de cada vez, de uma forma especial.

Quando uma iteração sobre um conjunto de itens é iniciada usando o comando“for”, o gerador é executado. Quando o código da função do gerador encontra o comando“yield”, o gerador entrega sua execução de volta para o laço “for”, retornando um novovalor do conjunto. A função gerador pode gerar tantos valores (possivelmente infinitos)quantos quiser, entregando cada um deles na sua vez.

Veja um exmplo simples de uma função geradora que retorna 7 números inteirosrandômicos:

>>>import random>>>def lotery():. . . # returns 6 numbers between 1 and 40

Prof. Ms. Carlos E F ROLAND ([email protected])2014

Centro Universitário de Franca UNI-FacefEngenharia Civil – Introdução à Programação e Uso de Bancos de Dados

Page 50: Guia Introdutório para programação em Python

. . . for i in xrange(6):

. . . yield random.randint(1, 40)

. . . # returns a 7th number between 1 and 15

. . . yield random.randint(1,15)

>>>for random_number in lottery():. . . print “And the next number is... %d!” % random_number

Esta função decide como gerar os números aleatórios por si mesma, e executa oscomandos “yield” um a cada vez, pausando entre a execução do “yield” e a volta ao laço“for” principal.

Exercicios 19

Escreva uma função geradora que retorne a série de Fibonacci. Os valores sãocalculados usando a seguinte fórmula: os primeiros dois números da série são sempreiguais a 1, e cada número consecutivo retornado é a soma dos dois últimos números.Dica: você pode usar só duas variáveis na função geradora? Lembre-se que atribuiçõespodem ser feitas simultaneamente. Este código

>>>a = 1>>>b = 2>>>a, b = b, a

trocará os valores de a e b simultaneamente!

Continue o exercício a partir do código seguinte:

# fill in this functiondef fib(): pass #this is a null statement which does nothing when executed, useful as a placeholder.

# testing codeimport typesif type(fib()) == types.GeneratorType: print "Good, The fib function is a generator."

counter = 0 for n in fib(): print n counter += 1 if counter == 10: break

Solução:

# fill in this functiondef fib(): a, b = 1, 1

Prof. Ms. Carlos E F ROLAND ([email protected])2014

Centro Universitário de Franca UNI-FacefEngenharia Civil – Introdução à Programação e Uso de Bancos de Dados

Page 51: Guia Introdutório para programação em Python

while 1: yield a a, b = b, a + b

# testing codeimport typesif type(fib()) == types.GeneratorType: print "Good, The fib function is a generator."

counter = 0 for n in fib(): print n counter += 1 if counter == 10: break

Prof. Ms. Carlos E F ROLAND ([email protected])2014

Centro Universitário de Franca UNI-FacefEngenharia Civil – Introdução à Programação e Uso de Bancos de Dados