47
© 2015 Dr. Walter F. de Azevedo Jr. 1 000000000000000000000000000000000000000 000000000000000000000000000000000000000 000000000000111111111110001100000000000 000000000001111111111111111111000000001 000000000111111111111111111111111000000 000000000111111111111111111111111000000 000000000011111111111111111111100000000 000000001111111111111111111111111000000 000011111111111111111111111111111000000 001111111111111111111111111111110000000 111111111111111111111111111110000000000 111111111111111111111111111110000000000 000011111111111111111111111111111110000 001111111111111111111111111111111111000 011111111111111111111111111111111111000 001111111111111111111111111111111111100 000000011111111111111111111111111111110 000000001111111111111111111111111111110 000000000001111111111111111111111111110 000000000000011111111111111111111111110 000000000000000111111111111111111111000 000000000000000000000000001111000000000 000000000000000000000000000000000000000 000000000000000000000000000000000000000 000000000000000000000000000000000000000 www.python.org

Bioinformática. Uma introdução com a linguagem Perl · import random # Generates random numbers from 1 to 6 die1 = random.randint(1,6) die2 = random.randrange(6) + 1 total = die1

  • Upload
    others

  • View
    14

  • Download
    0

Embed Size (px)

Citation preview

©2

01

5 D

r. W

alter

F.

de

Aze

ve

do

Jr.

1

000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111111111110001100000000000000000000001111111111111111111000000001000000000111111111111111111111111000000000000000111111111111111111111111000000000000000011111111111111111111100000000000000001111111111111111111111111000000000011111111111111111111111111111000000001111111111111111111111111111110000000111111111111111111111111111110000000000111111111111111111111111111110000000000000011111111111111111111111111111110000001111111111111111111111111111111111000011111111111111111111111111111111111000001111111111111111111111111111111111100000000011111111111111111111111111111110000000001111111111111111111111111111110000000000001111111111111111111111111110000000000000011111111111111111111111110000000000000000111111111111111111111000000000000000000000000000001111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

www.python.org

Na aula de hoje veremos os seguintes tópicos:

- Números “aleatórios” com as funções randint() e randrange();

- Comandos if, else, elif;

- Loop while;

- Loops infinitos;

- Comandos break e continue

2

Introdução

www.python.org

import random

# Generates random numbers from 1 to 6

die1 = random.randint(1,6)

die2 = random.randrange(6) + 1

total = die1 + die2

print(“\nYou rolled a ”,die1,“and a ”,die2,” for a total of “,total)

input(“\nPress the enter key to exit.”)

Vamos usar alguns programas simples na aula de hoje, para o estudo dos itens

destacados no slide anterior. Os programas estão disponíveis no site:

http://www.delmarlearning.com/companions/content/1435455002/downloads/index.asp

?isbn=1435455002, acesso em: 15 de abril 2015. 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: 15 de abril 2015.

3

Módulo random

www.python.org

import random

# Generates random numbers from 1 to 6

die1 = random.randint(1,6)

die2 = random.randrange(6) + 1

total = die1 + die2

print(“\nYou rolled a ”,die1,“and a ”,die2,” for a total of “,total)

input(“\nPress the enter key to exit.”)

A primeira linha importa o módulo random. Já vimos nas aulas anteriores, 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: 15 de abril 2015.

4

Módulo random

www.python.org

import random

# Generates random numbers from 1 to 6

die1 = random.randint(1,6)

die2 = random.randrange(6) + 1

total = die1 + die2

print(“\nYou rolled a ”,die1,“and a ”,die2,” for a total of “,total)

input(“\nPress the enter key to exit.”)

Para gerarmos os números com o módulo random, chamamos as funções

necessárias. Por exemplo, a função randint(), destacada em vermelho no código

abaixo. Para chamarmos a função, usamos a notação dot, vista anteriormente.

Especificamente, random.randint(1,6) retorna um número entre 1 e 6, incluindo os

extremos. Esse número é atribuído à variável die1. Se chamássemos a função

diretamente, com randint(1,6), teríamos uma mensagem de erro, especificamente, um

erro de sintaxe ou execução. Assim, a regra para o uso das funções presentes nos

módulos, é colocar o nome do módulo, ao qual pertence a função, seguido do

ponto “.” e o nome da função, como indicado no quadro abaixo.

5

Módulo random

www.python.org

modulo.função(argumento(s))

import random

# Generates random numbers from 1 to 6

die1 = random.randint(1,6)

die2 = random.randrange(6) + 1

total = die1 + die2

print(“\nYou rolled a ”,die1,“and a ”,die2,” for a total of “,total)

