Hvordan emulere Do-While-løkker i Python

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

I et hvilket som helst programmeringsspråk hjelper loops deg med å utføre visse handlinger gjentatte ganger, avhengig av en looping-tilstand. Python støtter while og for loop-konstruksjoner, men støtter ikke do-while-løkken.

Du kan imidlertid etterligne en do-while-løkke ved å forstå hvordan den fungerer – ved å bruke eksisterende looper og loop-kontrollsetninger i Python.

Du vil lære hvordan du gjør dette i løpet av de neste minuttene. La oss begynne!

Hva er Do-While Loop-konstruksjonen?

Hvis du har programmert i språk som C eller C++, ville du sannsynligvis ha kommet over do-while loop-konstruksjonen.

I en do-while-løkke, utføres settet med setninger i loop-kroppen – innenfor blokken avgrenset av krøllete klammer – først, og deretter kontrolleres looping-betingelsen.

Du kan kjøre følgende C-eksempler i tipsbilk.net sin online C-kompilator – rett fra nettleseren din.

Tenk på følgende kodebit:

//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 utgangen.

Output

Do-While loop: 
Loop runs...

I eksemplet ovenfor:

  • Verdien av telling er 1, og sløyfebetingelsen er telling < 0. Løkken kjører imidlertid én gang selv om sløyfebetingelsen i utgangspunktet er False.
  • Dette er i motsetning til en while-løkke som bare kjøres hvis looping-betingelsen er True i utgangspunktet.
//while_example1

#include <stdio.h>

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

    return 0;
}

Som nevnt er looping-betingelsen, count < 0 False, i utgangspunktet initialiseres tellevariabelen til 1. Så når vi kompilerer og kjører koden ovenfor, ser vi at setningen i while loop-kroppen ikke blir utført.

Output

While loop: 
//loop body does not run!

Mens vs Do-While: En oversikt over forskjellene

La oss se nærmere på forskjellene mellom while- og do-while-løkker.

Tenk på dette eksemplet:

//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 kodecellen ovenfor:

  • Tellevariabelen initialiseres til 1.
  • Vi bruker en do-while-løkke.
  • Tellevariabelen økes med 1 for hver passasje gjennom sløyfen, og sløyfebetingelsen er satt til telling < 5.
  En omfattende guide til LinkedIn-selskapssiden [17 Practices]

Her er en visuell forklaring på hvordan utførelsen skjer: hvordan do-while-løkken fungerer og sjekker for looping-tilstanden fire ganger.

Output

Do-while loop: 
1
2
3
4

Hvis du bruker en while-løkke i stedet, er dette hva vi ville 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 nedenfor forklarer while-løkkens utførelse; i dette eksemplet kontrollerer while-sløyfen sløyfebetingelsen fem ganger.

Output

While loop: 
1
2
3
4

Selv om utgangene for de ovennevnte while- og do-while-løkkene er identiske, er det noen subtile forskjeller.

I en while-løkke kommer sjekk for tilstand først, etterfulgt av løkkekroppen. Så hvis du vil at løkken skal kjøre K ganger, bør det være nøyaktig K kjøringer der løkkebetingelsen er Sann. I iterasjon nummer K+1 blir tilstanden False, og kontrollen bryter ut av loopen.

På den annen side, hvis du bruker en do-while-løkke: løkkebetingelsen kontrolleres for K-te gang først etter at K har passert gjennom løkken.

Så hvorfor er denne marginale forbedringen nyttig?🤔

Anta at looping-tilstanden er beregningsmessig kostbar: involverer for eksempel et kall til en rekursiv funksjon, en kompleks matematisk operasjon, og så videre.

I slike tilfeller, for K-repetisjoner av løkkekroppen, vil det være fordelaktig å bruke en do-while-løkke i stedet.

Mens vs. Do-While Sammendrag

La oss ta en tabell over de viktigste forskjellene vi har lært. 👩‍🏫

