Domine Loops Do-While em Python: Guia Completo com Exemplos

Neste guia, você descobrirá como simular um ciclo do-while usando Python.

Em qualquer linguagem de programação, os ciclos são ferramentas que ajudam a executar ações específicas repetidamente, com base em uma condição. Python oferece suporte aos ciclos while e for, mas não inclui um ciclo do-while nativo.

Apesar disso, você pode replicar um ciclo do-while ao entender seu funcionamento — empregando os ciclos já existentes e as instruções de controle em Python.

Nos próximos minutos, você aprenderá como fazer isso. Vamos começar!

O que é a Estrutura do Ciclo Do-While?

Se você já programou em linguagens como C ou C++, provavelmente já se deparou com a estrutura do ciclo do-while.

Em um ciclo do-while, as instruções dentro do corpo do ciclo – delimitadas por chaves – são executadas primeiro. Após isso, a condição do ciclo é verificada.

Você pode testar os exemplos de código C seguintes no compilador C online do etechpt.com, diretamente do seu navegador.

Considere o seguinte trecho de código:

//do_while_example1

#include <stdio.h>

int main() {
    int count = 1;
    printf("Do-While loop: n");
    
    do{
        printf("Loop runs...");
        }while(count<0);

    return 0;
}

Aqui está o resultado.

Output

Do-While loop: 
Loop runs...

No exemplo acima:

  • O valor de ‘count’ é 1 e a condição do ciclo é ‘count < 0’. No entanto, o ciclo é executado uma vez, mesmo que a condição seja inicialmente falsa.
  • Isso contrasta com um ciclo while, que só é executado se a condição for verdadeira desde o início.
//while_example1

#include <stdio.h>

int main() {
    int count = 1;
    printf("While loop: n");
    
    while(count<0){
        printf("Loop runs...");
        }

    return 0;
}

Como mencionado, a condição de ciclo ‘count < 0’ é falsa inicialmente, pois a variável ‘count’ é inicializada com 1. Assim, ao compilar e executar o código acima, percebemos que a instrução no corpo do ciclo while não é executada.

Output

While loop: 
//corpo do ciclo não é executado!

While vs. Do-While: Uma Comparação das Diferenças

Vamos analisar as diferenças entre os ciclos while e do-while.

Considere este exemplo:

//do_while_example2

#include <stdio.h>

int main() {
    int count = 1;
    printf("Do-while loop: n");
    
    do{
       printf("%dn",count);
       count++;
    }while(count<5);

    return 0;
}

No código acima:

  • A variável ‘count’ começa com o valor 1.
  • Estamos utilizando um ciclo do-while.
  • A variável ‘count’ é incrementada em 1 a cada passagem pelo ciclo, e a condição do ciclo é ‘count < 5’.

Aqui está uma representação visual da execução: como o ciclo do-while opera e verifica a condição quatro vezes.

Output

Do-while loop: 
1
2
3
4

Se você usasse um ciclo while, o resultado seria este:

//while_example2

#include <stdio.h>

int main() {
    int count = 1;
    printf("While loop: n");
    
    while(count<5){
       printf("%dn",count);
       count++;
    };

    return 0;
}

A imagem abaixo demonstra a execução do ciclo while; neste exemplo, o ciclo while verifica a condição de ciclo cinco vezes.

Output

While loop: 
1
2
3
4

Embora os resultados dos ciclos while e do-while sejam idênticos, existem algumas diferenças sutis.

Em um ciclo while, a verificação da condição vem antes, seguida pelo corpo do ciclo. Portanto, se você deseja que o ciclo seja executado K vezes, deve haver exatamente K execuções em que a condição do ciclo é verdadeira. Na iteração K+1, a condição se torna falsa, e o controle sai do ciclo.

Por outro lado, ao usar um ciclo do-while, a condição do ciclo é verificada pela K-ésima vez somente após K passagens pelo ciclo.

Então, por que essa diferença sutil é útil?🤔

Suponha que a condição do ciclo seja computacionalmente custosa, envolvendo uma função recursiva, uma operação matemática complexa, etc.

Nesses casos, para K repetições do corpo do ciclo, usar um ciclo do-while pode ser mais eficiente.

Resumo: While vs. Do-While

Vamos resumir as principais diferenças em uma tabela. 👩‍🏫

Ciclo While Ciclo Do-While
Verifica a condição: Antes da execução do corpo do ciclo Verifica a condição: Após a execução do corpo do ciclo
Se a condição for falsa inicialmente, o corpo do ciclo não será executado. Se a condição for falsa inicialmente, o corpo do ciclo é executado uma vez.
A condição do ciclo é verificada K vezes para K execuções do ciclo. A condição do ciclo é verificada K-1 vezes para K execuções do ciclo.
Quando usar um ciclo while?
– O ciclo deve ser executado enquanto a condição for verdadeira
– Para ciclos controlados por entrada
– Quando a condição do ciclo não é computacionalmente cara
Quando usar um ciclo do-while?
– O ciclo deve ser executado pelo menos uma vez, mesmo que a condição seja inicialmente falsa
– Para ciclos controlados por saída
– Quando a condição do ciclo é computacionalmente cara