input(“\nPress the enter key to exit.”)

A função randrange(6) gera um número entre 0 e 5, ou seja, o número indicado como

argumento da função, não faz parte do conjunto de números pseudoaleatórios a

serem gerados pela função. Assim, se usarmos a função randrange() para gerar um

número pseudoaleatório entre 1 e 6, temos que somar “1” ao resultado, como

mostrado na linha de código em vermelho abaixo. Veja, como na função randint(), os

números gerados são inteiros, a diferença é que na função randrange() não

precisamos especificar o limite inferior, é assumido ser zero “0”. É usada a notação

dot, e o resultado atribuído à variável die2.

6

Módulo random

www.python.org

import random

# Generates random numbers from 1 to 6

die1 = random.randint(1,6)

die2 = random.randrange(6) + 1

total = die1 + die2

print(“\nYou rolled a ”,die1,“and a ”,die2,” for a total of “,total)

input(“\nPress the enter key to exit.”)

Como os números pseudoaleatórios foram atribuídos às variáveis die1 e die2,

podemos operar com os valores. A linha em destaque abaixo, realiza a soma dos

valores atribuídos às variáveis die1 e die2 e atribui o resultado à variável total. A linha

seguinte mostra o resultado na tela. A última linha aguarda o usuário pressionar Enter

para encerrar a execução do código.

7

Módulo random

www.python.org

8

Comando if

www.python.org

Vimos, já na primeira aula, o comando if e seu uso na ramificação da execução de um

código em Python. Se não tivéssemos a possibilidade de ramificação da execução do

código, os programas seguiriam seu caminho definido, do primeiro ao último comando,

sem a possibilidade de ramificações. O comando if tem esta qualidade, ramificar a

execução, vinculado a um teste que, dependendo do resultado, tomará um caminho

ou outro. Vimos até o momento o if isolado, bem como o if com o else. Além desses

citados, temos o elif, o quadro no próximo slide ilustra o uso do if, else e elif.

Comando Descrição

If condição :

bloco...

O comando if testa a condição, e, caso seja verdadeira, executa

o bloco de comandos. Caso seja falsa, pula o bloco de

comandos.

If condição:

bloco 1

else:

bloco 2

O comando if testa a condição, e, caso seja verdadeira, executa

o bloco 1 de comandos. Caso seja falsa, executa o bloco 2 de

comandos, vinculado ao else.

If condição 1:

bloco 1

elif condição 2:

bloco 2

elif condição 3:

bloco 3

....

elif condição N:

bloco N

else:

bloco N + 1

O comando if testa a condição 1, e, caso seja verdadeira,

executa o bloco 1 de comandos e ignora os elif e else, mesmo

que esses tenham condições verdadeiras. Caso seja falsa, testa

a condição 2, se verdadeira, executa o bloco 2 e ignora os outros

elif e else, se presentes. Essa abordagem é seguida pelos outros

elif e else, se presentes. Veja, uma vez que uma das condições é

satisfeita, o bloco referente a esta condição é executado e o

programa ignora os outros elif e else, se presentes.

9

Comando if

www.python.org

10

Comando if

www.python.org

Veremos o programa mood_computer.py, disponível no site:

http://www.delmarlearning.com/companions/content/1435455002/downloads/index.asp

?isbn=1435455002, acesso em: 15 de abril de 2015. Como o código tem mais de 50

linhas, mostraremos por trechos. O programa é uma simulação de um teste de humor.

Não se preocupe, não teremos eletrodos colocados na sua cabeça para testarmos o

seu humor. O humor mostrado será resultado de um número pseudoaleatório. Só para

ilustrarmos o uso do comando if. Nas décadas de 1970 e 1980 era comum as pessoas

usarem um anel de humor que, conforme a sua coloração, poderíamos inferir o humor.

Na verdade o suposto “anel do humor” era simplesmente uma bijuteria, onde a pedra

do anel tinha um líquido que mudava de cor conforme a temperatura, nada

relacionado ao humor da pessoa.

import random

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 |

| < |

| |

| . . |

| `...` |

-----------

""")11

Comando if

www.python.org

No primeiro trecho, temos o comando import, onde o módulo random é chamado.

Depois temos duas funções print(), que mostram mensagens referentes à simulação

do humor. Em seguida, temos a chamada da função randint(1,3), que gera um número

pseudoaleatório inteiro entre 1 e 3. Temos, então, o teste da primeira condição com o

comando if, que caso seja “1”, mostra uma face feliz.

elif mood == 2:

# neutral

print( \

"""

-----------

| |

| O O |

| < |

| |

| ------ |

| |

-----------

""")

12

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 == 3:

# sad

print( \

"""

