Sådan emulerer du Do-While-løkker i Python

I denne tutorial lærer du, hvordan du emulerer en do-while-løkke i Python.

I ethvert programmeringssprog hjælper loops dig med at udføre visse handlinger gentagne gange, afhængigt af en looping-tilstand. Python understøtter while og for loop konstruktioner, men understøtter ikke indbygget do-while loop.

Du kan dog efterligne en do-while-løkke ved at forstå, hvordan den virker – ved at bruge eksisterende loops og loop-kontrolsætninger i Python.

Du lærer, hvordan du gør dette i løbet af de næste par minutter. Lad os begynde!

Hvad er Do-While Loop-konstruktionen?

Hvis du har programmeret i sprog som C eller C++, ville du sandsynligvis være stødt på do-while loop-konstruktionen.

I en do-while-løkke udføres sættet af udsagn i loop-legemet – inden for blokken afgrænset af krøllede klammer – først, og derefter kontrolleres looping-betingelsen.

Du kan køre følgende C-eksempler i toadmin.dk’s online C-compiler – direkte fra din browser.

Overvej følgende kodestykke:

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

Her er outputtet.

Output

Do-While loop: 
Loop runs...

I ovenstående eksempel:

  • Værdien af ​​count er 1, og sløjfebetingelsen er count < 0. Sløjfen kører dog én gang, selvom sløjfebetingelsen oprindeligt er falsk.
  • Dette er i modsætning til en while-løkke, der kun udføres, hvis looping-betingelsen er True i første omgang.
//while_example1

#include <stdio.h>

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

    return 0;
}

Som nævnt er looping-betingelsen, count < 0 False, initialt initialiseres count-variablen til 1. Så ved kompilering og kørsel af ovenstående kode, ser vi, at sætningen i while-loop-kroppen ikke udføres.

Output

While loop: 
//loop body does not run!

Mens vs. Do-While: En oversigt over forskellene

Lad os se nærmere på forskellene mellem while og do-while loops.

Overvej dette eksempel:

//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 ovenstående kodecelle:

  • Tællevariablen initialiseres til 1.
  • Vi bruger en do-while loop.
  • Tællevariablen øges med 1 under hver passage gennem sløjfen, og sløjfebetingelsen indstilles til at tælle < 5.
  9 måder at tjene penge hurtigt på i "Animal Crossing: New Horizons"

Her er en visuel forklaring på, hvordan udførelsen foregår: hvordan do-while-løkken fungerer og kontrollerer for looping-tilstanden fire gange.

Output

Do-while loop: 
1
2
3
4

Hvis du i stedet bruger en while-løkke, er dette, hvad vi ville have.

//while_example2

#include <stdio.h>

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

    return 0;
}

Figuren nedenfor forklarer while-løkkens udførelse; i dette eksempel kontrollerer while-løkken sløjfebetingelsen fem gange.

Output

While loop: 
1
2
3
4

Selvom udgangene for ovenstående mens- og gør-mens-løkker er identiske, er der nogle subtile forskelle.

Om en while-løkke kommer kontrollen for tilstand først, efterfulgt af løkkens krop. Så hvis du vil have løkken til at køre K gange, skal der være præcis K kørsler, hvor sløjfebetingelsen er Sand. I iteration nummer K+1 bliver betingelsen Falsk, og kontrollen bryder ud af løkken.

På den anden side, hvis du bruger en do-while-løkke: sløjfebetingelsen kontrolleres kun for K-te gang, efter at K passerer gennem løkken.

Så hvorfor er denne marginale forbedring nyttig?🤔

Antag, at sløjfebetingelsen er beregningsmæssigt dyr: involverer for eksempel et kald til en rekursiv funktion, en kompleks matematisk operation og så videre.

I sådanne tilfælde, for K-gentagelser af løkkelegemet, ville det være fordelagtigt at bruge en do-while-løkke i stedet.

Mens vs. Do-While Resumé

Lad os tabulere de vigtigste forskelle, vi har lært. 👩‍🏫

