19
© 2019 Dr. Walter F. de Azevedo Jr. 1 000000000000000000000000000000000000000 000000000000000000000000000000000000000 000000000000000000000000010000000000000 000000000000000000000111111111100000000 000000000000000000001111110000000000110 000000000000110000001111100000000111110 000000000001000011001111111111111111000 000000000010001110110001111111000000000 000000000011111111111111111111111110000 000001111111111111111111111111111110000 000000111111111111111111111111110000000 000000000111111111111111111111000000000 000000000111111111111111110000000000000 000000000111111111111111111110000000000 000000001111101111111111111111000000000 000000001111100111111111111111000000000 000000000000111111111111110011100000000 000000000000001111111110111111100000000 000000000000001110000011101100000000000 000000000000000000011111001100000000000 000000000000000000000000110000000000000 000000000000000000000000000000000000000 000000000000000000000000000000000000000 000000000000000000000000000000000000000 000000000000000000000000000000000000000 azevedolab.net

Linguagem de Programação Python · Exercício de programação 3. Escreva um programa que simula o lançamento de uma moeda 100 vezes. Depois o programa mostra o número de vezes

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Linguagem de Programação Python · Exercício de programação 3. Escreva um programa que simula o lançamento de uma moeda 100 vezes. Depois o programa mostra o número de vezes

©2

01

9 D

r. W

alte

r F.

de

Aze

ve

do

Jr.

1

000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000111111111100000000000000000000000000001111110000000000110000000000000110000001111100000000111110000000000001000011001111111111111111000000000000010001110110001111111000000000000000000011111111111111111111111110000000001111111111111111111111111111110000000000111111111111111111111111110000000000000000111111111111111111111000000000000000000111111111111111110000000000000000000000111111111111111111110000000000000000001111101111111111111111000000000000000001111100111111111111111000000000000000000000111111111111110011100000000000000000000001111111110111111100000000000000000000001110000011101100000000000000000000000000000011111001100000000000000000000000000000000000110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

azevedolab.net

Page 2: Linguagem de Programação Python · Exercício de programação 3. Escreva um programa que simula o lançamento de uma moeda 100 vezes. Depois o programa mostra o número de vezes

Na aula de hoje, veremos a solução dos exercícios de programação, propostos na

aula anterior. Os programas são os seguintes.

Exercício de programação 2. Escreva um programa que simula um biscoito da sorte

chinês. O programa deve mostrar uma entre cinco previsões, de forma aleatória, cada

vez que é executado. Nome do programa: fortune_cookie.py.

Exercício de programação 3. Escreva um programa que simula o lançamento de

uma moeda 100 vezes. Depois o programa mostra o número de vezes que deu cara e

que deu coroa. Nome do programa: flip_a_coin.py .

Exercício de programação 4. Modifique o programa guess_my_number.py, de forma

que o jogador tenha um número limitado de tentativas. Se o jogador não consegue

acertar o número gerado pelo computador, num número definido de tentativas, serão

mostradas na tela o número certo e uma mensagem para o jogador. Nome do

programa: limited_guess_my_number.py .

2

Programas da Aula Anterior

www.python.org

Page 3: Linguagem de Programação Python · Exercício de programação 3. Escreva um programa que simula o lançamento de uma moeda 100 vezes. Depois o programa mostra o número de vezes

import random

print("Welcome to Lotus Restaurant. We are here to bring good Chinese food and also good luck.")

print("Try one of our fortune cookies...")

input("\nPress enter key to see your fortune.")

print("\nYour fortune today is ...")

# Set initial value

fortune = random.randint(1,5)

# Tests all five fortunes and shows it

if fortune == 1 :

print("'Do not follow where the path may lead. Go where there is no path... and leave a trail.'")

elif fortune == 2 :

print("'Do not fear what you don't know.'")

elif fortune == 3 :

print("'You will have a pleasant surprise.'")

elif fortune == 4 :

print("'If you fell you are right, stand firmly by your convictions.'")

else :

print("'All progress occurs because people date to be different.'") 3

Programa fortune_cookie.py

www.python.org

Programa do Exercício de programação 2: fortune_cookie.py.

Page 4: Linguagem de Programação Python · Exercício de programação 3. Escreva um programa que simula o lançamento de uma moeda 100 vezes. Depois o programa mostra o número de vezes

