Python - Guia prático para Iniciantes
  • Introdução
  • Você deveria aprender Python
  • Começando com Python
  • Desvios condicionais, fazendo seu programa tomar decisões
  • Valores None, Strings e Listas
  • Listas
  • Laços de Repetição - I
  • Laços de Repetição - II
  • Dicionários
  • Modularização de código com Funções
  • Expressões Lambda
  • Conclusão
  • Resolução dos exercícios
Powered by GitBook
On this page

Was this helpful?

Laços de Repetição - II

O capítulo anterior introduziu o conceito de laços de repetição utilizando o comando for. Mas esta não é a única forma de realizar este tipo de operação!

Além do for, temos o comando while!

Sua sintaxe é um pouco diferente da sintaxe do for, mas muito parecida com a sintaxe do comando if, mas não se engane, as semelhanças entre o if e o while acabam aí.

Para fins de exemplo, vamos utilizar a mesma lista do capítulo passado!

numeros = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]

A ideia por trás do comando while é repetir uma tarefa enquanto uma condição for verdadeira, ou seja, na declaração do comando precisamos realizar uma comparação, caso esta comparação seja verdadeira o bloco de instruções do while será executado.

O programa voltará para o início do bloco depois que a última instrução deste comando for executada, fazendo novamente a comparação.

Quando esta comparação resultar em um valor False o bloco de instruções do while será pulado e o programa continuará normalmente. Vamos fazer um exemplo?

Vamos imprimir todos os números da lista numeros, veja:

numeros = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]

posicao = 0
while posicao < len(numeros):
    print(numeros[posicao])
    posicao += 1

Note que acaba ficando um pouco diferente do comando for. Neste caso precisamos armazenar a posição da lista em uma variável e alterá-la manualmente a cada repetição do laço.

Isso pode causar um problema sério em seu programa! Se por um acaso esquecermos de alterar os valores que fazem a comparação do while podemos ficar presos em um loop infinito, ou seja, nosso programa nunca irá acabar!

Vamos fazer a experiência! Retire a instrução que adiciona 1 para a variável posicao e execute o programa:

numeros = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]

posicao = 0
while posicao < len(numeros):
    print(numeros[posicao])

Portanto, não esqueça de alterar os valores que influenciam na comparação!

Se por algum motivo aleatório, você decidir que quer fazer um laço de repetição infinito, basta utilizar o comando desta forma:

while True:
    print("INFINITO")

Ao invés de realizarmos uma comparação, marcamos diretamente o resultado da comparação como True, mas cuidado, isso pode dar ruim!

Agora vamos para dois novos comandos que podem ser utilizados em um laço de repetição, devo dizer que, não gosto de nenhum deles, mas eles existem e não pretendo ignorá-los.

São eles: continue e o break, ambos interferem nas interações do laço de repetição.

O comando continue faz com que o laço de repetição volte para o início do bloco, ou seja, para que ele continue com a próxima iteração, mas interrompe imediatamente a interação atual.

Vamos fazer um exemplo para escrever todos os elementos da lista de números, exceto a posição 5:

posicao = 0
while posicao < len(numeros):
    posicao += 1
    if posicao == 5:
        continue
    print(numeros[posicao-1])

Eis a questão que me faz não gostar desta instrução, você pode simplesmente remanejar as instruções para que não precise utilizar o continue, veja:

posicao = 0
while posicao < len(numeros):
    posicao += 1
    if posicao != 5:
        print(numeros[posicao-1])

O resultado final é o mesmo e neste caso você não interrompe o fluxo principal do programa.

A outra instrução é o break, neste caso a interrupção é mais agressiva, ela interrompe o próprio laço de repetição inteiro, não somente a iteração atual.

Isso significa que, ao utilizarmos o comando break vamos sair do laço de repetição mesmo se comparação ainda for verdadeira, quebrando inclusive loops infinitos.

posicao = 0
while posicao < len(numeros):
    posicao += 1
    if posicao == 5:
        break
    print(numeros[posicao-1])

Com o código acima, seriam exibidos os números da posição 0 até a posição 4. Nenhum número depois da posição 4 será exibido no console, porque o break interrompeu todo o laço de repetição.

A estratégia para evitar o break é simples. Se você está utilizando-o provavelmente sua lógica de verificação no laço de repetição não está cumprindo seu papel. No exemplo acima não queremos percorrer até o final da lista como a condição sugere, mas sim, até a quarta posição:

posicao = 0
while posicao < 5:
    print(numeros[posicao])
    posicao += 1

Vamos Praticar

  1. Faça um programa que inicialize uma lista de compras com 5 itens diferentes e exiba todos utilizando um laço de repetição while.

  2. Faça um programa que inicialize uma lista com os valores de 1 até 10 e depois exiba apenas os números pares utilizando while.

  3. Faça um programa que inicialize uma lista vazia, solicite ao usuário 10 números ímpares diferentes, um por vez. Caso o número digitado seja par, solicite novamente um número, até que o valor seja um número ímpar. Depois disso, exiba os 10 números digitados.

  4. Faça um programa que exiba um menu para o usuário selecionar uma das três opções:

    • 1 - Olá mundo

    • 2 - Eu programo em Python

    • 3 - Laços de repetição

O programa deve solicitar ao usuário uma das 3 opções, caso o usuário digite um valor diferente das opções (1, 2 ou 3), o programa deve apresentar novamente o menu de opções até que uma delas seja escolhida. Por fim, o programa deve exibir uma mensagem diferente para cada opção.

  1. Remove a instrução break e a instrução continue do laço de repetição abaixo:

    numeros = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    posicao = 0
    while posicao < len(numeros):
     posicao += 1
     if posicao == 3:
         continue
     elif posicao == 6:
         break
     print(numeros[posicao-1])

    Atenção

PreviousLaços de Repetição - INextDicionários

Last updated 5 years ago

Was this helpful?

Loop infinito

É fortemente recomendado que você tente fazer os exercícios antes de ver as respostas. Você pode encontrar as respostas .

aqui