05. Laços de Repetição (while)
O objetivo de aprendizado deste handout é que, ao final da atividade, você seja capaz de utilizar laços de repetição (não se preocupe, vamos explicar o que é isso) em seus programas em conjunto com as estruturas que vimos nas aulas anteriores (if
, input
, etc.) Para isso, vamos trabalhar com o exemplo de um jogo simples: o programa escolhe um número aleatório e o jogador precisa descobrir qual foi o número escolhido.
Importante
Sempre valide a resposta com o professor ou algum colega que já tenha validado a própria resposta antes de seguir para o próximo exercício.
Aquecimento
Para começar, vamos implementar uma versão do jogo na qual o jogador só tem uma chance para acertar (sim, completamente na sorte).
EXERCÍCIO 1
Repetindo o if
Vamos fazer uma breve reflexão. O que seria necessário alterar no código do exercício 1 para que o jogador tivesse 2 chances? Uma solução rápida seria copiar o bloco do if
, elif
, else
e colar no final do programa. Mas e se o jogador tivesse 5 chances? E 100? E se pudesse continuar tentando enquanto não tivesse adivinhado o número?
EXERCÍCIO 2
EXERCÍCIO 3
Considere a seguinte versão modificada do seu programa:
tem_duvidas = True
if tem_duvidas:
resposta_do_aluno = input('Você está com dúvidas? ')
if resposta_do_aluno == 'não':
print('Parabéns!')
tem_duvidas = False
else:
print('Pratique mais')
if tem_duvidas:
resposta_do_aluno = input('Você está com dúvidas? ')
if resposta_do_aluno == 'não':
print('Parabéns!')
tem_duvidas = False
else:
print('Pratique mais')
Existem duas possibilidades:
- Se o usuário responder
'não'
na primeira vez, a variáveltem_duvidas
será atualizada comFalse
. Assim, o bloco do segundoif tem_duvidas
não será executado. - Se o usuário responder qualquer coisa diferente de
'não'
, a variáveltem_duvidas
continuará valendoTrue
. Assim, o bloco do segundoif tem_duvidas
será executado e o programa perguntará novamente se o aluno tem dúvidas.
EXERCÍCIO 4
EXERCÍCIO
Com a modificação acima seu código deve ficar semelhante a:
tem_duvidas = True
if tem_duvidas:
resposta_do_aluno = input('Você está com dúvidas? ')
if resposta_do_aluno == 'não':
print('Parabéns!')
tem_duvidas = False
else:
print('Pratique mais')
if tem_duvidas:
resposta_do_aluno = input('Você está com dúvidas? ')
if resposta_do_aluno == 'não':
print('Parabéns!')
tem_duvidas = False
else:
print('Pratique mais')
if tem_duvidas:
resposta_do_aluno = input('Você está com dúvidas? ')
if resposta_do_aluno == 'não':
print('Parabéns!')
tem_duvidas = False
else:
print('Pratique mais')
if tem_duvidas:
resposta_do_aluno = input('Você está com dúvidas? ')
if resposta_do_aluno == 'não':
print('Parabéns!')
tem_duvidas = False
else:
print('Pratique mais')
if tem_duvidas:
resposta_do_aluno = input('Você está com dúvidas? ')
if resposta_do_aluno == 'não':
print('Parabéns!')
tem_duvidas = False
else:
print('Pratique mais')
O operador while
Se quiséssemos repetir a pergunta mais 100 vezes, poderíamos continuar copiando e colando o código. Um problema é que o código ficaria cada vez mais difícil de manter. Imagine que você decidiu aceitar a resposta 'não tenho'
ao invés de somente 'não'
. Agora você teria pelo menos 100 linhas diferentes para alterar no seu código.
Ok, é chato e pode dar bastante trabalho, mas ainda dá para fazer. Agora, o que precisaríamos fazer para que o programa continuasse perguntando enquanto o usuário não respondesse "não". Se copiássemos o mesmo bloco de código 1000 vezes ele poderia responder 'sim'
nas 1001 primeiras vezes. Se fizéssemos o mesmo 100000 de vezes, o usuário ainda poderia (por mais que improvável) responder 'sim'
nas 100001 primeiras vezes. Assim, vemos que é necessário utilizar alguma outra estrutura, no caso, o operador while
. Vamos começar relembrando o que o if
faz:
O while
funciona de maneira similar, mas ao final da execução do bloco, a condição é reavaliada e, caso seja verdadeira, o bloco é executado novamente enquanto a condição for verdadeira:
EXERCÍCIO 5
EXERCÍCIO 6
EXERCÍCIO 7
Alguns padrões de uso do while
Vamos trabalhar agora com alguns padrões comuns de uso do while
. Procure entender a lógica dos programas a seguir. De modo geral sempre será necessário adaptar o padrão para a sua aplicação específica.
Padrões de uso do while
: contagem
Podemos utilizar o while
para fazer contagens. O vídeo a seguir explica o padrão de uso do while
com contadores: https://youtu.be/wBjnd2RaJKE.
No exemplo do vídeo, nós contamos quantas vezes o bloco do while
é executado (lembrando que em programação começamos a contar do 0). Essa informação é armazenada na variável contador
.
Você pode usar qualquer nome de variável para o contador. No nosso exemplo nós utilizamos contador
para deixar o seu objetivo explícito. Entretanto, o uso de contadores é tão comum, que é normal encontrar variáveis que servem como contadores com nomes curtos, como i
ou j
. Independentemente do nome da variável, um contador é uma variável utilizada para guardar o resultado da contagem.
EXERCÍCIO 8
Padrões de uso do while
: validação
No exercício 8 temos um exemplo de como usar o while
para validar uma entrada. Nesse caso, o programa vai ficar "preso" no while
até que o usuário digite um número válido (no exemplo, um número par).
EXERCÍCIO 9
EXERCÍCIO 10
EXERCÍCIO 11
EXERCÍCIO 12