Welcome to Lotus Restaurant. We are here to bring good Chinese food and

also good luck.

Try one of our fortune cookies...

Press enter key to see your fortune.

Your fortune today is ...

'You will have a pleasant surprise.'

4

Vamos ao resultado do programa.

Programa fortune_cookie.py

www.python.org

Page 5: Linguagem de Programação Python · Exercício de programação 3. Escreva um programa que simula o lançamento de uma moeda 100 vezes. Depois o programa mostra o número de vezes

import random

print("Throwing a coin 100 times is pretty fast...")

#Set initial value

coin = random.randint(0,1)

tails = 0

heads = 0

count = 0

# Flip a coin loop

while count < 100 :

if coin == 0 :

tails += 1

else :

heads += 1

count += 1

coin = random.randint(0,1)

print("\nI flipped a coin ",count," times and got ",tails," tails and ",heads," heads.")

5

Programa flip_a_coin.py

www.python.org

Programa do Exercício de programação 3: flip_a_coin.py.

Page 6: Linguagem de Programação Python · Exercício de programação 3. Escreva um programa que simula o lançamento de uma moeda 100 vezes. Depois o programa mostra o número de vezes

Throwing a coin 100 times is pretty fast...

I flipped a coin 100 times and got 44 tails and 56 heads.

6

Vamos ao resultado do programa.

Programa flip_a_coin.py

www.python.org

Page 7: Linguagem de Programação Python · Exercício de programação 3. Escreva um programa que simula o lançamento de uma moeda 100 vezes. Depois o programa mostra o número de vezes

import random

print("Welcome to the number guessing game. In this game you have to guess a number between 1 and 100.")

top_guesses = int(input("How many guesses do you wanna try? "))

random_number = random.randint(1,100) # Set initial values

your_number = int(input("\nGuess a number between 1 and 100 => "))

count = 1

# Guessing loop

while count < top_guesses and your_number != random_number :

count += 1

if your_number < random_number :

your_number = int(input("\nHigher..."))

elif your_number > random_number :

your_number = int(input("\nLower..."))

# Checks the results

if count <= top_guesses and your_number == random_number :

