Jak emulovat smyčky Do-While v Pythonu

V tomto tutoriálu se naučíte, jak emulovat smyčku do-while v Pythonu.

V jakémkoli programovacím jazyce vám smyčky pomáhají opakovaně provádět určité akce v závislosti na podmínkách smyčky. Python podporuje konstrukce cyklu while a for, ale nativně nepodporuje cyklus do-while.

Smyčku do-while však můžete emulovat tak, že pochopíte, jak funguje – pomocí existujících smyček a příkazů řízení smyček v Pythonu.

Jak to udělat, se dozvíte během několika příštích minut. Pojďme začít!

Co je konstrukce Do-While Loop?

Pokud jste programovali v jazycích jako C nebo C++, pravděpodobně jste narazili na konstrukci smyčky do-while.

Ve smyčce do-while se nejprve provede sada příkazů v těle smyčky – v rámci bloku ohraničeného složenými závorkami – a poté se zkontroluje podmínka smyčky.

Následující příklady C můžete spustit v online kompilátoru C etechblog.cz – přímo z vašeho prohlížeče.

Zvažte následující fragment kódu:

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

Zde je výstup.

Output

Do-While loop: 
Loop runs...

Ve výše uvedeném příkladu:

  • Hodnota count je 1 a podmínka opakování je počet < 0. Smyčka se však spustí jednou, i když je podmínka opakování zpočátku False.
  • To je na rozdíl od smyčky while, která se provede pouze tehdy, je-li podmínka opakování na prvním místě True.
//while_example1

#include <stdio.h>

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

    return 0;
}

Jak již bylo zmíněno, podmínka opakování, počet < 0 je False, zpočátku je proměnná count inicializována na 1. Takže po kompilaci a spuštění výše uvedeného kódu vidíme, že příkaz v těle smyčky while není proveden.

Output

While loop: 
//loop body does not run!

Zatímco vs. Do-While: Přehled rozdílů

Podívejme se blíže na rozdíly mezi smyčkami while a do-while.

Zvažte tento příklad:

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

Ve výše uvedené buňce kódu:

  • Proměnná počet je inicializována na 1.
  • Používáme smyčku do-while.
  • Proměnná počet se při každém průchodu smyčkou zvýší o 1 a podmínka smyčky je nastavena na počet < 5.
  Jak nainstalovat rozšíření do VLC Player

Zde je vizuální vysvětlení toho, jak ke spuštění dochází: jak funguje smyčka do-while a čtyřikrát kontroluje podmínku smyčky.

Output

Do-while loop: 
1
2
3
4

Pokud místo toho použijete smyčku while, máme toto.

//while_example2

#include <stdio.h>

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

    return 0;
}

Obrázek níže vysvětluje provádění cyklu while; v tomto příkladu cyklus while kontroluje podmínku opakování pětkrát.

Output

While loop: 
1
2
3
4

Ačkoli jsou výstupy pro výše uvedené smyčky while a do-while totožné, existují určité jemné rozdíly.

V cyklu while je na prvním místě kontrola podmínky a poté tělo smyčky. Pokud tedy chcete, aby smyčka běžela K-krát, mělo by být přesně K běhů, kde je podmínka opakování True. V iteraci číslo K+1 se podmínka stane nepravdivou a ovládací prvek vypadne ze smyčky.

Na druhou stranu, pokud použijete smyčku do-while: podmínka smyčky je kontrolována pro K-tý čas až poté, co K projde smyčkou.

Proč je tedy toto okrajové zlepšení užitečné?🤔

Předpokládejme, že podmínka smyčky je výpočetně nákladná: například zahrnuje volání rekurzivní funkce, složitou matematickou operaci a tak dále.

V takových případech by pro K opakování těla smyčky bylo výhodné místo toho použít smyčku do-while.

Zatímco vs. Do-While Summary

Pojďme si shrnout klíčové rozdíly, které jsme se naučili. 👩‍🏫