While LoopDo-While LoopCheck for looping-tilstand: Før utførelsen av loop bodyCheck for looping-tilstand: Etter utførelse av loop bodyHvis betingelsen er False initialt, utføres ikke loop body.Hvis betingelsen er False initialt, loop body. utføres nøyaktig én gang. Sløyfebetingelsen kontrolleres K ganger for K passerer gjennom løkken. Sløyfebetingelsen kontrolleres K-1 ganger for K passerer gjennom sløyfen. Når skal mens løkke brukes?
– Loop skal løpe så lenge tilstanden er sann
– For inngangskontrollerte sløyfer
– Når looping-tilstanden ikke er beregningsmessig dyr. Når skal man bruke en do-while-løkke?
– Sløyfe bør kjøres minst én gang for en opprinnelig falsk sløyfetilstand
– For utgangskontrollerte sløyfer
– Når looping-tilstanden er beregningsmessig kostbar

  Hvordan finne noen på OnlyFans

Emulerer Do-While Loop-atferd i Python

Fra forrige seksjon har vi følgende to betingelser for å emulere do-while-løkken:

  • Utsagnene i loop-kroppen skal kjøres minst én gang – uavhengig av om looping-betingelsen er True eller False.
  • Tilstanden bør kontrolleres etter å ha utført setninger i loop-kroppen. Hvis tilstanden er falsk, bør kontrollen bryte ut av sløyfen: utgangskontroll.

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-setningen kan brukes til å bryte ut av en loop-kropp og overføre kontroll til den første setningen utenfor loop-kroppen.

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

I det aller første do-while-løkkeeksemplet i C, er betingelsen for å fortsette looping telling < 0. Så betingelsen for å bryte ut av løkken er en telleverdi på null eller større enn null, (telling >= 0).

Her er emuleringen av do-while-løkken i Python:

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

Python Do-While Loop eksempler

Vi vil se på eksemplene fra forrige seksjon og omskrive dem i Python ved å emulere do while loop.

#1. La oss se på eksemplet på nytt: å skrive ut verdier for tellevariabelen når antallet er mindre enn fem.

Vi vet hvordan vi definerer en uendelig sløyfe slik at sløyfekroppen kjører minst én gang.

Lokkingen skal fortsette så lenge tellingen er mindre enn fem. Derfor, når tellingen når fem, bør vi bryte ut av loopen. Så telle == 5 er utgangskontrollbetingelsen.

Ved å sette 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 tall-gjetting-spillet som en Python-do-while-konstruksjon.

I tall-gjetting-spillet validerer vi en brukers gjetninger mot et forhåndsdefinert hemmelig nummer. Brukeren bør gjette det hemmelige nummeret innen et visst antall maksimalt tillatte forsøk, for eksempel max_guesses.

  Kart over metall viser sjangere gjennom tiårene med spillelister

Koden skal be brukeren om inndata, uavhengig av om gjetningen er riktig eller feil. Vi kan gjøre dette ved å bruke en uendelig mens-løkke.

Så når bør vi bryte ut av loopen?

Kontrollen skal bryte ut av sløyfen når ett av følgende skjer:

  • Når brukeren har gjettet tallet
  • Når brukeren ikke har gjettet antallet ennå, men har brukt opp antallet tilgjengelige gjetninger. Antall feil gjetninger av brukeren = max_gueses.
  • Kodecellen nedenfor viser hvordan vi kan gjø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 å bryte ut av loopen, kan vi legge til forklarende print()-setninger når vi møter hver av de ovennevnte forholdene og deretter bryte ut av loopen.

    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 eksempelutganger er vist nedenfor.

    I denne prøveutgangen bryter break-setningen ut av loopen når brukeren gjetter det hemmelige nummeret riktig.

    # 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 en annen eksempelutgang når brukeren når det maksimale antallet gjetninger som er tilgjengelig, men ikke klarer å gjette det hemmelige nummeret riktig.

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

    Konklusjon

    Jeg håper denne opplæringen hjalp deg med å forstå hvordan du emulerer en do-while-løkke i Python.

    Her er de viktigste takeawayene:

    • Bruk en uendelig løkke for å sikre at løkkekroppen går minst én gang. Det kan være en triviell uendelig løkke, for eksempel mens sant, eller det kan være mens , slik at betingelsen alltid er sant.
    • Se etter utgangstilstanden inne i loopen og bruk break-setningen for å bryte ut av loopen under en spesifikk tilstand.

    Deretter lærer du hvordan du bruker for loops og enumerate()-funksjonen i Python.