-----------

| |

| O O |

| < |

| |

| .'. |

| ' ' |

-----------

""")

13

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.

else:

print("Illegal mood value! (You must be in a really bad mood).")

print("...today.")

input("\n\nPress the enter key to exit.")

14

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() e uma função input(), que aguarda o Enter do

usuário para finalizar a execução do programa.

I sense your energy. Your true emotions are coming across my screen.

You are...

-----------

| |

| O O |

| < |

| |

| . . |

| `...` |

-----------

...today.

Press the enter key to exit.

15

Vamos ao resultado do programa.

Comando if

www.python.org

16

Loop while

www.python.org

Outra forma de mudarmos a sequência de execução de cima para baixo de um

programa, é por meio de loops, já vimos o loop for na aula 3. 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.

O loop while assemelha-se ao comando if, o bloco de código é executado se a

condição for satisfeita. A diferença reside que o loop while executa o bloco de forma

repetida, até que a condição não seja mais satisfeita. Isto pode levar a situação onde a

condição nunca seja satisfeita, o que chamamos de loop infinito. A condição, testada

no início, é testada depois da execução do bloco de código, assim, espera-se que

tenhamos uma variável, que durante uma dada execução do bloco, irá mudar, para

que a condição não seja mais satisfeita e a execução do bloco vinculada à condição

do loop while seja encerrada.

while (condição):

bloco vinculado à condição

print("\tWelcome to the 'Three-Year-Old Simulator'\n")

print("This program simulates a conversation with a three-year-old child.")

print("Try to stop the madness.\n")

response = ""

while response != "Because.":

response = input("Why?\n")

print("Oh. Okay.")

input("\n\nPress the enter key to exit.")

17

Loop while

www.python.org

Vejamos o código three_year-old.py, disponível no site:

http://www.delmarlearning.com/companions/content/1435455002/downloads/index.asp

?isbn=1435455002, acesso em: 15 de abril de 2015. Este programa simula uma

conversa com uma criança de três anos, com um loop while. A condição para saída do

loop while é que o usuário digite a resposta “Because.”. Não esqueça o ponto depois

do “Because”.

print("\tWelcome to the 'Three-Year-Old Simulator'\n")

print("This program simulates a conversation with a three-year-old child.")

print("Try to stop the madness.\n")

response = ""

while response != "Because.":

response = input("Why?\n")

print("Oh. Okay.")

input("\n\nPress the enter key to exit.")

18

Loop while

www.python.org

As três primeiras linhas são aplicações da função print(), sem novidades. A quarta

linha de código atribui vazio “” à variável response. Depois temos o início do loop

while, onde a condição testada é response != “Because.”, ou seja, a condição só será

falsa, condição de saída do loop while, quando for atribuída à variável response a

string “Because.”. O bloco vinculado ao loop while é a função input() que lê a string,

que será atribuída à variável response. A variável que controla a condição testada

no loop while, é chamada sentry variable (variável sentinela), no nosso código é a

variável response. O resto do código não traz novidades.

Welcome to the 'Three-Year-Old Simulator'

This program simulates a conversation with a three-year-old child.

Try to stop the madness.

Why?

What?

Why?

Why what?

Why?

What do you mean?

Why?

Stop it!

Why?

Because.

Oh. Okay.

Press the enter key to exit. 19

Vamos ao resultado do programa.

Loop while

www.python.org

print("Your lone hero is surrounded by a massive army of trolls.")

print("Their decaying green bodies stretch out, melting into the horizon.")

print("Your hero unsheathes his sword for the last fight of his life.\n")

health = 10

trolls = 0

damage = 3

while health != 0:

trolls += 1

health -= damage

print("Your hero swings and defeats an evil troll, " \

"but takes", damage, "damage points.\n")

print("Your hero fought valiantly and defeated", trolls, "trolls.")

print("But alas, your hero is no more.")

input("\n\nPress the enter key to exit.")20

Loop while

www.python.org

Veremos um programa que tem um loop infinito, ou seja, a condição sentinela nunca é

satisfeita. O programa chama-se losing_battle-bad.py, disponível no site:

http://www.delmarlearning.com/companions/content/1435455002/downloads/index.asp

?isbn=1435455002, acesso em: 15 de abril de 2015.

print("Your lone hero is surrounded by a massive army of trolls.")

print("Their decaying green bodies stretch out, melting into the horizon.")

print("Your hero unsheathes his sword for the last fight of his life.\n")

health = 10

trolls = 0

damage = 3

while health != 0:

trolls += 1

health -= damage

print("Your hero swings and defeats an evil troll, " \

"but takes", damage, "damage points.\n")

print("Your hero fought valiantly and defeated", trolls, "trolls.")

print("But alas, your hero is no more.")

input("\n\nPress the enter key to exit.")21

Loop while

www.python.org

As três primeiras linhas são funções print() com a narrativa do jogo. As três linhas

seguintes trazem os valores atribuídos às variáveis health, trolls e damage. Depois

temos o loop while, com a condição health != 0, ou seja, o bloco associado ao loop

while será executado, enquanto health != 0. No próximo slide temos a execução.

Your lone hero is surrounded by a massive army of trolls.

Their decaying green bodies stretch out, melting into the horizon.

Your hero unsheathes his sword for the last fight of his life.

Your hero swings and defeats an evil troll, but takes 3 damage points.

Your hero swings and defeats an evil troll, but takes 3 damage points.

Your hero swings and defeats an evil troll, but takes 3 damage points.

Your hero swings and defeats an evil troll, but takes 3 damage points.

Your hero swings and defeats an evil troll, but takes 3 damage points.

Your hero swings and defeats an evil troll, but takes 3 damage points.

Your hero swings and defeats an evil troll, but takes 3 damage points.

Your hero swings and defeats an evil troll, but takes 3 damage points.22

Vamos ao resultado do programa. Você tem que fazer <Ctrl> C, para finalizar a

execução do programa. Estamos num loop infinito.

Loop while

www.python.org

print("Your lone hero is surrounded by a massive army of trolls.")

print("Their decaying green bodies stretch out, melting into the horizon.")

print("Your hero unsheathes his sword for the last fight of his life.\n")

health = 10

trolls = 0

damage = 3

while health != 0:

trolls += 1

health -= damage

print("Your hero swings and defeats an evil troll, " \

"but takes", damage, "damage points.\n")

print("Your hero fought valiantly and defeated", trolls, "trolls.")

print("But alas, your hero is no more.")

input("\n\nPress the enter key to exit.")23

Loop while

www.python.org

Veja que cada vez que o bloco do loop while é executado, o valor atribuído à variável

health diminui 3, o valor atribuído à variável damage, assim, em nenhum momento a

variável sentinela health terá valor == 0, que é a condição de saída do loop while. Veja

que no print() temos um \ que indica que o resto do argumento está na próxima linha.

24

Loop while

www.python.org

Para evitar um loop infinito, como o do programa losing_battle-bad.py, podemos fazer

um teste “Tracing”, onde as variáveis são avaliadas, escrevendo-se os valores que lhe

são atribuídos, em cada iteração do loop while. Vejamos como ficariam neste caso,

temos as variáveis health, trolls, damage e a condição health != 0. As variáveis

recebem valores numéricos, a condição tem valores True (condição verdadeira) ou

False (condição falsa). Veja a tabela abaixo. Observe que nunca a variável sentinela

(health) será zero.

Exercício de programação 1. Modifique o código losing_battle-bad.py, de forma que

o loop infinito seja eliminado.

health trolls damage health != 0

10 0 3 True

7 1 3 True

4 2 3 True

1 3 3 True

-2 4 3 True

-5 5 3 True

-8 6 3 True

25

Tratando Valores Numéricos como Condições

www.python.org

Se eu propusesse a vocês, um exercício simples de programação, onde valores

inteiros, por exemplo 21 + 34, seriam atribuído à uma variável, vocês rapidamente

saberiam, antes de rodar programa, que à variável seria atribuído o valor 55. Mas, se

solicitasse, que a variável, para a qual o valor atribuído é 55 fosse testada como uma

condição lógica (True ou False), vocês com certeza estranhariam. Na verdade Python

permite que valores numéricos e strings tenham um valor lógico intrínseco (True ou

False). Variáveis para as quais valores numéricos ou strings foram atribuídos, podem

ser testadas se são “False” ou “True”, veremos o programa maitre_d.py, disponível no

site:

http://www.delmarlearning.com/companions/content/1435455002/downloads/index.asp

?isbn=1435455002, acesso em: 15 de abril de 2015. Esse programa simula o

tratamento recebido por um cliente, como função da quantia de dinheiro que esse está

disposto a gastar.

print("Welcome to the Chateau D' Food")

print("It seems we are quite full this evening.\n")

money = float(input("How many dollars do you slip the Maitre D'? "))

if money:

print("Ah, I am reminded of a table. Right this way.")

else:

print("Please, sit. It may be a while.")

input("\n\nPress the enter key to exit.")

26

O código está mostrado abaixo, temos uma função input() que lê um valor float que é

atribuído à variável money. Essa variável é testada diretamente com o comando if, se

for diferente de zero terá valor lógico “True” e o bloco referente à condição do if será

executado, caso seja zero, o valor lógico será “False” e o bloco do else será

executado. Assim, a regra é que para números diferentes de zero, serão atribuídos o

valor lógico “True”, para zero será atribuído “False”. Veja, a variável money não é

comparada com nenhum valor, e sim testada do ponto de vista lógico.

Tratando Valores Numéricos como Condições

www.python.org

Welcome to the Chateau D' Food

It seems we are quite full this evening.

How many dollars do you slip the Maitre D'? 35

Ah, I am reminded of a table. Right this way.

Press the enter key to exit.

27

Vamos ao resultado do programa com um valor diferente de 0.

Veja o resultado do programa com o valor zero.

Welcome to the Chateau D' Food

It seems we are quite full this evening.

How many dollars do you slip the Maitre D'? 0

Please, sit. It may be a while.

Press the enter key to exit.

Tratando Valores Numéricos como Condições

www.python.org

print("Welcome to the Chateau D' Food")

print("It seems we are quite full this evening.\n")

money = str(input("How many dollars do you slip the Maitre D'? "))

if money:

print("Ah, I am reminded of a table. Right this way.")

else:

print("Please, sit. It may be a while.")

input("\n\nPress the enter key to exit.") 28

Vamos fazer uma pequena modificação no programa maitre_d.py. Trocamos a função

float() antes da função input() pela função str(), assim a entrada será obrigatoriamente

uma string, a ser atribuída à variável money. Com uma string atribuída à variável

money, só teremos valor lógico “False”, quando tiver uma string vazia atribuída a ela,

que pode ser obtida pressionando-se Enter ao executarmos o código. Todos outros

valores, inclusive “0”, serão considerados “True”, assim, a regra para valores lógicos

de strings, é que todas são “True”, exceto a string vazia “”.

Tratando Valores Numéricos como Condições

www.python.org

Welcome to the Chateau D' Food

It seems we are quite full this evening.

How many dollars do you slip the Maitre D'? Ten

Ah, I am reminded of a table. Right this way.

Press the enter key to exit.

29

Vamos ao resultado do programa com uma string.

Veja o resultado do programa com Enter.

Welcome to the Chateau D' Food

It seems we are quite full this evening.

How many dollars do you slip the Maitre D'?

Please, sit. It may be a while.

Press the enter key to exit.

Tratando Valores Numéricos como Condições

www.python.org

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)

input("\n\nPress the enter key to exit.")

30

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)

input("\n\nPress the enter key to exit.")

31

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)

input("\n\nPress the enter key to exit.")

32

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

1

2

3

4

5

6

8

9

10

Press the enter key to exit.

33

Vamos ao resultado do programa.

Comandos break e continue

www.python.org

Welcome to 'Guess My Number'!

I'm thinking of a number between 1 and 100.

Try to guess it in as few attempts as possible.

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!

Press the enter key to exit.34

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.

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

input("\n\nPress the enter key to exit.")

35

Programa guess_my_number.py

www.python.org

O programa guess_my_number.py está mostrado abaixo. A primeira linha importa o

módulo random, que tem as funções para gerarmos números pseudoaleatórios.

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

input("\n\nPress the enter key to exit.")

36

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

input("\n\nPress the enter key to exit.")

37

Programa guess_my_number.py

www.python.org

Depois usamos a função randint(1,100) do módulo random, para gerar um número

pseudoaleatório entre 1 e 100. O número gerado será atribuído à variável the_number.

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

input("\n\nPress the enter key to exit.")

38

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

input("\n\nPress the enter key to exit.")

39

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

input("\n\nPress the enter key to exit.")

40

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

input("\n\nPress the enter key to exit.")

41

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

input("\n\nPress the enter key to exit.")

42

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

input("\n\nPress the enter key to exit.")

43

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

input("\n\nPress the enter key to exit.")

44

Programa guess_my_number.py

www.python.org

A última linha aguarda o Enter para encerrar o programa.

45

Exercícios de Programação

www.python.org

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 .

Exercício de programação 5. Escreva um programa, onde o jogador troca de lugar

com o computador. Isto é, o jogador escolhe um número aleatório entre 1 e 100 e o

computador tenta que adivinhar que número é esse. Nome do programa:

robot_guess_game.py .

Lista de programas apresentados na aula de hoje:

craps_roller.py

guess_my_number.py

losing_battle-bad.py

maitre_d.py

mood_computer.py

skip_7.py

three_year-old,py

46

Lista de Programas

www.python.org

-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: 15 de abril de 2015.

47

Referências

www.python.org