Jak emulovat smyčky Do-While v Pythonu

Jak simulovat cyklus do-while v Pythonu

V tomto návodu se podíváme na to, jak lze v Pythonu napodobit chování cyklu do-while. Ačkoli Python nativně cyklus do-while nepodporuje, ukážeme si, jak ho efektivně simulovat pomocí existujících struktur.

V programování se smyčky používají k opakovanému provádění určitého bloku kódu na základě stanovených podmínek. Python nabízí smyčky while a for, ale chybí mu přímá podpora cyklu do-while. Nicméně, s trochou kreativity a pochopením principů fungování cyklu do-while, můžeme jeho chování simulovat.

Během následujících minut si ukážeme, jak na to. Začneme se základní definicí a poté přejdeme k praktickému použití. Pojďme na to!

Co je to cyklus Do-While?

Pokud jste měli zkušenosti s jazyky C nebo C++, je vám cyklus do-while pravděpodobně známý. Tento typ cyklu zaručuje, že se kód uvnitř smyčky provede alespoň jednou, a to ještě předtím, než se ověří podmínka pro jeho další běh.

Konkrétně, sada příkazů v těle smyčky (označená složenými závorkami) se provede jako první a až poté se zkontroluje podmínka. Pokud je podmínka splněna, smyčka se opakuje, jinak se ukončí.

Níže si prohlédneme příklad kódu v jazyce C, který si můžete vyzkoušet v online kompilátoru C:

 //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;
 }
 

Výstup tohoto kódu je následující:

 Output
 Do-While loop: 
 Loop runs...
 

V tomto příkladu:

  • Počáteční hodnota proměnné count je 1 a podmínka pro opakování smyčky je count < 0. I přesto, že je tato podmínka na začátku nepravdivá, tělo smyčky se provede alespoň jednou.
  • To je rozdíl oproti smyčce while, kde se tělo smyčky provede pouze tehdy, pokud je podmínka na začátku pravdivá.

Podívejme se na příklad smyčky while:

 //while_example1
 #include <stdio.h>
 int main() {
    int count = 1;
    printf("While loop: \n");
    while(count<0){
        printf("Loop runs...");
    }
    return 0;
 }
 

Vzhledem k tomu, že proměnná count má počáteční hodnotu 1 a podmínka count < 0 je nepravdivá, kód v těle smyčky while se neprovede. Následuje výstup:

 Output
 While loop: 
 //loop body does not run!
 

Smyčka While vs. Do-While: Klíčové rozdíly

Porovnejme si nyní podrobněji rozdíly mezi smyčkami while a do-while.

Pro názornost se podíváme na další příklad v jazyce C:

 //do_while_example2
 #include <stdio.h>
 int main() {
    int count = 1;
    printf("Do-while loop: \n");
    do{
       printf("%d\n",count);
       count++;
    }while(count<5);
    return 0;
 }
 

V tomto kódu:

  • Proměnná count je inicializována na hodnotu 1.
  • Používáme cyklus do-while.
  • Hodnota proměnné count se v každém průchodu smyčkou zvýší o 1. Podmínka pro pokračování smyčky je count < 5.

Zde je grafické znázornění, jak smyčka do-while funguje a jak se provádí kontrola podmínky:

 Output
 Do-while loop: 
 1
 2
 3
 4
 

Pokud bychom místo toho použili smyčku while, kód by vypadal takto:

 //while_example2
 #include <stdio.h>
 int main() {
    int count = 1;
    printf("While loop: \n");
    while(count<5){
       printf("%d\n",count);
       count++;
    };
    return 0;
 }
 

Níže je obrázek, který vizualizuje běh smyčky while. V tomto případě se kontrola podmínky opakování provádí celkem pětkrát.

 Output
 While loop: 
 1
 2
 3
 4
 

Ačkoliv výstupy obou smyček jsou v tomto případě stejné, existují mezi nimi jemné rozdíly.

Ve smyčce while se nejdříve ověří podmínka a až poté se provede tělo smyčky. To znamená, že pokud chceme, aby se smyčka provedla K-krát, musí být K-krát splněna podmínka. Při K+1. iteraci se podmínka stane nepravdivou a smyčka se ukončí.

Naproti tomu u smyčky do-while se kontroluje podmínka pro K-tou iteraci až po provedení těla smyčky K-krát.

Proč je tento jemný rozdíl důležitý? Představte si situaci, kdy je vyhodnocení podmínky výpočetně náročné, například když zahrnuje volání rekurzivní funkce nebo složité matematické operace.

