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.