Vous êtes sur la page 1sur 51

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

Bem Vindo

Este

tutorial

é

uma

tradução

do

original

disponível

em

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.

Neste

site

você,

além

de

aprender

a

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 (roland@facef.br)

um bom programador, comece desde já a organizar suas coisas. Crie Prof. Ms. Carlos E F

2014

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

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

Muito bem, dadas as dicas iniciais, este tutorial é dirigido a qualquer um que queira aprender a linguagem de programação Python. O site original oferece um grupo no Facebook 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 tutorial farei a tradução dos Fundamentos da linguagem e te convido a continuar com os temas avançados lá no site em inglês. Olha só com sou camarada: além de te dar uma mã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 a

seguir, execute o Prompt de Comando do Windows de mude para a pasta criada para seus 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,

Faça este exercício! Use intensamente a pesquisa no

Dr. Google para, inclusive, melhorar sua performance de procura de solução para problemas. No site How To Think Like a Computer Scientist (http://interactivepython.org/runestone/static/thinkcspy/toc.html) é dito que:

muita coisa você terá que buscar

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

Prof. Ms. Carlos E F ROLAND (roland@facef.br)

para praticar as habilidades de resolver problemas.” Prof. Ms. Carlos E F ROLAND ( roland@facef.br )

2014

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

(vá lá dar uma olhada também programar com Python).

. Alô, Mundo

é outra fonte incrível de conteúdo para se aprender a

Python é uma linguagem muito simples, e tem uma sintaxe muito direta. Ela encoraja programadores a programar sem o uso de códigos pré-criados. A diretiva (comando) mais simples do Python é “print” - ela simplesmente escreve uma linha no dispositivo 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 para programação de computadores. Para executar o interpretador Python na console execute o comando “python”. Por exemplo:

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, como na 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 Again Eu 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 (roland@facef.br)

digite “exit()” e tecle <ENTER>. Indentação Prof. Ms. Carlos E F ROLAND ( roland@facef.br ) 2014

2014

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

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 a indentação padrão requer que o código padrão Python use 4 (quatro) espaços. Por exemplo:

x

if

= 1 x == 1:

# indented four spaces print “ x is 1.”

Obs: no ambiente trabalhado anteriormente (mikroBasic), não havia necessidade de se usar indentação, mas em Python ela é obrigatória. Se não usar, muita coisa não vai

funcionar!!! CUIDADO

Preste atenção!

Variáveis e Tipos

Python é completamente orientada a objetos, e não “estaticamente tipada” (dê uma buscada 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 é um objeto.

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 explicados aqui).

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 aspas duplas:

>>>mystring = 'Hello'

Prof. Ms. Carlos E F ROLAND (roland@facef.br)

quanto com aspas duplas: >>>mystring = 'Hello' Prof. Ms. Carlos E F ROLAND ( roland@facef.br )

2014

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

>>>mystring = “Hello”

A diferença entre as duas é que usando aspas duplas torna fácil a inclusão de apóstrofos (enquanto este iria fechar a cadeia se tivesse sido usada aspa simples para abrir). 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 a

inclusão de coisas como mudanças de linhas (return), barras contrárias (\) e caracteres

Unicode (procure mais sobre estes termos

Estes recursos estão fora do escopo deste

tutorial, mas são cobertos na Documentação do Python (aqui:

).

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” numa mesma 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 o interpretador 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 (roland@facef.br)

ele (até o final da linha) será desconsiderado como código. Prof. Ms. Carlos E F ROLAND

2014

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

Exercícios 2

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

Obs: a partir deste ponto no tutorial, insira o código dos exercícios em arquivos (usando o editor que você escolheu) e salve na sua pasta de estudos com a extensão “.py”, por exemplo: exerc2.py. Então execute o script (outro nome muito usado para designar um conjunto 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 foram

realizadas e como foram apresentados os resultados do processamento.

Listas

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

Prof. Ms. Carlos E F ROLAND (roland@facef.br)

muito simples. Segue um exemplo de como se criar uma lista. Prof. Ms. Carlos E F

2014

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

>>>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 corretas usando 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 na lista, e preencher a variável second_name com o segundo nome da lista names usando o

operador colchetes “[ ]”. Note que o índice de listas é base-zero (0,1,2,3,4, você quiser acessar o segundo item da lista, o índice é 1.

então se

),

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 (roland@facef.br)

pode-se criar listas, primeiro criando uma lista vazia Prof. Ms. Carlos E F ROLAND ( roland@facef.br

2014

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

>>>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 dos operadores?

Outro operador disponível é o módulo (%), que retorna o resto da divisão inteira do dividendo 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 (roland@facef.br)

(+) e subtração (-) Usando Operadores com Cadeias (Strings) Prof. Ms. Carlos E F ROLAND (

2014

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

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 com uma 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 com uma 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ém 10 instâncias das variáveis x e y, respectivamente. É pedido também que você crie uma lista chamada big_list, que contém as variáveis x e y, 10 vezes cada, pela concatenação das 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

usando lápis e papel, calcule o resultado da expressão abaixo. Em

seguida, execute a mesma expressão no interpretador Python. O resultado foi o mesmo? Explique porque.

Indo além

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

Formatando Cadeias

Prof. Ms. Carlos E F ROLAND (roland@facef.br)

Indo além 10 % 3 * 10 ** 2 + 1 – 10 * 4 /

2014

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

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

Digamos que você tenha uma variável chamada “name” com seu nome de usuário nela, 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 (entre parê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 de dí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 a seguinte sintaxe: Hello John Doe. Your current balance is 53.44$

Prof. Ms. Carlos E F ROLAND (roland@facef.br)

a seguinte sintaxe: Hello John Doe. Your current balance is 53.44$ Prof. Ms. Carlos E F

2014

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

escreva os comandos para se calcular o aumento (percentual) do seu

salário ou mesada. Crie as variáveis necessárias (salario e aumento) atribua valores a elas e em seguida imprima o resultado com a seguinte sintaxe:

Indo além

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 coisa entre aspas:

>>>astring = “Hello world!”

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

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

>>>print len(astring)

Este comando resultou na apresentação de 12, porque “Hello world!” é uma string que 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 da string? Para tornar isso mais simples, Python (e a maioria das outras linguagens de programaçã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

Prof. Ms. Carlos E F ROLAND (roland@facef.br)

Este método

aquela é a letra L minúscula, não o número 1 Prof. Ms. Carlos E F ROLAND

2014

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

(.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 de programação fazem isso – tornando a realização de cálculos matemáticos dentro dos colchetes 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) que ocupa a posição do índice. Se tirar o primeiro número mantendo os “:” e o segundo número, receberá como resultado uma faixa começando no primeiro carácter com a quantidade 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 terminando no final da string.

Você pode até usar números negativos dentro dos colchetes. Eles facilitam percorrer 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 caixa alta (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()) com alguma coisa ou termina (.endswith()) com alguma coisa, respectivamente. O primeiro exemplo 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 uma lista. Como no exemplo foi especificado o espaço (“ “) como referência para a quebra, o primeiro 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 (roland@facef.br)

a string . s = "Hey there! what should this string be?" Prof. Ms. Carlos E

2014

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

# Length should be 20

print "Length of s = %d" % len(s)

# First occurrence of "a" should be at index 8

print "The first occurrence of the letter a = %d" % s.index("a")

# Number of a's should be 2

print "a occurs %d times" % s.count("a")

# Slicing the string into bits

print "The first five characters are '%s'" % s[:5] # Start to 5 print "The next five characters are '%s'" % s[5:10] # 5 to 10 print "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 uppercase

print "String in uppercase: %s" % s.upper()

# Convert everything to lowercase

print "String in lowercase: %s" % s.lower()

# Check how a string starts

if s.startswith("Str"):

print "String starts with 'Str'. Good!"

# Check how a string ends

if s.endswith("ome!"):

print "String ends with 'ome!'. Good!"

# Split the string into three separate strings,

# each containing only a word

print "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 os comandos mais básicos do Python, bem como algumas operações aritméticas. Você não aprenderá as teorias complexas que os acadêmicos adoram estudar mas apenas a lógica básica simples que faz com que programas reais funcionem, e que programadores reais precisam todos os dias.

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

Prof. Ms. Carlos E F ROLAND (roland@facef.br)

por uma semana inteira. Não vacile. Mesmo que você esteja com a Prof. Ms. Carlos E

2014

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

cabeça cheia, continue o exercício. Ele apresenta um conjunto de tabelas lógicas que você deve memorizar para tornar a realização dos exercícios seguintes mais fácil. É bom avisar 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 destes conceitos serão excitantes a medida que você os domina. Você vai travar uma batalha contra eles e então de repente você irá entendê-los. Todo o trabalho de memorização do básico, você verá, vai ter valido a pena.

Te dou uma dica de como memorizar algo sem ficar maluco: estude por um pequeno intervalo de tempo, várias vezes ao dia e anote suas dificuldades. Não tente estudar 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 lado da folha e as colunas da direita no verso. Você deve então ser capaz de, vendo as combinaçõ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 editor de 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 se alguma coisa é “True” ou “False”. Lógica em computadores tem tudo a ver com descobror se alguma combinação destes caracteres e algumas variáveis é “True” em alguma parte em 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ê precisa memorizar:

Prof. Ms. Carlos E F ROLAND (roland@facef.br)

usados para fazer as tabelas verdade que você precisa memorizar: Prof. Ms. Carlos E F ROLAND

2014

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

 

NOT

True?

 

Not False

True

Not True

False

OR

True?

NOT AND

True?

True or False

True

Not (True and False)

True

True or True

True

Not (True and True)

False

False or True

True

Not (False and True)

True

False or False

False

Not (False and False)

True

AND

True?

!=

True?

True and False

False

1

!= 0

True

True and True

True

1

!= 1

False

False and True

False

0

!= 1

True

False and False

False

0

!= 0

False

NOT OR

True?

==

True?

Not (True or False)

False

1

== 0

False

Not (True or True)

False

1

== 1

True

Not (False or True)

False

0

== 1

False

Not (False or False)

True

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 a mais

Praticando Lógica

As combinações lógicas vistas acima são chamadas expressões lógicas booleanas. Lógica booleana está e todo lugar em programação. São parte fundamental da computaçã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 vai testá-los em Python. Pegue cada um dos exercícios, escreva qual a resposta para cada um deles. Em cada caso, será “True” ou “False”. Assim que tiver as respostas, abra o

Prof. Ms. Carlos E F ROLAND (roland@facef.br)

“True” ou “False”. Assim que tiver as respostas, abra o Prof. Ms. Carlos E F ROLAND

2014

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

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 (roland@facef.br)

!= "test" or "Python" == "Python") Prof. Ms. Carlos E F ROLAND ( roland@facef.br ) 2014

2014

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

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 se preocupe 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. Por exemplo:

>>>x = 2 >>>print x == 2 >>>print x == 3 >>>print x < 3

# imprime True # imprime False # 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ões booleanas 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 (roland@facef.br)

== 23: . print “Your name is John, and you are 23 years old.” Prof. Ms.

2014

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

>>>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 um container 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 de código:

if <statement is true>:

<do something>

elif <another statement is true>:

<do something else>

# same as else if

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 comando condicional “else”.

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

Prof. Ms. Carlos E F ROLAND (roland@facef.br)

aritmética. 2. Um objeto considerado não vazio for passado. Prof. Ms. Carlos E F ROLAND (

2014

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

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ão compara os valores das variáveis, mas suas instâncias propriamente ditas. Por exemplo:

>>>x = [1,2,3] >>>y = [1,2,3] >>>print x == y >>>print x is y

O Operador “not”

# imprime True # imprimr False

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

>>>print not False

>>>print (not False) == (False)

# imprime True

# imprime False

Exercícios 7

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

True.

# change this code number = 10 second_number = 10 first_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 (roland@facef.br)

and first_array[0] == 1: print "5" if not second_number: Prof. Ms. Carlos E F ROLAND (

2014

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

print "6"

Indo além

resolva as sentenças e depois teste com Python:

people = 20 cats = 30 dogs = 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 menos digitação. Este é conhecido como o operador “incremento de”. O mesmo vale para -= e vá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 (roland@facef.br)

Os laços “for” iteram sobre uma dada sequência. Por exemplo: Prof. Ms. Carlos E F ROLAND

2014

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

>>>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 for verdadeira. 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” é usado para 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 (roland@facef.br)

1 . . . if count >= 5: . . . break Prof. Ms. Carlos E

2014

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

>>># 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 na mesma ordem que são recebidos. Não imprima quaisquer números que vierem depois de 237 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 list for number in the_count:

print "This is count %d" % number

# same as above

for 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 it for i in change:

print "I got %r" % i

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

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

Prof. Ms. Carlos E F ROLAND (roland@facef.br)

elements = [] # then use the range function to do 0 to 5 counts Prof.

2014

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

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 too for i in elements:

print "Element was: %d" % i

e:

i = 0 numbers = []

while i < 6:

print "At the top i is %d" % i numbers.append(i)

i

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

=

i

+ 1

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 que

não são lá muito excitantes

processamento. Isso é um pouco complicado, porque você tem que aprender a fazer duas coisas que podem não fazer sentido imediatamente, mas acredite e toque em frente. Fará sentido daqui a pouco.

O que se quer, agora é obter dados externos para

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 do usuário. Então veja como é possível se fazer isso:

print "How old are you?",

Prof. Ms. Carlos E F ROLAND (roland@facef.br)

é possível se fazer isso: print "How old are you?" , Prof. Ms. Carlos E F

2014

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

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 é para que o comando não mude de linha para receber a entrada.

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

Refatorando o Código

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

Quer ver como o exercício anterior pode ser melhorado usando recursos do mé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 seu exercí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 usado para passar variáveis para um script. Você já deve estar executando seus programas a partir do comando “python seu_prog.py”. Muito bem, o termo “seu_prog.py” na linha de comando é chamado “argumento” (ou parâmetro). Agora vamos escrever um script que també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 (roland@facef.br)

sys import argv script , first , second , third = argv Prof. Ms. Carlos E

2014

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

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

Na primeira linha temos o comando “import”. É desta forma que se adiciona recursos aos seus scripts Python. Diz-se que Python é uma linguagem com as “baterias incluídas” como referência aos brinquedos eletrônicos que não costumam ser vendidos com as baterias e são uma tremenda fonte de frustrações à maioria das crianças que os ganham! 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 o desenvolvedor 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 em várias linguagens. Esta variável recebe os argumentos passados para o script Python executado. Você verá como funciona nos exemplos a seguir.

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

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

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

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

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

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

from sys import argv

script, user_name = argv prompt = '> '

Prof. Ms. Carlos E F ROLAND (roland@facef.br)

argv script , user_name = argv prompt = '> ' Prof. Ms. Carlos E F ROLAND

2014

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

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_name likes = raw_input(prompt)

print "Where do you live %s?" % user_name lives = 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 se deseja 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 use-o no script.

e

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

Lendo Arquivos

O que foi estudado sobre raw_input e argv vai permitir começar a ler arquivos de dados. Você precisa ir fundo neste exercício para entender o que vai acontecer, e vai ter que executá-lo muitas vezes, portanto tenha algum cuidado antes de executar e sempre verifique o que você fez, porque trabalhar com arquivos é uma forma MUITO fácil de se apagar 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, mas um 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 (roland@facef.br)

é: This is stuff I typed into a file. It is really cool stuff. Prof. Ms.

2014

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

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 de estudo.

O que se quer fazer é “abrir” (“open”) este arquivo pelo script, ler e imprimir seu conteúdo. Entretanto, não é para se engessar o script definindo no seu código fonte o nome do arquivo a ser usado. Ou seja, deve-se pedir que o usuário informe o nome do arquivo a ser aberto, para inclusive poder usar o mesmo script com outros arquivos de texto. 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:" % filename print 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 velhas

conhecidas

comando 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 o que descobre. Aqui o arquivo cujo nome foi informado como argumento do script foi aberto e atribuído a uma variável chamada “txt”.

Na linha seguinte foi usado um novo comando “open”. Pesquise o que este

Na linha seguinte foi impresso uma mensagem seguida do nome do arquivo recebido, mas na linha de baixo, algo novo e muito legal foi feito. Foi chamado um método do objeto “txt” (o arquivo obtido do comando “open”). Métodos são executados associando-os ao nome do objeto com um ponto (“.”), como no caso: txt.read(). O que isso 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âmetros como já foi visto com o open e o raw_input.

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

Prof. Ms. Carlos E F ROLAND (roland@facef.br)

vale a pena. Invista um tempo fazendo as seguintes atividades: Prof. Ms. Carlos E F ROLAND

2014

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

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ão

se preocupe se as coisas ficarem pior. No início é assim mesmo, mas insista!

4.

Elimine as linhas a partir da 6 a e teste o script de novo.

5.

Use somente raw_input e faça novo teste. Pense sobre porque uma forma de se obter

o

nome do arquivo é melhor do que outra. Execute o “pydoc file” e role até encontrar o método “read()”. Veja todos os outros que ”

(dois sublinhados) na frente

6.

podem ser usados. Desconsidere aqueles que tenham “

do nome. Tente outras opções de comando.

7.

Abra a console do Python e execute o método “open”. Veja como se pode abrir arquivos

e

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. Refrescando

a

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 requerem parâmetros, mas isso nem tem tanta importância agora. Só é preciso lembrar que o mé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." % filename print "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 (roland@facef.br)

'w' ) " print "Truncating the file. Goodbye!" Prof. Ms. Carlos E F ROLAND ( roland@facef.br

2014

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

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()

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.

Este é um script longo (exerc13.py)! O maior até agora

Mais atividades complementares:

1. Se você estiver confuso, volte e use o truque do comentário no código para arejar sua

cabeç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”, e caracteres 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: open

tenta ser seguro fazendo com que o programador explicite que ele quer escrever em um

arquivo.

5. Se o arquivo foi aberto com o argumento 'w', então é realmente necessário executar o

target.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 Python para copiar um arquivo para outro. É bem rápido, mas vai te dar algumas ideias sobre outras coisas que podem ser feitas com arquivos.

Prof. Ms. Carlos E F ROLAND (roland@facef.br)

ideias sobre outras coisas que podem ser feitas com arquivos. Prof. Ms. Carlos E F ROLAND

2014

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

from sys import argv from 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 se uma arquivo existe, retornando “True” caso verdade, com base na string passada como argumento. Ele retorna “False” se o arquivo não existir.

Crie o script (exerc14.py) e um outro arquivo “test.txt” com qualquer texto e execute com 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 os argumentos. 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 e mostrando um monte de mensagens. Tente torná-lo mais amigável removendo os excessos.

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 (roland@facef.br)

porque é necessário fazer o output.close() no script . Prof. Ms. Carlos E F ROLAND (

2014

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

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 partes economizando algum tempo de desenvolvimento. Funções também são uma tremenda sacada para definir interfaces de tal forma que programadores possam compartilhar seus có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 “block head” é 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 nome da 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 que as 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 a keyword “return”. Por exemplo:

Prof. Ms. Carlos E F ROLAND (roland@facef.br)

que as chamou, usando a keyword “return”. Por exemplo: Prof. Ms. Carlos E F ROLAND (

2014

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

>>>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 quaisquer argumentos requeridos dentro dos parênteses. Por exemplo, para chamar as funções acima:

>>># 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 para criar 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”, “Allowing programmers to share and connect code together”

2. Adicione uma função chamada build_sentence(info) que recebe um argumento único

contendo uma string e retorna a sentença iniciando com a dada string e terminando com a

string “ 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 above

def 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 (roland@facef.br)

= list_benefits() for benefit in list_of_benefits: Prof. Ms. Carlos E F ROLAND ( roland@facef.br ) 2014

2014

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

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 ter

sua 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.

next = raw_input("> ") if "0" in next or "1" in next:

how_much = int(next) else:

How much do you take?"

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 (roland@facef.br)

() else : print "I got no idea what that means." Prof. Ms. Carlos E F

2014

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

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 um modelo para se criar objetos.

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

>>>class MyClass:

.

variable = “blah”

.

.

Prof. Ms. Carlos E F ROLAND (roland@facef.br)

>>>class MyClass: . variable = “blah” . . Prof. Ms. Carlos E F ROLAND ( roland@facef.br

2014

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

.

.

.

# 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 ser feita 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 a variá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 seria impressa a string “blah”:

>>>print myobjectx.variable

Você pode criar múltiplos objetos diferentes que são da mesma classe (têm a mesmas variáveis e funções definidas). Entretanto, cada objeto contém cópias independentes das variáveis definidas na classe. Por exemplo, se definirmos outro objeto com 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 >>>print myobjecty.variable

# this would print “blah” # 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 (roland@facef.br)

imprimir a mensagem: “This is a message inside the class.” Prof. Ms. Carlos E F ROLAND

2014

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

Exercícios 16

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

# define the Vehicle class

class 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 code

print car1.description() print car2.description()

Dicionários

Um dicionário é um tipo de dado similar aos vetores, mas opera com chaves e valores em vez de índices. Cada valor armazenado em um dicionário pode ser acessado usando 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

ser

armazenados 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 com a 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 (roland@facef.br)

ser iterados da mesma forma que listas. Entretanto um dicionário, Prof. Ms. Carlos E F ROLAND

2014

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

ao contrário de uma lista, não mantém a ordem dos valores armazenada neles. Para iterar sobre 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 Jill da agenda.

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

}

#

write your code here

#

testing code

if "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 implementam um conjunto de funções. Módulos são importados de outros módulos usando o comando import.

Pesquise

a

lista

completa de

módulos

da

biblioteca padrão do Python em

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

Prof. Ms. Carlos E F ROLAND (roland@facef.br)

um módulo é carregado em um script Python, ele é inicializado Prof. Ms. Carlos E F

2014

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

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

Se quisermos importar o módulo urllib, que habilita a leitura de dados de URLs, nós simplesmente 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 explora módulos em Python – as funções “dir” e a “help”. Pode-se procurar quais funções são implementadas 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 mais sobre 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 usando o 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ão simples diretórios, mas com uma alteração.

Cada pacote em Python é um diretório que TEM QUE conter uma arquivo especial

chamado “

pacote Python, de tal forma que ele pode ser importado da mesma maneira que um módulo é importado.

Este arquivo pode ser vazio, e indica que o diretório contém um

init

py”.

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

Prof. Ms. Carlos E F ROLAND (roland@facef.br)

diretório chamado “foo”, que marca o nome do pacote, então Prof. Ms. Carlos E F ROLAND

2014

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

podemos criar um módulo dentro daquele pacote chamado “bar”. Não se pode esquecer

de 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 o módulo “bar”. No segundo método, não é necessário, porque o módulo foi importado para o namespace do módulo.

pode também decidir quais módulos o pacote exporta como

a API, enquanto mantém outros módulos internos, pela sobreposição da variável

O arquivo “

”,

init

py”

all

da seguinte forma:

init

all

py:

= [“bar”]

Exercícios 18

Neste exercício, você terá que imprimir uma lista ordenada alfabeticamente, de todas 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 here find_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 (roland@facef.br)

(avaliação) 1. Converter valores entre bases numéricas. Prof. Ms. Carlos E F ROLAND ( roland@facef.br )

2014

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

De

Para

 

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 da conversão. Procure escrever o algoritmo de conversão em vez de usar funções prontas do 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 dados fornecidos 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álido ou não.

Mais exemplos de programas simples:

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 (roland@facef.br)

'michael'] for i, name in enumerate(friends): Prof. Ms. Carlos E F ROLAND ( roland@facef.br ) 2014

2014

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

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 (roland@facef.br)

% grocery_bill 8 lines: Command line arguments, exception handling Prof. Ms. Carlos E F ROLAND (

2014

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

# 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

print '

' + line.rstrip()

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 (roland@facef.br)

if hour < activity_time: print activities[activity_time] Prof. Ms. Carlos E F ROLAND ( roland@facef.br ) 2014

2014

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

else:

break

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

self.balance = initial_balance def deposit(self, amount):

self.balance += amount def withdraw(self, amount):

self.balance -= amount def overdrawn(self):

init (self,

initial_balance=0):

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 (roland@facef.br)

copy = sorted(pool) size = len(copy) if size % 2 == 1: Prof. Ms. Carlos E

2014

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

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 import doctest doctest.testmod()

== '

main

':

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 (roland@facef.br)

or don't. for has_chars, frags in groupby(lines, bool): Prof. Ms. Carlos E F ROLAND ( roland@facef.br

2014

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

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 (roland@facef.br)

in (left, col, right): return True return False def solve(n): Prof. Ms. Carlos E F ROLAND

2014

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

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

numbers = itertools.ifilter(prime

slightly

tricky, but ponder it a bit

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 (roland@facef.br)

Prof. Ms. Carlos E F ROLAND ( roland@facef.br ) 2014

2014

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

<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 (roland@facef.br)

if len(test_queens) == BOARD_SIZE: return test_queens Prof. Ms. Carlos E F ROLAND ( roland@facef.br ) 2014

2014

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

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 (roland@facef.br)

guessed my number in {1} guesses!'.format(name, guesses_made) Prof. Ms. Carlos E F ROLAND ( roland@facef.br )

2014

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

else:

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

Outros sites sobre Python que valem visita e estudo:

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 se

entender.

Geradores são usados para criar iteradores (iterators), mas com uma abordagem diferente. 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 novo valor 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 inteiros randômicos:

>>>import random >>>def lotery():

.

# returns 6 numbers between 1 and 40

.

.