Zatímco LoopDo-While LoopCheck pro podmínku smyčky: Před provedením těla smyčkyCheck pro podmínku smyčky: Po provedení těla smyčky Pokud je podmínka zpočátku False, tělo smyčky se neprovede. Pokud je podmínka zpočátku False, tělo smyčky se provede přesně jednou.Podmínka opakování je zkontrolována K-krát pro K průchody smyčkou.Podmínka smyčky se kontroluje K-1krát pro K průchody smyčkou.Kdy použít smyčku while?
– Smyčka by měla běžet tak dlouho, dokud je podmínka True
– Pro vstupní řízené smyčky
– Když podmínka smyčky není výpočetně nákladná Kdy použít smyčku do-while?
– Smyčka by měla proběhnout alespoň jednou pro počáteční podmínku falešné smyčky
– Pro smyčky s regulací výstupu
– Když je stav smyčky výpočetně nákladný

  Jak zkontrolovat specifikace hardwaru na Chromebooku

Emulace chování smyčky během běhu v Pythonu

Z předchozí části máme následující dvě podmínky pro emulaci cyklu do-while:

  • Příkazy v těle smyčky by se měly provést alespoň jednou – bez ohledu na to, zda je podmínka smyčky True nebo False.
  • Podmínka by měla být zkontrolována po provedení příkazů v těle smyčky. Pokud je podmínka False, ovládací prvek by se měl vymanit ze smyčky: opustit řízení.

Infinite While Loop and Break Statement v Pythonu

V Pythonu můžete definovat nekonečnou smyčku while, jak je ukázáno níže.

while True:
    pass

# Instead of True, you can have any condition that is always True

while always-True-condition:
   pass

Příkaz break lze použít k opuštění těla smyčky a přenesení řízení na první příkaz mimo tělo smyčky.

while <condition>:
    if <some-condition>:
        break

V úplně prvním příkladu smyčky do-while v C je podmínkou pro pokračování smyčky počet < 0. Podmínka pro opuštění smyčky je tedy hodnota počtu nula nebo větší než nula (počet >= 0).

Zde je emulace cyklu do-while v Pythonu:

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

Python Do-While Loop příklady

Vrátíme se k příkladům z předchozí části a přepíšeme je v Pythonu emulací cyklu do while.

#1. Vraťme se k příkladu: tisk hodnot proměnné počet, když je počet menší než pět.

Víme, jak definovat nekonečnou smyčku, aby se tělo smyčky provedlo alespoň jednou.

Smyčka by měla pokračovat tak dlouho, dokud je počet menší než pět. Proto, když počet dosáhne pěti, měli bychom se vymanit ze smyčky. Takže počet == 5 je výstupní kontrolní podmínka.

Když to dáme dohromady, máme:

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. Hru na hádání čísel můžeme také přepsat jako konstrukt do-while v Pythonu.

  Oprava selhala při inicializaci služby BattlEye Obecná chyba

Ve hře na hádání čísel ověřujeme odhady uživatele proti předem definovanému tajnému číslu. Uživatel by měl uhodnout tajné číslo v rámci určitého maximálního povoleného počtu pokusů, řekněme max_guesses.

Kód by měl uživatele vyzvat k zadání, bez ohledu na to, zda je jeho odhad správný nebo špatný. Můžeme to udělat pomocí nekonečné smyčky while.

Kdy bychom se tedy měli vymanit ze smyčky?

Ovládací prvek by se měl vymanit ze smyčky, když dojde k některé z následujících situací:

  • Když uživatel uhodne číslo
  • Když uživatel ještě neuhádl číslo, ale vyčerpal počet dostupných tipů. Počet nesprávných odhadů uživatelem = max_guesses.
  • Níže uvedená buňka kódu ukazuje, jak to můžeme udělat.

    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

    Namísto vyrušení ze smyčky můžeme přidat vysvětlující příkazy print(), když narazíme na každou z výše uvedených podmínek, a poté se ze smyčky vymanit.

    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íže jsou uvedeny dva ukázkové výstupy.

    V tomto ukázkovém výstupu se příkaz break přeruší ze smyčky, 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!
    

    Zde je další ukázkový výstup, když uživatel dosáhne maximálního počtu dostupných odhadů, ale neuhodne správně tajné čí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 tutoriál pomohl pochopit, jak emulovat smyčku do-while v Pythonu.

    Zde jsou hlavní poznatky:

    • Použijte nekonečnou smyčku, abyste zajistili, že se tělo smyčky spustí alespoň jednou. Může to být triviální nekonečná smyčka, jako je while True, nebo to může být while , takže podmínka je vždy True.
    • Zkontrolujte podmínku ukončení uvnitř smyčky a použijte příkaz break k opuštění smyčky za určité podmínky.

    Dále se naučte, jak používat cykly for a funkci enumerate() v Pythonu.