Hur man emulerar Do-While-loopar i Python

I den här handledningen lär du dig hur du emulerar en do-while loop i Python.

I alla programmeringsspråk hjälper loopar dig att utföra vissa åtgärder upprepade gånger, beroende på ett loopingtillstånd. Python stöder while- och for loop-konstruktioner men stöder inte inbyggt do-while-loopen.

Du kan dock emulera en do-while-loop genom att förstå hur den fungerar – med hjälp av befintliga loopar och loopkontrollsatser i Python.

Du kommer att lära dig hur du gör detta under de närmaste minuterna. Låt oss börja!

Vad är Do-While Loop-konstruktionen?

Om du har programmerat i språk som C eller C++, skulle du förmodligen ha stött på do-while loop-konstruktionen.

I en do-while-slinga exekveras uppsättningen av satser i loopkroppen – inom blocket avgränsat av klammerparenteser – först och sedan kontrolleras loopingvillkoret.

Du kan köra följande C-exempel i adminvista.com online C-kompilator – direkt från din webbläsare.

Tänk på följande kodavsnitt:

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

Här är utgången.

Output

Do-While loop: 
Loop runs...

I exemplet ovan:

  • Värdet på count är 1, och looping-villkoret är count < 0. Slingan körs dock en gång trots att looping-villkoret initialt är False.
  • Detta till skillnad från en while-loop som endast körs om loopingvillkoret är True i första hand.
//while_example1

#include <stdio.h>

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

    return 0;
}

Som nämnts är loopingvillkoret, count < 0 False, initialt initieras count-variabeln till 1. Så när vi kompilerar och kör ovanstående kod ser vi att satsen i while-loopkroppen inte exekveras.

Output

While loop: 
//loop body does not run!

While vs Do-While: En översikt över skillnaderna

Låt oss ta en närmare titt på skillnaderna mellan while- och do-while-loopar.

Tänk på det här exemplet:

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

I ovanstående kodcell:

  • Räknevariabeln initieras till 1.
  • Vi använder en do-while loop.
  • Räknevariabeln inkrementeras med 1 under varje passage genom slingan, och loopingvillkoret är inställt på räkning < 5.

Här är en visuell förklaring av hur exekveringen sker: hur do-while-slingan fungerar och kontrollerar loopingtillståndet fyra gånger.

Output

Do-while loop: 
1
2
3
4

Om du istället använder en while-loop är det här vad vi skulle ha.

//while_example2

#include <stdio.h>

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

    return 0;
}

Figuren nedan förklarar while-slingans utförande; i det här exemplet kontrollerar while-slingan loopingvillkoret fem gånger.

Output

While loop: 
1
2
3
4

Även om utgångarna för ovanstående while- och do-while-loopar är identiska, finns det några subtila skillnader.

Efter en while-loop kommer kontrollen av skick först, följt av loopkroppen. Så om du vill att slingan ska köras K gånger, bör det finnas exakt K körningar där loopingvillkoret är True. I iteration nummer K+1 blir villkoret False, och kontrollen bryter sig ur slingan.

Å andra sidan, om du använder en do-while loop: looping-villkoret kontrolleras för K:te gången först efter att K passerat genom loopen.

Så varför är denna marginella förbättring till hjälp?🤔

Anta att looping-villkoret är beräkningsmässigt dyrt: till exempel involverar ett anrop till en rekursiv funktion, en komplex matematisk operation och så vidare.

I sådana fall, för K-repetitioner av slingkroppen, skulle det vara fördelaktigt att använda en gör-under-slinga istället.

Sammanfattning av medan vs

Låt oss ta en tabell över de viktigaste skillnaderna vi har lärt oss. 👩‍🏫

