Explorar E-books
Categorias
Explorar Audiolivros
Categorias
Explorar Revistas
Categorias
Explorar Documentos
Categorias
net 1
Strings em Python
www.python.org
Vimos, também, que podemos usar uma entrada de dados de ponto flutuante, a partir
da função float(), que converte de string, ou de inteiro, para float, como indicado
abaixo.
2
Strings em Python
www.python.org
As variáveis, para as quais foram atribuídas strings, podem ser mostradas na tela
com a função print(), como no exemplo a seguir.
Podemos usar a função print() para mostrar resultados compostos na tela, onde
strings, inteiros, floats e sequências de escape aparecem numa única linha, o código
a seguir, showStrings1.py, ilustra a situação.
4
Strings em Python
www.python.org
Veja, ainda, que as vírgulas inseridas entre aspas são caracteres de uma string, por
isso são mostradas na tela.
5
Strings em Python
www.python.org
7
Strings em Python
www.python.org
Como vimos, há diversos tipos de valores que podem ser usados como argumentos
das funções internas da linguagem Python. Contudo, a maioria das funções, aplica-se
a um tipo específico de dados, por exemplo, às strings. Tais recursos da linguagem
Python, específicos para um tipo de dado, são chamados de métodos. A
chamada de um método em Python, ocorre de forma similar às funções, exceto que o
primeiro argumento aparece antes do nome do método, seguido por um ponto (.).
Esta forma de chamar um método é denominada de notação dot. Vejamos, como
exemplo, o método .count(), que retorna o número de vezes que uma dada string,
fornecida como argumento, aparece na string, myString.
myString.count(“I”)
Argumento do método
Método aplicado à string do lado esquerdo
myString = input("Type a string => ") # Reads a string and assigns it to variable myString
# .count("I") method to count the number of times its argument appears in the string
countI = myString.count("I")
print("I appears ",countI, "time(s)") # Shows results
9
Concatenação de trechos de DNA
www.python.org
Adenina = A
Guanina = G
Citosina = C
Timina = T 10
Concatenação de trechos de DNA
www.python.org
print("DNA sequences")
print("Sequence 1: ",seq1)
print("Sequence 2: ",seq2)
print("DNA sequences")
print("Sequence 1: ",seq1)
print("Sequence 2: ",seq2)
O código abaixo está com indicação dos números de linhas, para facilitar a explicação.
Quando formos digitar o programa, não inserimos os números das linhas. A linha 1
apresenta comentários. As linhas 2 e 3 trazem as variáveis (seq1 e seq2), que serão
usadas para strings, ou seja, letras, números, símbolos etc.
As aspas duplas “”, para a sequência de DNA, indicam que o conteúdo entre aspas é
a string a ser atribuída a uma variável. A linha 4 está em branco, tais inserções são
usadas para facilitar a leitura do programa por humanos, não são consideradas pelo
interpretador Python.
DNA sequences
Sequence 1: CGATATCGAATTCCGGAT
Sequence 2: AAAAAAAAAATTTTTTCG
18
Concatenação de trechos de DNA
www.python.org
14seq3 = ‘-'.join([seq1,seq2])
19
Concatenação de trechos de DNA
www.python.org
20
Complemento reverso do DNA
www.python.org
O5’
22
Complemento reverso do DNA
www.python.org
Abaixo temos a montagem da fita dupla do DNA, com uma fita servindo de molde para
a montagem do complemento reverso. Essa reação é catalisada pela enzima DNA
polimerase.
23
Complemento reverso do DNA
www.python.org
Vamos ilustrar a transformação da informação codificada numa fita de DNA, para sua
complementar (complementar reverso). Usaremos um pequeno trecho de DNA com 12
nucleotídeos. A informação está armazenada num arquivo no formato FASTA, usado
para guardar informações sobre a estrutura primária de ácidos nucleicos e proteínas.
>DNA:A|PDBID|CHAIN|SEQUENCE Arquivo no formato FASTA com a sequência de nucleotídeos. A primeira linha inicia com
CGCGAATTCGCG o símbolo > e traz a identificação do sequência. As bases começam na segunda linha.
Complemento reverso
>DNA:B|PDBID|CHAIN|SEQUENCE
CGCGAATTCGCG Arquivo no formato FASTA com a sequência de nucleotídeos do complemento reverso,
o sentido de leitura é do terminal 5’ para o 3’, veja que a complementaridade dos pares
de bases ocorre da última base do arquivo original para a primeira base do arquivo do
complemento reverso e assim sucessivamente.
24
Complemento reverso do DNA
www.python.org
print("DNA sequence:\t\t",seqIn)
# First we change each base, using the uppercase/lowercase as a trick, in order to not apply
#.replace method to the same base
dna = seqIn.replace("A","t")
dna = dna.replace("T","a")
dna = dna.replace("C","g")
dna = dna.replace("G","c")
# Changes to a list
DNAlist = list(DNA)
# Inverts list
DNAlist.reverse()
print("DNA sequence:\t\t",seqIn)
# First we change each base, using the uppercase/lowercase as a trick, in order to not apply
#.replace method to the same base
dna = seqIn.replace("A","t")
dna = dna.replace("T","a")
dna = dna.replace("C","g")
dna = dna.replace("G","c")
# Changes to a list
DNAlist = list(DNA)
# Inverts list
DNAlist.reverse()
print("DNA sequence:\t\t",seqIn)
# First we change each base, using the uppercase/lowercase as a trick, in order to not apply
#.replace method to the same base
dna = seqIn.replace("A","t")
dna = dna.replace("T","a")
dna = dna.replace("C","g")
dna = dna.replace("G","c")
# Changes to a list
DNAlist = list(DNA)
# Inverts list
DNAlist.reverse()
dna = seqIn.replace("A","t")
dna = dna.replace("T","a")
dna = dna.replace("C","g")
dna = dna.replace("G","c")
Base Base
A t
T a
C g
G c 28
Complemento reverso do DNA
www.python.org
Para voltarmos a ter uma string com letras maiúsculas, usamos o método .upper(). Na
implementação abaixo, atribuímos a string com letras maiúsculas à variável DNA.
print("DNA sequence:\t\t",seqIn)
# First we change each base, using the uppercase/lowercase as a trick, in order to not apply
#.replace method to the same base
dna = seqIn.replace("A","t")
dna = dna.replace("T","a")
dna = dna.replace("C","g")
dna = dna.replace("G","c")
# Changes to a list
DNAlist = list(DNA)
# Inverts list
DNAlist.reverse()
Agora convertemos a string atribuída à variável DNA em uma lista, como o método list.
Uma lista apresenta dados, strings ou números, com índices, ou seja, podemos
acessar cada elemento da lista chamando especificamente a posição da lista, no caso
abaixo a string é decomposta e cada letra agora é um elemento da lista.
# Program to generate reverse complement for a DNA sequence
seqIn = "ATGCGCGAATTCGCGGAAGCGGCGTTAGCTCGCCGCGCAGGG"
print("DNA sequence:\t\t",seqIn)
# First we change each base, using the uppercase/lowercase as a trick, in order to not apply
#.replace method to the same base
dna = seqIn.replace("A","t")
dna = dna.replace("T","a")
dna = dna.replace("C","g")
dna = dna.replace("G","c")
# Changes to a list
DNAlist = list(DNA)
# Inverts list
DNAlist.reverse()
Uma lista tem a vantagem de apresentar a informação de forma indexada, cada trecho
da informação é chamado elemento da lista. Por exemplo, podemos criar uma lista
com os 10 primeiros elementos da sequência de Fibonacci, como indicado abaixo.
my_list = [1,1,2,3,5,8,13,21,34,55]
my_list[0] my_list[1] my_list[2] my_list[3] my_list[4] my_list[5] my_list[6] my_list[7] my_list[8] my_list[9]
my_list 1 1 2 3 5 8 13 21 34 55
31
Complemento reverso do DNA
www.python.org
O trecho de código abaixo cria a lista my_list e imprime o elemento 7 da lista, ou seja,
o oitavo elemento da lista.
my_list = [1,1,2,3,5,8,13,21,34,55]
print(my_list[7])
O resultado das linhas de código acima, cria a lista, e imprime o elemento “7” da lista,
indicado no diagrama abaixo.
my_list[0] my_list[1] my_list[2] my_list[3] my_list[4] my_list[5] my_list[6] my_list[7] my_list[8] my_list[9]
my_list 1 1 2 3 5 8 13 21 34 55
32
Complemento reverso do DNA
www.python.org
A partir da lista podemos usar métodos para sua manipulação, como o método
reverse, que inverte a sequência dos elementos originais. Os métodos para
manipulação de listas, como o .reverse(), são chamados usando-se a notação dot (.),
onde o ponto (.) é colocado após a lista, o resultado é que a lista é invertida.
# Program to generate reverse complement for a DNA sequence
seqIn = "ATGCGCGAATTCGCGGAAGCGGCGTTAGCTCGCCGCGCAGGG"
print("DNA sequence:\t\t",seqIn)
# First we change each base, using the uppercase/lowercase as a trick, in order to not apply
#.replace method to the same base
dna = seqIn.replace("A","t")
dna = dna.replace("T","a")
dna = dna.replace("C","g")
dna = dna.replace("G","c")
# Changes to a list
DNAlist = list(DNA)
# Inverts list
DNAlist.reverse()
Podemos voltar a ter uma string, com o método join, que une os elementos da lista
numa string. Por último usamos o print() para mostrar os resultados.
print("DNA sequence:\t\t",seqIn)
# First we change each base, using the uppercase/lowercase as a trick, in order to not apply
#.replace method to the same base
dna = seqIn.replace("A","t")
dna = dna.replace("T","a")
dna = dna.replace("C","g")
dna = dna.replace("G","c")
# Changes to a list
DNAlist = list(DNA)
# Inverts list
DNAlist.reverse()
print("DNA sequence:\t\t",seqIn)
# First we change each base, using the uppercase/lowercase as a trick, in order to not apply
#.replace method to the same base
dna = seqIn.replace("A","t")
dna = dna.replace("T","a")
dna = dna.replace("C","g")
dna = dna.replace("G","c")
# Changes to a list
DNAlist = list(DNA)
# Inverts list
DNAlist.reverse()
36
Complemento reverso do DNA
www.python.org
my_info = open(my_file,’r’)
my_file é uma variável para a qual foi atribuída o nome do arquivo, a informação ‘r’, é
chamada de modo de acesso ao arquivo, no caso indica que será realizada uma
operação de leitura do conteúdo do arquivo my_file. A informação, contida no arquivo
de entrada, será referenciada à variável my_info. Resumindo, usaremos a variável
my_info para manipularmos o conteúdo lido do arquivo my_file. Por exemplo,
consideremos que a informação do nosso arquivo de entrada está contida numa linha
de texto, por exemplo a sequência de um DNA. Para lermos essa informação, usamos
o comando,
my_line = my_info.readline()
.readline() é um método que lerá uma linha da variável my_info e atribuirá à variável
my_line. O método .readline() é aplicado à variável my_info.
37
Complemento reverso do DNA
www.python.org
# Closes file
my_info.close()
# Closes file
my_info.close()
41
Complemento reverso do DNA
www.python.org
A abertura de um arquivo em Python usa a função open(), que tem como argumento o
nome do arquivo a ser aberto, ou uma variável com o nome. Assim, antes de abrirmos
o arquivo, o programa tem que perguntar o nome do arquivo. Abaixo temos o código
reverseCompDNA2.py .
# Program to generate reverse complement for a DNA sequence, using a sequence read from an input file
dnaFileIn = input("Enter DNA sequence file => ")
fh = open(dnaFileIn,'r') # Opens input file
seqIn = fh.readline() # Assigns file content to seqIn
fh.close() # Closes file
print("DNA sequence:\t\t",seqIn)
# First we change each base, using the uppercase/lowercase as a trick, in order to not apply .replace
# method to the same base
dna = seqIn.replace("A","t")
dna = dna.replace("T","a")
dna = dna.replace("C","g")
dna = dna.replace("G","c")
# Changes to a list
DNAlist = list(DNA)
# Inverts list
DNAlist.reverse()
# Program to generate reverse complement for a DNA sequence, using a sequence read from an input file
dnaFileIn = input("Enter DNA sequence file => ")
fh = open(dnaFileIn,'r') # Opens input file
seqIn = fh.readline() # Assigns file content to seqIn
fh.close() # Closes file
print("DNA sequence:\t\t",seqIn)
# First we change each base, using the uppercase/lowercase as a trick, in order to not apply .replace
# method to the same base
dna = seqIn.replace("A","t")
dna = dna.replace("T","a")
dna = dna.replace("C","g")
dna = dna.replace("G","c")
# Changes to a list
DNAlist = list(DNA)
# Inverts list
DNAlist.reverse()
No código abaixo, o filehandle é o fh, assim qualquer operação com o arquivo aberto,
deve ser realizada sobre o filehandle fh.
# Program to generate reverse complement for a DNA sequence, using a sequence read from an input file
dnaFileIn = input("Enter DNA sequence file => ")
fh = open(dnaFileIn,'r') # Opens input file
seqIn = fh.readline() # Assigns file content to seqIn
fh.close() # Closes file
print("DNA sequence:\t\t",seqIn)
# First we change each base, using the uppercase/lowercase as a trick, in order to not apply .replace
# method to the same base
dna = seqIn.replace("A","t")
dna = dna.replace("T","a")
dna = dna.replace("C","g")
dna = dna.replace("G","c")
# Changes to a list
DNAlist = list(DNA)
# Inverts list
DNAlist.reverse()
# Program to generate reverse complement for a DNA sequence, using a sequence read from an input file
dnaFileIn = input("Enter DNA sequence file => ")
fh = open(dnaFileIn,'r') # Opens input file
seqIn = fh.readline() # Assigns file content to seqIn
fh.close() # Closes file
print("DNA sequence:\t\t",seqIn)
# First we change each base, using the uppercase/lowercase as a trick, in order to not apply .replace
# method to the same base
dna = seqIn.replace("A","t")
dna = dna.replace("T","a")
dna = dna.replace("C","g")
dna = dna.replace("G","c")
# Changes to a list
DNAlist = list(DNA)
# Inverts list
DNAlist.reverse()
Depois fechamos o arquivo, com close(), a ser aplicado ao filehandle fh. O restante do
código é idêntico ao programa reverseCompDNA1.py, visto que já temos a sequência
de DNA na variável seqIn.
# Program to generate reverse complement for a DNA sequence, using a sequence read from an input file
dnaFileIn = input("Enter DNA sequence file => ")
fh = open(dnaFileIn,'r') # Opens input file
seqIn = fh.readline() # Assigns file content to seqIn
fh.close() # Closes file
print("DNA sequence:\t\t",seqIn)
# First we change each base, using the uppercase/lowercase as a trick, in order to not apply .replace
# method to the same base
dna = seqIn.replace("A","t")
dna = dna.replace("T","a")
dna = dna.replace("C","g")
dna = dna.replace("G","c")
# Changes to a list
DNAlist = list(DNA)
# Inverts list
DNAlist.reverse()
47
Complemento reverso do DNA
www.python.org
Vamos criar mais um aperfeiçoamento. Tal tarefa ilustra uma abordagem comum em
programação, criamos um protótipo e vamos aperfeiçoando. Vamos escrever o
complemento reverso num arquivo de saída. O código vai ficar mais extenso, de forma
que não caberá num slide. O novo programa chama-se reverseCompDNA3.py. Neste
programa lemos, também, o nome do arquivo de saída (primeira linha vermelha), que
será atribuído à variável dnaFileOut. O filehandle fw será usado para fazer referência
ao arquivo de saída, com o open(dnaFileOut,’w’) indicando que é um arquivo para
escrita. O ‘w’ é o parâmetro indicativo que será um arquivo para escrita.
# Program to generate reverse complement for a DNA sequence, using a sequence read from an input
# file.
# Reverse complement will be written in an output file
dnaFileIn = input("Enter DNA sequence file => ") # Reads input file name
dnaFileOut = input("Enter output file => ") # Reads output file name
# First we change each base, using the uppercase/lowercase as a trick, in order to not apply
# .replace method to the same base
dna = seqIn.replace("A","t")
dna = dna.replace("T","a")
dna = dna.replace("C","g") 48
dna = dna.replace("G","c")
Complemento reverso do DNA
www.python.org
49
Complemento reverso do DNA
www.python.org
50
Complemento reverso do DNA
www.python.org
CCCTGCGCGGCGAGCTAACGCCGCTTCCGCGAATTCGCGCAT
Temos agora os comandos básicos para ler arquivos existentes e criarmos novos
arquivos. Os procedimentos de manipulação de arquivos serão usados no curso para
leitura de arquivos com dados.
51
Método associados à manipulação de strings
www.python.org
Number of bases: 7
Position of substring A: 1
59
Método associados à manipulação de strings
www.python.org
# Program to handle strings, using string methods available in Python 3 (part 2).
seqIn = "GaTTaCa"
print("\nInitial sequence:\t\t",seqIn)
# s.swapcase() method to change from uppercase to lowercase and vice-versa in the string s
seqOut = seqIn.swapcase()
print("\nSwapped sequence:\t\t",seqOut)
# New initial sequence
seqIn = " GATTACA "
print("\nNew initial sequence:\t\t",seqIn)
# s.strip() method to get rid of spaces, tabs, and newlines in the string s
seqOut = seqIn.strip()
print("\nSequence without spaces:\t",seqOut)
# list(s) method to separate the string s in elements of a list
seqList = list(seqIn)
print("\nSequence as a list: \t\t",seqList)
# ''.join() method to merge all elements of a list in one string
seqIn = ''.join(seqIn)
print("\nThe sequence is back:\t\t",seqIn)
# s.split() method to separate the string s in words, where each word is an element
darthVader = "You don't know the power of the dark side"
c3po = darthVader.split()
print("\nOriginal message:\t\t",darthVader)
print("\nMessage after .split():\t\t",c3po)
# Applying ''.join() method after .split method
darthVader = ' '.join(c3po) # With ' '
print("\nMessage after ' '.join():\t\t",darthVader)
darthVader = '-'.join(c3po) # With '-' 61
print("\nMessage after '-'.join():\t\t",darthVader)
Método associados à manipulação de strings
www.python.org
O método list(s) transforma uma string numa lista, com vírgulas separando cada
caractere da string, inclusive espaços, tab e newlines existentes.
# Program to handle strings, using string methods available in Python 3 (part 2).
seqIn = "GaTTaCa"
print("\nInitial sequence:\t\t",seqIn)
# s.swapcase() method to change from uppercase to lowercase and vice-versa in the string s
seqOut = seqIn.swapcase()
print("\nSwapped sequence:\t\t",seqOut)
# New initial sequence
seqIn = " GATTACA "
print("\nNew initial sequence:\t\t",seqIn)
# s.strip() method to get rid of spaces, tabs, and newlines in the string s
seqOut = seqIn.strip()
print("\nSequence without spaces:\t",seqOut)
# list(s) method to separate the string s in elements of a list
seqList = list(seqIn)
print("\nSequence as a list: \t\t",seqList)
# ''.join() method to merge all elements of a list in one string
seqIn = ''.join(seqIn)
print("\nThe sequence is back:\t\t",seqIn)
# s.split() method to separate the string s in words, where each word is an element
darthVader = "You don't know the power of the dark side"
c3po = darthVader.split()
print("\nOriginal message:\t\t",darthVader)
print("\nMessage after .split():\t\t",c3po)
# Applying ''.join() method after .split method
darthVader = ' '.join(c3po) # With ' '
print("\nMessage after ' '.join():\t\t",darthVader)
darthVader = '-'.join(c3po) # With '-' 63
print("\nMessage after '-'.join():\t\t",darthVader)
Método associados à manipulação de strings
www.python.org
# Program to handle strings, using string methods available in Python 3 (part 2).
seqIn = "GaTTaCa"
print("\nInitial sequence:\t\t",seqIn)
# s.swapcase() method to change from uppercase to lowercase and vice-versa in the string s
seqOut = seqIn.swapcase()
print("\nSwapped sequence:\t\t",seqOut)
# New initial sequence
seqIn = " GATTACA "
print("\nNew initial sequence:\t\t",seqIn)
# s.strip() method to get rid of spaces, tabs, and newlines in the string s
seqOut = seqIn.strip()
print("\nSequence without spaces:\t",seqOut)
# list(s) method to separate the string s in elements of a list
seqList = list(seqIn)
print("\nSequence as a list: \t\t",seqList)
# ''.join() method to merge all elements of a list in one string
seqIn = ''.join(seqIn)
print("\nThe sequence is back:\t\t",seqIn)
# s.split() method to separate the string s in words, where each word is an element
darthVader = "You don't know the power of the dark side"
c3po = darthVader.split()
print("\nOriginal message:\t\t",darthVader)
print("\nMessage after .split():\t\t",c3po)
# Applying ''.join() method after .split method
darthVader = ' '.join(c3po) # With ' '
print("\nMessage after ' '.join():\t\t",darthVader)
darthVader = '-'.join(c3po) # With '-' 65
print("\nMessage after '-'.join():\t\t",darthVader)
Método associados à manipulação de strings
www.python.org
Sequence as a list: [' ', ' ', 'G', 'A', 'T', 'T', 'A', 'C', 'A', ' ']
Original message: You don't know the power of the dark side
Message after .split(): ['You', "don't", 'know', 'the', 'power', 'of', 'the',
'dark', 'side']
Message after ' '.join(): You don't know the power of the dark side
Uma lista completa dos métodos usados para manipulação de strings em Python pode
ser encontrada em:
http://www.tutorialspoint.com/python/python_strings.htm
68
Módulo random
www.python.org
Vamos usar alguns programas simples na aula de hoje, para o estudo de números
aleatórios e loops. Os programas estão disponíveis no site:
http://www.delmarlearning.com/companions/content/1435455002/downloads/index.asp
?isbn=1435455002, acesso em: 23 de novembro 2016. Esses programas são
discutidos no livro: DAWSON, Michael. Python Programming, for the absolute
beginner. 3ed. Boston: Course Technology, 2010. 455 p.
Considere o programa craps_roller.py, mostrado abaixo. Vamos analisar cada linha de
código nos próximos slides. O programa simula o lançamento de dois dados, como
num jogo de cassino chamado “Craps Roller”, quem tiver interesse em saber quais
são as chances de ganhar no “Craps Roller”, veja o site:
http://www.math.uah.edu/stat/games/Craps.html, acesso em: 23 de novembro 2016.
# Craps Roller
# Demonstrates random number generation
import random
total = d1 + d2 69
print("You rolled a", d1, "and a", d2, "for a total of", total)
Módulo random
www.python.org
A primeira linha importa o módulo random. Já vimos na aula anterior, que o comando
import é usado para carregar um arquivo com código previamente preparado. O
código carregado, com o comando import, passa a fazer parte do programa que o
chama. Assim, podemos chamar uma função específica do módulo carregado.
Normalmente, os módulos são preparados dentro de um tema, por exemplo, o módulo
random traz funções relacionadas à geração de números aleatórios. Na verdade, o
termo aleatório deveria ser substituído por “pseudoaleatório”, visto que o interpretador
Python usa uma equação para gerar os números ditos aleatórios, assim não podem
ser considerados aleatórios no sentido restrito da palavra. Para termos números
aleatórios, devemos usar fenômenos naturais, tais como decaimento de partículas
alfa, para, desta forma, obtermos uma sequência de números aleatórios. Mais
informações em: http://www.fourmilab.ch/hotbits/ , acesso em: 23 de novembro de
2016.
# Craps Roller
# Demonstrates random number generation
import random
total = d1 + d2 70
print("You rolled a", d1, "and a", d2, "for a total of", total)
Módulo random
www.python.org
modulo.função(argumento(s))
# Craps Roller
# Demonstrates random number generation
import random
total = d1 + d2 71
print("You rolled a", d1, "and a", d2, "for a total of", total)
Módulo random
www.python.org
# Craps Roller
# Demonstrates random number generation
import random
total = d1 + d2 72
print("You rolled a", d1, "and a", d2, "for a total of", total)
Módulo random
www.python.org
# Craps Roller
# Demonstrates random number generation
import random
total = d1 + d2 73
print("You rolled a", d1, "and a", d2, "for a total of", total)
Comando if
www.python.org
74
Comando if
www.python.org
Comando Descrição
If condição : O comando if testa a condição, e, caso seja verdadeira, executa
bloco... o bloco de comandos. Caso seja falsa, pula o bloco de
comandos.
If condição: O comando if testa a condição, e, caso seja verdadeira, executa
bloco 1 o bloco 1 de comandos. Caso seja falsa, executa o bloco 2 de
else: comandos, vinculado ao else.
bloco 2
If condição 1: O comando if testa a condição 1, e, caso seja verdadeira,
bloco 1 executa o bloco 1 de comandos e ignora os elif e else, mesmo
elif condição 2: que esses tenham condições verdadeiras. Caso seja falsa, testa
bloco 2 a condição 2, se verdadeira, executa o bloco 2 e ignora os outros
elif condição 3: elif e else, se presentes. Essa abordagem é seguida pelos outros
bloco 3 elif e else, se presentes. Veja, uma vez que uma das condições é
.... satisfeita, o bloco referente a esta condição é executado e o
elif condição N: programa ignora os outros elif e else, se presentes.
bloco N
else:
bloco N + 1 75
Comando if
www.python.org
76
Comando if
www.python.org
print("I sense your energy. Your true emotions are coming across my screen.")
print("You are...")
mood = random.randint(1, 3)
if mood == 1:
# happy
print( \
"""
-----------
| |
| O O |
| < |
| |
| . . |
| `...` |
----------- 77
""")
Comando if
www.python.org
No segundo trecho, temos o elif, onde realizamos o teste da segunda condição, que
caso seja “2”, mostra uma face neutra.
elif mood == 2:
# neutral
print( \
"""
-----------
| |
| O O |
| < |
| |
| ------ |
| |
-----------
""")
78
Comando if
www.python.org
No terceiro trecho, temos o último elif, onde realizamos o teste da terceira condição,
que caso seja “3”, mostra uma face triste.
elif mood == 3:
# sad
print( \
"""
-----------
| |
| O O |
| < |
| |
| .'. |
| ' ' |
-----------
""")
79
Comando if
www.python.org
Em seguida temos o else, que neste caso é desnecessário, visto que todas as
possibilidades já foram testadas, mas é uma boa política deixarmos como uma
cláusula de segurança, onde se números que não estivessem entre 1 e 3 surgissem, a
situação seria tratada. Em um código relativamente simples como este, pode parecer
excesso de zelo, mas imagine um programa com 10 mil linhas de código, com
centenas de ramificações. Tal zelo pode evitar resultados catastróficos. Depois do
bloco do else, temos uma função print().
else:
print("Illegal mood value! (You must be in a really bad mood).")
print("...today.")
80
Comando if
www.python.org
I sense your energy. Your true emotions are coming across my screen.
You are...
-----------
| |
| O O |
| < |
| |
| . . |
| `...` |
-----------
...today.
81
Loop for
www.python.org
82
Loop for
www.python.org
P
y
t
h
o
n
83
Loop for
www.python.org
O loop for pode varrer listas, como vemos no código showElements.py, que mostra os
elementos na lista myList. A lógica de programação é mesma do programa
showCharacters.py, só trocamos a string por lista. O resultado é que o loop for mostra
agora um elemento da lista por vez, um em cada linha. O loop for está destacado em
vermelho. Veja que cada elemento da lista myList é uma string. Separamos os
elementos da lista por vírgulas, como mostrado para a lista na definição da lista
myList, na segunda linha do programa abaixo.
Vejamos um outro exemplo do loop for, agora com o comando range(). O range()
define uma faixa de números inteiros que pode ser varrida por um loop for. O código
showNumbers1.py está mostrado abaixo. O range(10) gera uma lista de números
inteiros que inicia em zero e termina em 9. O loop for abaixo repete o bloco de
comando, no caso o print(i) o número de vezes definido no range().
O range() também pode definir o número inicial e final da lista, bem como o passo.
Abaixo temos um exemplo no código showNumbers2.py, o range() inicia em 1 e
termina em 19, com passo 2.
Outro tipo de loop é o while, que executa um bloco de código, enquanto uma
determinada condição for satisfeita. Uma vez que a condição não seja mais satisfeita,
o programa sai do loop while. Abaixo temos a estrutura geral do loop while.
while condição:
bloco vinculado à condição
87
Loop while
www.python.org
Abaixo temos o código showNumbers3.py que usa um loop while para gerar números
entre 0 e 9. Veja que inicialmente é atribuído zero à variável i. No loop while a variável
i é testada, caso seja menor que 10 o bloco relacionado ao while é executado, no
caso o print(i) seguido de i+= 1. Esta última linha indica que será somado um à
variável i. Em seguida a condição (i<10) é testada novamente. O loop é repetido até
que a variável i atinja o valor 10, quando o loop será finalizado. A variável i no loop
while é chamada variável sentinela, pois seu estado que sinaliza quando o loop deve
encerrar.
88
Loop while
www.python.org
0
1
2
3
4
5
6
7
8
9
89
Comandos break e continue
www.python.org
Os loops infinitos podem ser considerados erros de lógica, mas podemos ter um loop
potencialmente infinito que tenha uma condição de saída, conseguida com o comando
break. Podemos, ainda, ter a necessidade de omitirmos a execução de parte de um
bloco de um loop, voltando para o topo do bloco do loop. Isto é conseguido com o
comando continue. Veremos o programa skip_7.py que mostra na tela uma contagem
de 1 até 10, mas omite o número 7. O código chama-se skip_7.py, indicado abaixo.
count = 0
while True :
count += 1
# end loop if count greater than 10
if count > 10:
break
# skip 7
if count == 7:
continue
print(count) 90
Comandos break e continue
www.python.org
A primeira linha do código é a atribuição de zero à variável count, que será usada
como contador de iterações do loop. Em seguida temos o início do loop while, veja
que a condição é sempre verdadeira, while True: gera um loop infinito, que será
interrompido com o teste de uma condição de saída. Antes dessa condição, somamos
1 ao valor atribuído à variável count e atribuímos o resultado ao contador count, com
count += 1. Cada passagem do loop teremos “1” somado e atribuído à variável count.
count = 0
while True :
count += 1
# end loop if count greater than 10
if count > 10:
break
# skip 7
if count == 7:
continue
print(count) 91
Comandos break e continue
www.python.org
Depois testamos se o contador é maior que 10, com o comando if, caso seja maior
que 10, o bloco do if é executado. Neste bloco temos o comando break, que faz
exatamente isto, quebra a sequência de execução do bloco associado ao while e sai
do loop. Em seguida testamos se o contador é 7, caso seja, o bloco do if é executado,
onde temos o comando continue, que pula para o início do loop while e testa a
condição do loop, e como é sempre verdadeira, continua a execução. O resultado
líquido é que o número 7 não é mostrado na tela.
count = 0
while True :
count += 1
# end loop if count greater than 10
if count > 10:
break
# skip 7
if count == 7:
continue
print(count) 92
Comandos break e continue
www.python.org
1
2
3
4
5
6
8
9
10
93
Programa guess_my_number.py
www.python.org
Veremos a aplicação dos conceitos vistos hoje num programa de jogo, onde você
tenta adivinhar um número pseudoaleatório entre 1 e 100 gerado pelo computador, o
programa chama-se guess_my_number.py. Veremos a execução do programa antes
de vermos seu código.
Take a guess: 50
Lower...
Take a guess: 25
Higher...
Take a guess: 38
Higher...
Take a guess: 44
You guessed it! The number was 44
And it only took you 4 tries!
94
Programa guess_my_number.py
www.python.org
import random
print("\tWelcome to 'Guess My Number'!")
print("\nI'm thinking of a number between 1 and 100.")
print("Try to guess it in as few attempts as possible.\n")
the_number = random.randint(1, 100)
guess = int(input("Take a guess: "))
tries = 1
while guess != the_number: # guessing loop
if guess > the_number:
print("Lower...")
else:
print("Higher...")
guess = int(input("Take a guess: "))
tries += 1
print("You guessed it! The number was", the_number)
print("And it only took you", tries, "tries!\n") 95
Programa guess_my_number.py
www.python.org
As três linhas seguintes são funções print() que mostram uma mensagem de boas-
vindas e informações sobre o jogo.
import random
print("\tWelcome to 'Guess My Number'!")
print("\nI'm thinking of a number between 1 and 100.")
print("Try to guess it in as few attempts as possible.\n")
the_number = random.randint(1, 100)
guess = int(input("Take a guess: "))
tries = 1
while guess != the_number: # guessing loop
if guess > the_number:
print("Lower...")
else:
print("Higher...")
guess = int(input("Take a guess: "))
tries += 1
print("You guessed it! The number was", the_number)
print("And it only took you", tries, "tries!\n") 96
Programa guess_my_number.py
www.python.org
import random
print("\tWelcome to 'Guess My Number'!")
print("\nI'm thinking of a number between 1 and 100.")
print("Try to guess it in as few attempts as possible.\n")
the_number = random.randint(1, 100)
guess = int(input("Take a guess: "))
tries = 1
while guess != the_number: # guessing loop
if guess > the_number:
print("Lower...")
else:
print("Higher...")
guess = int(input("Take a guess: "))
tries += 1
print("You guessed it! The number was", the_number)
print("And it only took you", tries, "tries!\n") 97
Programa guess_my_number.py
www.python.org
O programa agora pergunta ao usuário pelo o número que ele acha que foi escolhido
pelo computador, e atribui esse número à variável guess. O número 1 é atribuído à
variável tries, que indica o número de tentativas que o jogador fez.
import random
print("\tWelcome to 'Guess My Number'!")
print("\nI'm thinking of a number between 1 and 100.")
print("Try to guess it in as few attempts as possible.\n")
the_number = random.randint(1, 100)
guess = int(input("Take a guess: "))
tries = 1
while guess != the_number: # guessing loop
if guess > the_number:
print("Lower...")
else:
print("Higher...")
guess = int(input("Take a guess: "))
tries += 1
print("You guessed it! The number was", the_number)
print("And it only took you", tries, "tries!\n") 98
Programa guess_my_number.py
www.python.org
A condição do loop while, é que o valor atribuído à variável guess seja diferente do
atribuído à variável the_number, ou seja, o bloco do loop while será executado,
enquanto os números forem diferentes.
import random
print("\tWelcome to 'Guess My Number'!")
print("\nI'm thinking of a number between 1 and 100.")
print("Try to guess it in as few attempts as possible.\n")
the_number = random.randint(1, 100)
guess = int(input("Take a guess: "))
tries = 1
while guess != the_number: # guessing loop
if guess > the_number:
print("Lower...")
else:
print("Higher...")
guess = int(input("Take a guess: "))
tries += 1
print("You guessed it! The number was", the_number)
print("And it only took you", tries, "tries!\n") 99
Programa guess_my_number.py
www.python.org
No bloco do loop temos o comando if, que testa se o valor atribuído à variável guess é
maior que ao atribuído à variável the_number, caso seja, o programa mostra a
mensagem “Lower...”, indicando que o jogador deve digitar um número menor.
import random
print("\tWelcome to 'Guess My Number'!")
print("\nI'm thinking of a number between 1 and 100.")
print("Try to guess it in as few attempts as possible.\n")
the_number = random.randint(1, 100)
guess = int(input("Take a guess: "))
tries = 1
while guess != the_number: # guessing loop
if guess > the_number:
print("Lower...")
else:
print("Higher...")
guess = int(input("Take a guess: "))
tries += 1
print("You guessed it! The number was", the_number)
print("And it only took you", tries, "tries!\n") 100
Programa guess_my_number.py
www.python.org
Caso o valor atribuído à variável guess, não seja maior que o atribuído à variável
the_number, é mostrada a mensagem “Higher ...”, para que o jogador digite um
número mais alto.
import random
print("\tWelcome to 'Guess My Number'!")
print("\nI'm thinking of a number between 1 and 100.")
print("Try to guess it in as few attempts as possible.\n")
the_number = random.randint(1, 100)
guess = int(input("Take a guess: "))
tries = 1
while guess != the_number: # guessing loop
if guess > the_number:
print("Lower...")
else:
print("Higher...")
guess = int(input("Take a guess: "))
tries += 1
print("You guessed it! The number was", the_number)
print("And it only took you", tries, "tries!\n") 101
Programa guess_my_number.py
www.python.org
Depois é lido um novo valor para o número e atribuído à variável guess. É somado 1
ao valor atribuído à variável tries. O bloco de comandos é executado, até que a
condição do while não seja mais satisfeita, ou seja, o jogador achou o número.
import random
print("\tWelcome to 'Guess My Number'!")
print("\nI'm thinking of a number between 1 and 100.")
print("Try to guess it in as few attempts as possible.\n")
the_number = random.randint(1, 100)
guess = int(input("Take a guess: "))
tries = 1
while guess != the_number: # guessing loop
if guess > the_number:
print("Lower...")
else:
print("Higher...")
guess = int(input("Take a guess: "))
tries += 1
print("You guessed it! The number was", the_number)
print("And it only took you", tries, "tries!\n") 102
Programa guess_my_number.py
www.python.org
Como o programa só sairá do bloco do loop while, quando o jogador acertar o número,
colocamos, logo após os comandos do loop while, duas funções print() com as
informações sobre o número encontrado e o número de tentativas necessárias.
import random
print("\tWelcome to 'Guess My Number'!")
print("\nI'm thinking of a number between 1 and 100.")
print("Try to guess it in as few attempts as possible.\n")
the_number = random.randint(1, 100)
guess = int(input("Take a guess: "))
tries = 1
while guess != the_number: # guessing loop
if guess > the_number:
print("Lower...")
else:
print("Higher...")
guess = int(input("Take a guess: "))
tries += 1
print("You guessed it! The number was", the_number)
print("And it only took you", tries, "tries!\n") 103
Estrutura de Dados em Python (Tuple)
www.python.org
my_tuple = ("P","y","t","h","o","n")
A execução do código mostrará uma letra por linha, o arquivo showTuple.py tem o
código do programa.
104
Estrutura de Dados em Python (Tuple)
www.python.org
Até agora tuple parece bem similar com a lista. Uma das principais diferenças é que
um tuple ocupa menos memória e tem acesso mais rápido. Para programas com listas
extensas é vantajoso o uso de tuple.
Outras diferenças estão mostradas na tabela abaixo.
Lista Tuple
Mutável Imutável
[elemento1,....] (elemento1,....)
105
Programa: holodeck.py
www.python.org
Holodeck
Programa: holodeck.py
Resumo
O holodeck é um sistema de simulação computacional de realidade virtual,
mostrado na série de ficção científica Star Trek. O presente programa simula
uma situação onde você se encontra aprisionado no holodeck e tem acesso a
um terminal de computador. Do terminal você prepara um código em Python,
que permite que você gere um arquivo de saída (mensagem.txt) com seu pedido
de socorro.
106
Programa: holodeck.py
www.python.org
Programa: holodek.py
Você está preso no holodeck da nave
USS Enterprise, sem ter como sair ou se
comunicar pelas vias usuais.
Aparentemente os romulanos tomaram a
Enterprise. Em todo caso, você acessa
um terminal de computador, que por uma
falha na segurança, permite o envio de
uma mensagem, via um programa em
Python. Que sorte a sua que você sabe
Python!
Prepare um programa em Python que cria
Visão do holodeck da USS Enterprise.
um arquivo chamado mensagem.txt e Disponível em:
armazena a mensagem em texto que <
http://techspecs.acalltoduty.com/images/galaxy/holodeck
você digitará. .jpg
>
Acesso em: 23 de novembro de 2016.
107
Exercícios de Programação
www.python.org
ALBERTS, B. et al. Biologia Molecular da Célula. 4a edição. Porto Alegre: Artmed editora, Porto Alegre, 2004.
-BRESSERT, Eli. SciPy and NumPy. Sebastopol: O’Reilly Media, Inc., 2013. 56 p.
-DAWSON, Michael. Python Programming, for the absolute beginner. 3ed. Boston: Course Technology, 2010. 455 p.
-HETLAND, Magnus Lie. Python Algorithms. Mastering Basic Algorithms in the Python Language. Nova York: Springer
Science+Business Media LLC, 2010. 316 p.
-IDRIS, Ivan. NumPy 1.5. An action-packed guide dor the easy-to-use, high performance, Python based free open source
NumPy mathematical library using real-world examples. Beginner’s Guide. Birmingham: Packt Publishing Ltd., 2011. 212 p.
-KIUSALAAS, Jaan. Numerical Methods in Engineering with Python. 2ed. Nova York: Cambridge University Press, 2010. 422
p.
-LANDAU, Rubin H. A First Course in Scientific Computing: Symbolic, Graphic, and Numeric Modeling Using Maple, Java,
Mathematica, and Fortran90. Princeton: Princeton University Press, 2005. 481p.
-LANDAU, Rubin H., PÁEZ, Manuel José, BORDEIANU, Cristian C. A Survey of Computational Physics. Introductory
Computational Physics. Princeton: Princeton University Press, 2008. 658 p.
-LUTZ, Mark. Programming Python. 4ed. Sebastopol: O’Reilly Media, Inc., 2010. 1584 p.
-MODEL, Mitchell L. Bioinformatics Programming Using Python. Sebastopol: O’Reilly Media, Inc., 2011. 1584 p.
-TOSI, Sandro. Matplotlib for Python Developers. Birmingham: Packt Publishing Ltd., 2009. 293 p.