Simulando o Comportamento do Ciclo Do-While em Python

Com base na seção anterior, temos as seguintes condições para simular um ciclo do-while:

  • As instruções no corpo do ciclo devem ser executadas pelo menos uma vez, independentemente da condição do ciclo ser verdadeira ou falsa.
  • A condição deve ser verificada após a execução das instruções no corpo do ciclo. Se a condição for falsa, o controle deve sair do ciclo.

Ciclo While Infinito e Instrução Break em Python

Você pode definir um ciclo while infinito em Python, como mostrado abaixo.

while True:
    pass

# Em vez de True, você pode usar qualquer condição que seja sempre verdadeira

while condição-sempre-verdadeira:
   pass

A instrução break pode ser usada para interromper a execução de um ciclo e transferir o controle para a primeira instrução fora do corpo do ciclo.

while <condição>:
    if <alguma-condição>:
        break

No primeiro exemplo de ciclo do-while em C, a condição para continuar o ciclo é ‘count < 0’. Portanto, a condição para sair do ciclo é ‘count’ igual ou maior que zero (‘count >= 0’).

Aqui está a simulação do ciclo do-while em Python:

count = 1
while True:
    print("Loop runs...")
    if(count >= 0):
        break

Exemplos de Ciclo Do-While em Python

Vamos revisar os exemplos da seção anterior e reescrevê-los em Python, simulando o ciclo do-while.

#1. Vamos revisitar o exemplo: imprimir os valores da variável ‘count’ quando ‘count’ for menor que cinco.

Sabemos como definir um ciclo infinito para garantir que o corpo do ciclo seja executado pelo menos uma vez.

O ciclo deve continuar enquanto ‘count’ for menor que cinco. Portanto, quando ‘count’ atingir cinco, devemos sair do ciclo. Assim, ‘count == 5’ é a condição de saída.

Juntando tudo, temos:

count = 1
while True:
  print(f"Count is {count}")
  count += 1
  if count==5:
    break
Output

Count is 1
Count is 2
Count is 3
Count is 4

#2. Podemos também reescrever o jogo de adivinhação de números como uma estrutura do-while em Python.

No jogo de adivinhação de números, validamos os palpites do usuário em relação a um número secreto predefinido. O usuário deve adivinhar o número secreto dentro de um número máximo de tentativas permitidas, digamos, ‘max_guesses’.

O código deve solicitar a entrada do usuário, independentemente de seu palpite estar correto ou incorreto. Podemos fazer isso usando um ciclo while infinito.

Então, quando devemos sair do ciclo?

O controle deve sair do ciclo quando uma das seguintes condições ocorrer:

  • Quando o usuário adivinhar o número.
  • Quando o usuário não adivinhar o número, mas esgotar o número de palpites disponíveis. O número de palpites incorretos do usuário = ‘max_guesses’.

O código abaixo demonstra como podemos implementar isso.

import random

low, high = 5,50

secret_number = random.choice(range(low,high))

max_guesses = 10

num_guesses = 0

while True:
    guess = int(input("nGuess a number:"))
    num_guesses += 1
    
    conditions = [num_guesses==max_guesses,guess==secret_number]
    
    if any(conditions):
        break

Em vez de simplesmente sair do ciclo, podemos adicionar instruções print() para exibir mensagens quando cada uma das condições acima for encontrada, e depois sair do ciclo.

import random

low, high = 5,50

secret_number = random.choice(range(low,high))

print(secret_number)

max_guesses = 10

num_guesses = 0

while True:
    guess = int(input("nGuess a number:"))
    num_guesses += 1
    
    if guess==secret_number:
        print("Congrats, you guessed it right!")
        break
    if num_guesses==max_guesses:
        print("Sorry, you have no more guesses left!")
        break

Dois exemplos de saídas são mostrados abaixo.

Nesta saída de exemplo, a instrução ‘break’ sai do ciclo quando o usuário acerta o número secreto.

# Exemplo de saída quando secret_number = 43 e o usuário acerta!

Guess a number:4

Guess a number:3

Guess a number:43
Congrats, you guessed it right!

Aqui está outra saída de exemplo quando o usuário atinge o número máximo de tentativas disponíveis, mas não consegue adivinhar o número secreto corretamente.

# Exemplo de saída quando secret_number = 33 e o usuário não acerta!

Guess a number:3

Guess a number:15

Guess a number:21

Guess a number:50

Guess a number:17

Guess a number:6

Guess a number:18

Guess a number:5

Guess a number:12

Guess a number:43
Sorry, you have no more guesses left!

Conclusão

Espero que este guia tenha ajudado você a entender como simular um ciclo do-while em Python.

Aqui estão os principais pontos:

  • Use um ciclo infinito para garantir que o corpo do ciclo seja executado pelo menos uma vez. Pode ser um ciclo infinito simples, como ‘while True’, ou ‘while <condição>’, desde que a condição seja sempre verdadeira.
  • Verifique a condição de saída dentro do ciclo e use a instrução ‘break’ para sair do ciclo sob uma condição específica.

Em seguida, explore como usar ciclos ‘for’ e a função ‘enumerate()’ em Python.