While LoopDo-While LoopCheck for looping-tilstand: Før udførelsen af ​​loop bodyCheck for looping-tilstand: Efter udførelsen af ​​loop bodyHvis betingelsen er False initialt, udføres loop body ikke.Hvis betingelsen er False initialt, loop bodyen. udføres nøjagtigt én gang. Sløjfebetingelsen kontrolleres K gange for K passerer gennem sløjfen. Sløjfebetingelsen kontrolleres K-1 gange for K passerer gennem sløjfen. Hvornår skal mens loop?
– Loop skal køre, så længe tilstanden er sand
– Til indgangskontrollerede sløjfer
– Når sløjfetilstanden ikke er beregningsmæssigt dyr Hvornår skal man bruge en do-while-løkke?
– Sløjfe skal køre mindst én gang for en oprindeligt falsk sløjfetilstand
– Til udgangskontrollerede sløjfer
– Når looping-tilstanden er beregningsmæssigt dyr

  Sådan installeres Ubuntu Core på Raspberry Pi

Emulering af Do-While Loop-adfærd i Python

Fra det foregående afsnit har vi følgende to betingelser for at emulere do-while loop:

  • Udsagn i loop-kroppen skal udføres mindst én gang – uanset om looping-betingelsen er True eller False.
  • Betingelsen bør kontrolleres efter udførelse af sætninger i loop body. Hvis betingelsen er falsk, bør styringen bryde ud af løkken: udgangskontrol.

Infinite While Loop og Break Statement i Python

Du kan definere en uendelig mens-løkke i Python, som vist nedenfor.

while True:
    pass

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

while always-True-condition:
   pass

Break-sætningen kan bruges til at bryde ud af en loop-body og overføre kontrol til den første sætning uden for loop-kroppen.

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

I det allerførste do-while loop eksempel i C er betingelsen for at fortsætte looping count < 0. Så betingelsen for at bryde ud af løkken er en tælleværdi på nul eller større end nul, (count >= 0).

Her er emuleringen af ​​do-while loop i Python:

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

Python Do-While Loop eksempler

Vi vil gense eksemplerne fra det foregående afsnit og omskrive dem i Python ved at emulere do while loop.

#1. Lad os se eksemplet igen: udskrivning af værdier af tællevariablen, når antallet er mindre end fem.

Vi ved, hvordan man definerer en uendelig løkke, så løkkelegemet udføres mindst én gang.

Sløjfen skal fortsætte, så længe antallet er mindre end fem. Derfor, når tallet når fem, bør vi bryde ud af løkken. Så tæller == 5 er udgangskontroltilstanden.

Ved at sætte det sammen 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 også omskrive talgættespillet som en Python do-while-konstruktion.

I talgættespillet validerer vi en brugers gæt mod et foruddefineret hemmeligt nummer. Brugeren skal gætte det hemmelige nummer inden for et vist antal maksimalt tilladte forsøg, f.eks. max_guesses.

  Sådan får du Find My iPhone til at sige Ingen placering fundet

Koden skal bede brugeren om input, uanset om deres gæt er rigtigt eller forkert. Vi kan gøre dette ved at bruge en uendelig mens-løkke.

Så hvornår skal vi bryde ud af løkken?

Styringen bør bryde ud af løkken, når et af følgende sker:

  • Når brugeren har gættet tallet
  • Når brugeren ikke har gættet antallet endnu, men har opbrugt antallet af tilgængelige gætter. Antallet af forkerte gæt af brugeren = max_gueses.
  • Kodecellen nedenfor viser, hvordan vi kan gøre 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

    I stedet for at bryde ud af løkken, kan vi tilføje forklarende print()-sætninger, når vi støder på hver af ovenstående forhold og derefter bryde ud af løkken.

    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

    To eksempeludgange er vist nedenfor.

    I dette eksempeloutput bryder break-sætningen ud af løkken, når brugeren gætter det hemmelige nummer 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!
    

    Her er endnu et eksempeloutput, når brugeren når det maksimale antal tilgængelige gætter, men undlader at gætte det hemmelige nummer 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!

    Konklusion

    Jeg håber, at denne tutorial hjalp dig med at forstå, hvordan du emulerer en do-while loop i Python.

    Her er de vigtigste takeaways:

    • Brug en uendelig løkke for at sikre, at løkkens krop kører mindst én gang. Det kunne være en triviel uendelig løkke, såsom while True, eller det kunne være while , sådan at betingelsen altid er Sand.
    • Tjek for udgangstilstanden inde i løkken, og brug break-sætningen til at bryde ud af løkken under en specifik tilstand.

    Lær derefter, hvordan du bruger til loops og funktionen enumerate() i Python.