V takových případech by bylo pro K opakování těla smyčky výhodnější použít cyklus do-while.

Shrnutí rozdílů mezi While a Do-While

Shrňme si klíčové rozdíly mezi smyčkami while a do-while:

Vlastnost Smyčka While Smyčka Do-While
Kontrola podmínky Před provedením těla smyčky Po provedení těla smyčky
Počáteční podmínka False Tělo smyčky se neprovede Tělo smyčky se provede alespoň jednou
Kontrola podmínky při K průchodech K-krát K-1krát
Kdy použít while? – Smyčka má běžet dokud je podmínka True
– Pro smyčky řízené vstupem
– Když kontrola podmínky není výpočetně náročná
– Smyčka má běžet alespoň jednou i při počáteční False podmínce
– Pro smyčky řízené výstupem
– Když je kontrola podmínky výpočetně náročná

Simulace chování smyčky Do-While v Pythonu

Z předchozího textu vyplývají dvě klíčové podmínky pro simulaci cyklu do-while v Pythonu:

  • Kód v těle smyčky se musí provést alespoň jednou, bez ohledu na to, zda je podmínka splněna.
  • Podmínka se musí kontrolovat až po provedení kódu v těle smyčky. Pokud je podmínka nepravdivá, smyčka se ukončí.

Nekonečná smyčka While a Příkaz Break v Pythonu

V Pythonu můžeme vytvořit nekonečnou smyčku while pomocí následujícího zápisu:

 while True:
    pass
 # Místo True můžete použít libovolnou podmínku, která je vždy pravdivá
 while always-True-condition:
    pass
 

Příkaz break se používá pro opuštění těla smyčky a přesunutí řízení na první příkaz, který následuje po smyčce:

 while <podmínka>:
    if <nějaká-podmínka>:
        break
 

V úplně prvním příkladu cyklu do-while v jazyce C je podmínka pro pokračování smyčky count < 0. Podmínkou pro opuštění smyčky je tedy count >= 0.

Zde je simulace cyklu do-while v Pythonu:

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

Příklady cyklu Do-While v Pythonu

Podívejme se na několik praktických příkladů, jak v Pythonu simulovat cyklus do-while.

#1. Vraťme se k dřívějšímu příkladu, kde jsme vypisovali hodnotu proměnné count, dokud byla menší než 5.

Víme, že můžeme použít nekonečnou smyčku, abychom zajistili, že se tělo smyčky provede alespoň jednou. Smyčka by měla pokračovat, dokud je proměnná count menší než 5, a měla by se ukončit, když count dosáhne hodnoty 5. Zde je řešení:

 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. Můžeme také přepsat hru na hádání čísel pomocí konstrukce do-while v Pythonu. V této hře uživatel hádá předem určené tajné číslo a má omezený počet pokusů (max_guesses).

Kód by měl uživatele vyzvat k zadání tipu bez ohledu na to, zda byl tip správný či nikoli. K tomu můžeme použít nekonečnou smyčku while. Smyčku ukončíme, pokud:

  • Uživatel správně uhodne číslo.
  • Uživatel vyčerpá všechny pokusy (počet nesprávných pokusů se rovná max_guesses).

Níže uvedený kód ukazuje, jak na to:

 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
 

Pro přehlednost můžeme kód obohatit o vysvětlující zprávy, které se vypíší před ukončením smyčky:

 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
 

Následují dva příklady výstupů:

V prvním příkladu se smyčka ukončí, když uživatel správně uhodne tajné číslo.

 # Sample output when secret_number = 43 and user gets it right!
 Guess a number:4
 Guess a number:3
 Guess a number:43
 Congrats, you guessed it right!
 

V dalším příkladu uživatel překročí maximální počet pokusů, ale neuhodne správné číslo:

 # Sample output when secret_number = 33 and user fails to guess it right!
 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!
 

Závěr

Doufám, že vám tento návod pomohl porozumět tomu, jak simulovat smyčku do-while v Pythonu. Zde jsou klíčové body:

  • Použijte nekonečnou smyčku, abyste zajistili, že se kód uvnitř smyčky provede alespoň jednou. Může to být jednoduchá nekonečná smyčka jako while True nebo while <podmínka>, kde je <podmínka> vždy pravdivá.
  • Uvnitř smyčky kontrolujte podmínku pro ukončení a použijte příkaz break pro ukončení smyčky, pokud je splněna daná podmínka.

Dále se můžete seznámit s tím, jak v Pythonu používat cykly for a funkci enumerate().