print("\n\nCongratulations! You guessed it right ",random_number, "! It only took you ",count,"

tries!")

else :

print("\nYou were unable to guess the right number in ",count, " tries. Better luck next time.")7

Programa limited_guess_number.py

www.python.org

Programa do Exercício de programação 4: limited_guess_number.py.

Page 8: Linguagem de Programação Python · Exercício de programação 3. Escreva um programa que simula o lançamento de uma moeda 100 vezes. Depois o programa mostra o número de vezes

Welcome to the number guessing game. In this game you have to guess a

number between 1 and 100.

How many guesses do you wanna try? 7

Guess a number between 1 and 100 => 46

Higher...71

Higher...86

Higher...91

Lower...89

Lower...88

Lower...87

Congratulations! You guessed it right 87 ! It only took you 7 tries!8

Vamos ao resultado do programa.

Programa limited_guess_number.py

www.python.org

Page 9: Linguagem de Programação Python · Exercício de programação 3. Escreva um programa que simula o lançamento de uma moeda 100 vezes. Depois o programa mostra o número de vezes

Resumo

Programa para gerar um trecho de DNA com uma sequência aleatória. A

sequência do DNA será atribuída a uma variável do tipo string (variável dna),

onde cada base será gerada aleatoriamente (variável base), a partir do módulo

random e adicionada à sequência de DNA. O programa tem como entrada o

tamanho da sequência de DNA, a ser gerada aleatoriamente. A sequência

aleatória será mostrada na tela. Para adicionar a base aleatória à sequência de

DNA, podemos usar o operador “+” ou “”.join([dna,base]).

Random DNA (versão 1)

Programa: randomDNA1.py

9

Programa: randomDNA1.py

www.python.org

Page 10: Linguagem de Programação Python · Exercício de programação 3. Escreva um programa que simula o lançamento de uma moeda 100 vezes. Depois o programa mostra o número de vezes

10

Programa: randomDNA1.py

www.python.org

O programa é relativamente simples, o principal bloco do programa é um loop while,

que monta a sequência do DNA. Dentro do loop while temos que gerar um número

aleatório, entre 1 e 4, por exemplo. Depois temos que testar qual número foi gerado,

usando o comando if/elif/else. Atribuímos a cada número uma base (variável base),

que será adicionada à string dna. Podemos usar o operador “+” para ir montando a

sequência, por exemplo:

Podemos, ainda, usar o método “”.join(), como indicado abaixo.

Em ambas situações, temos que criar a variável dna antes do loop while, para que

possa ser adicionada a base. À variável dna, devemos atribuir uma string vazia, como

indicado abaixo.

dna = "".join([dna,base])

dna = ""

dna = dna + base

Page 11: Linguagem de Programação Python · Exercício de programação 3. Escreva um programa que simula o lançamento de uma moeda 100 vezes. Depois o programa mostra o número de vezes

Resumo

Programa para gerar um trecho de DNA com uma sequência aleatória. A

sequência do DNA será atribuída a uma variável do tipo string (variável dna),

onde cada base será gerada aleatoriamente (variável base), a partir do módulo

random e adicionada à sequência de DNA. O programa tem como entrada o

tamanho da sequência de DNA, a ser gerada aleatoriamente. A sequência

aleatória será mostrada na tela. Para adicionar a base aleatória à sequência de

DNA, podemos usar o operador “+” ou “”.join([dna,base]). O programa calcula as

porcentagens de cada base presente na sequência de DNA gerada e mostra o

resultado na tela.

Random DNA (versão 2)

Programa: randomDNA2.py

11

Programa: randomDNA2.py

www.python.org

Page 12: Linguagem de Programação Python · Exercício de programação 3. Escreva um programa que simula o lançamento de uma moeda 100 vezes. Depois o programa mostra o número de vezes

12

Programa: randomDNA2.py

www.python.org

Nesta versão do programa, temos que criar contadores para cada uma das bases do

DNA. Para contar as bases, temos que inicialmente atribuir zero aos contadores, como

mostrado abaixo:

Os contadores serão atualizados em cada iteração do loop while. Depois de finalizado

o loop while, serão calculadas as porcentagens, como segue:

Tomamos o cuidado de testar se o contador de bases (count_bases) é maior que zero,

para evitar a divisão por zero. Uma vez pronto o programa, teste para sequências de

diferentes tamanhos, por exemplo para 100, 1000 e 10000. O que você pode dizer

sobre a “aleatoriedade” do módulo random?

if count_bases > 0:

perc_C = 100*count_C/count_bases

perc_G = 100*count_G/count_bases

perc_A = 100*count_A/count_bases

perc_T = 100*count_T/count_bases

count_C = 0

count_G = 0

count_A = 0

count_T = 0

Page 13: Linguagem de Programação Python · Exercício de programação 3. Escreva um programa que simula o lançamento de uma moeda 100 vezes. Depois o programa mostra o número de vezes

Resumo

Programa para gerar um trecho de DNA com uma sequência aleatória. A

sequência do DNA será atribuída a uma variável do tipo string (variável dna),

onde cada base será gerada aleatoriamente (variável base), a partir do módulo

random e adicionada à sequência de DNA. O programa tem como entradas o

tamanho da sequência de DNA, a ser gerada aleatoriamente, e o nome do

arquivo de saída, onde a sequência será gravada. A sequência aleatória será

mostrada na tela. Para adicionar a base aleatória à sequência de DNA, podemos

usar o operador “+” ou “”.join([dna,base]). O programa calcula as porcentagens

de cada base presente na sequência de DNA gerada e mostra o resultado na

tela.

Random DNA (versão 3)

Programa: randomDNA3.py

13

Programa: randomDNA3.py

www.python.org

Page 14: Linguagem de Programação Python · Exercício de programação 3. Escreva um programa que simula o lançamento de uma moeda 100 vezes. Depois o programa mostra o número de vezes

14

Programa: randomDNA3.py

www.python.org

Agora, a sequência gerada será armazenada num arquivo de saída. Usamos a função

input() para ler o nome do arquivo de saída. A função open() é usada para criar o

arquivo, onde a sequência do DNA será escrita, como indicado abaixo:

Depois de gerada a sequência do DNA, como nos programas anteriores, podemos

escrevê-la no arquivo de saída, como mostrado abaixo:

# Writes sequence to output file

dna_out.write(dna)

# Closes DNA file

dna_out.close()

# Reads output file name

file_in = input("\nGive the DNA file name => ")

# Opens DNA file

dna_out = open(file_in,"w")

Page 15: Linguagem de Programação Python · Exercício de programação 3. Escreva um programa que simula o lançamento de uma moeda 100 vezes. Depois o programa mostra o número de vezes

Resumo

Programa para gerar um trecho de DNA com uma sequência aleatória. A

sequência do DNA será atribuída a uma variável do tipo string (variável dna),

onde cada base será gerada aleatoriamente (variável base), a partir do módulo

random e adicionada à sequência de DNA. O programa tem como entradas o

tamanho da sequência de DNA, a ser gerada aleatoriamente, e o nome do

arquivo de saída no formato FASTA, onde a sequência será gravada. A

sequência aleatória será mostrada na tela. Para adicionar a base aleatória à

sequência de DNA, podemos usar o operador “+” ou “”.join([dna,base]). O

programa calcula as porcentagens de cada base presente na sequência de DNA

gerada e mostra o resultado na tela.

Random DNA (versão 4)

Programa: randomDNA4.py

15

Programa: randomDNA4.py

www.python.org

Page 16: Linguagem de Programação Python · Exercício de programação 3. Escreva um programa que simula o lançamento de uma moeda 100 vezes. Depois o programa mostra o número de vezes

16

Programa: randomDNA4.py

www.python.org

Vimos anteriormente, que sequências normalmente são armazenadas em arquivos no

formato FASTA. Nosso arquivo de saída, gerado no programa anterior

(randomDNA3.py), está quase lá. Para seguir o padrão do formato FASTA, a primeira

linha do arquivo deve iniciar com o símbolo >. No programa randomDNA4.py

escreveremos na primeira linha do arquivo de saída, a string “>Random DNA”, como

mostrado abaixo:

Como o método .write() não adiciona nova linha, temos que ter o “\n” ao final da linha.

Você pode usar o método .write() quantas vezes for necessário. Toda vez que temos a

chamada de um novo método .write(), o Python escreve o conteúdo indicado como

argumento, sem sobrepor ao conteúdo já escrito, mas, também, sem iniciar uma nova

linha, por isso, incluímos o “\n” ao final da string.

# Writes first line in the output file

dna_out.write(">Random DNA \n")

Page 17: Linguagem de Programação Python · Exercício de programação 3. Escreva um programa que simula o lançamento de uma moeda 100 vezes. Depois o programa mostra o número de vezes

17

Programa: randomDNA4.py

www.python.org

O próximo passo é escrevermos as bases, com um número fixo de caracteres (bases)

por linha. O formato FASTA prevê o uso de 70 ou 80 colunas, vamos adotar o padrão

de 80 colunas. Temos que criar um loop for para escrevermos um número fixo de

bases, como mostrado a seguir:

# Writes sequence to output file

line = "" # Assigns "" to variable line

# Loop for to write bases to output file

for my_base in dna:

line = "".join([line,my_base]) # Adds my_base to string line

if len(line) == 80: # Tests whether the number of bases in the string line is 80

line = line+"\n" # Adds "\n" to end of the string

dna_out.write(line) # Writes the string line to the output file

line = "" # Sets line to empty

Page 18: Linguagem de Programação Python · Exercício de programação 3. Escreva um programa que simula o lançamento de uma moeda 100 vezes. Depois o programa mostra o número de vezes

Resumo

Programa para gerar DNA com uma sequência aleatória, que terá o mesmo

número de bases de uma sequência lida de um arquivo de entrada. A sequência

aleatória será atribuída a uma variável do tipo string (dna), onde cada base será

gerada aleatoriamente (base), a partir do módulo random e adicionada à

sequência de DNA. A sequência aleatória terá exatamente o mesmo número de

bases da sequência de entrada. O programa lê os nomes dos arquivos de

entrada e saída no formato FASTA. As sequências de entrada e aleatória serão

mostradas na tela. Para adicionar a base aleatória à sequência de DNA,

podemos usar o operador “+” ou “”.join([dna,base]). O programa calcula e mostra

as porcentagens de cada base presente nas sequências de DNA lida e gerada.

Random DNA (versão 5)

Programa: randomDNA5.py

18

Programa: randomDNA5.py

www.python.org

Page 19: Linguagem de Programação Python · Exercício de programação 3. Escreva um programa que simula o lançamento de uma moeda 100 vezes. Depois o programa mostra o número de vezes

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

Última atualização: 8 de maio de 2019.

19

Referências

www.python.org