While LoopDo-While LoopCheck för loopingvillkor: Före exekvering av loop bodyCheck for looping condition: Efter exekvering av loop bodyOm villkoret initialt är False, exekveras inte loop body.Om villkoret är False initialt, loop body exekveras exakt en gång. Slingvillkoret kontrolleras K gånger för K passerar genom slingan. Slingvillkoret kontrolleras K-1 gånger för K passerar genom slingan. När ska while-slingan användas?
– Slingan ska köras så länge tillståndet är sant
– För ingångskontrollerade slingor
– När loopingvillkoret inte är beräkningsmässigt dyrt När ska man använda en do-while loop?
– Loop bör köras minst en gång för ett initialt False looping-tillstånd
– För utgångskontrollerade slingor
– När loopingtillståndet är beräkningsmässigt dyrt

Emulera Do-While Loop Beteende i Python

Från föregående avsnitt har vi följande två villkor för att emulera do-while-loopen:

  • Satserna i loopkroppen bör köras minst en gång – oavsett om loopingvillkoret är True eller False.
  • Villkoret bör kontrolleras efter exekvering av satser i loopkroppen. Om villkoret är Falskt bör kontrollen bryta sig ur slingan: exit control.

Infinite While Loop and Break Statement i Python

Du kan definiera en oändlig while-loop i Python, som visas nedan.

while True:
    pass

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

while always-True-condition:
   pass

Break-satsen kan användas för att bryta ut ur en loopkropp och överföra kontrollen till den första satsen utanför loopkroppen.

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

I det allra första do-while loop-exemplet i C är villkoret för att fortsätta looping count < 0. Så villkoret för att bryta ut ur slingan är ett räknevärde på noll eller större än noll, (antal >= 0).

Här är emuleringen av do-while-loopen i Python:

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

Exempel på Python Do-While Loop

Vi kommer att gå tillbaka till exemplen från föregående avsnitt och skriva om dem i Python genom att emulera do while loop.

#1. Låt oss återgå till exemplet: skriva ut värden för räknevariabeln när antalet är mindre än fem.

Vi vet hur man definierar en oändlig loop så att loopkroppen körs minst en gång.

Slingan bör fortsätta så länge som antalet är mindre än fem. Därför, när räkningen når fem, bör vi bryta oss ur slingan. Så räkning == 5 är utgångskontrollvillkoret.

Tillsammans har vi:

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. Vi kan också skriva om siffergissningsspelet som en Python do-while-konstruktion.

I nummergissningsspelet validerar vi en användares gissningar mot ett fördefinierat hemligt nummer. Användaren bör gissa det hemliga numret inom ett visst antal maximalt tillåtna försök, säg max_guesses.

Koden bör uppmana användaren att skriva in, oavsett om deras gissning är rätt eller fel. Vi kan göra detta med en oändlig while-loop.

Så när ska vi bryta oss ur slingan?

Kontrollen bör bryta sig ur slingan när något av följande inträffar:

  • När användaren har gissat numret
  • När användaren inte har gissat numret ännu, men har uttömt antalet tillgängliga gissningar. Antalet felaktiga gissningar av användaren = max_gissningar.
  • Kodcellen nedan visar hur vi kan göra det.

    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

    Istället för att bryta oss ur slingan kan vi lägga till förklarande print()-satser när vi stöter på vart och ett av ovanstående tillstånd och sedan bryta oss ur slingan.

    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

    Två exempelutgångar visas nedan.

    I denna exempelutgång bryter break-satsen ut ur loopen när användaren gissar det hemliga numret korrekt.

    # 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!
    

    Här är ytterligare ett exempel när användaren når det maximala antalet tillgängliga gissningar men misslyckas med att gissa det hemliga numret korrekt.

    # 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!

    Slutsats

    Jag hoppas att den här handledningen hjälpte dig att förstå hur man emulerar en do-while loop i Python.

    Här är de viktigaste takeaways:

    • Använd en oändlig slinga för att säkerställa att slingkroppen körs minst en gång. Det kan vara en trivial oändlig slinga, till exempel while True, eller det kan vara while , så att villkoret alltid är True.
    • Kontrollera utgångsvillkoret inuti slingan och använd break-satsen för att bryta ut ur slingan under ett specifikt tillstånd.

    Lär dig sedan hur du använder för loopar och funktionen enumerate() i Python.