Att Simulera en Do-While Loop i Python
Denna guide kommer att lära dig hur du simulerar en do-while loop i programmeringsspråket Python. Loopar är grundläggande verktyg i alla programmeringsspråk. De möjliggör att du upprepar specifika åtgärder baserat på ett visst villkor. Python erbjuder while- och for-loopar, men saknar en inbyggd do-while loop.
Men du kan enkelt efterlikna en do-while loop genom att förstå dess funktionalitet och använda Pythons befintliga loopar och loopkontrollsatser. Det kommer att handla om att kombinera en while loop med ett break statement.
Låt oss dyka in i hur detta fungerar!
Vad är en Do-While Loop?
Om du är bekant med programmeringsspråk som C eller C++, har du förmodligen stött på konstruktionen do-while. I en do-while loop, utförs koden inom loopen minst en gång och därefter kontrolleras looping-villkoret.
Se följande C kodexempel:
//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; }
Resultatet av koden blir:
Output Do-While loop: Loop runs...
I exemplet ovan:
- Variabeln ’count’ tilldelas värdet 1, och loopingvillkoret är att ’count’ ska vara mindre än 0. Trots att villkoret är falskt initielt, körs loopen en gång.
- Detta är en skillnad jämfört med en while loop, som endast körs om loopingvillkoret är sant från början.
Låt oss jämföra med en while loop i C:
//while_example1 #include <stdio.h> int main() { int count = 1; printf("While loop: \n"); while(count<0){ printf("Loop runs..."); } return 0; }
Eftersom loopingvillkoret `count < 0` är falskt från start, kommer while-loopen aldrig att köras. Resultatet blir:
Output While loop: //loop body does not run!
While vs Do-While: En Jämförelse
Låt oss utforska skillnaderna mellan while- och do-while loopar lite mer i detalj.
Här är ett annat exempel:
//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; }
I det ovanstående exemplet:
- Variabeln `count` startar på 1.
- En do-while loop används.
- `count` ökas med 1 i varje iteration, och loopen fortsätter så länge `count < 5`.
Här är en visuell representation av hur exekveringen sker och hur loopvillkoret kontrolleras fyra gånger:
Output Do-while loop: 1 2 3 4
Om vi istället använder en while loop, skulle koden se ut så här:
//while_example2 #include <stdio.h> int main() { int count = 1; printf("While loop: \n"); while(count<5){ printf("%d\n",count); count++; }; return 0; }
Följande bild illustrerar while-loopens exekvering; i det här fallet kontrolleras loopingvillkoret fem gånger:
Output While loop: 1 2 3 4
Även om resultaten av while- och do-while-looparna är desamma, finns det en viktig skillnad. I en while-loop, kontrolleras villkoret först, sedan körs loopkroppen. Om du vill att loopen ska köras K gånger, så måste villkoret vara sant K gånger. I iteration K+1, blir villkoret falskt, och loopen avslutas.
I en do-while-loop, kontrolleras loopingvillkoret först efter att loopkroppen har exekverats K gånger.
Varför är denna skillnad viktig? Anta att loopingvillkoret är resurskrävande, t.ex. ett anrop till en rekursiv funktion eller en komplex matematisk operation. I sådana fall, för att utföra loopkroppen K gånger, är en do-while-loop mer effektiv.
Sammanfattning: While vs Do-While
Låt oss sammanfatta de viktigaste skillnaderna i tabellform:
While Loop | Do-While Loop |
Kontrollerar loopvillkoret: Innan loopkroppen körs | Kontrollerar loopvillkoret: Efter loopkroppen körs |
Om villkoret är falskt från start körs inte loopkroppen. | Om villkoret är falskt från start körs loopkroppen exakt en gång. |
Loopvillkoret kontrolleras K gånger för K iterationer. | Loopvillkoret kontrolleras K-1 gånger för K iterationer. |
När ska man använda en while-loop? – Loopen ska köras så länge tillståndet är sant – För input-kontrollerade loopar – När loopingvillkoret inte är resurskrävande |
När ska man använda en do-while loop? – Loopen ska köras minst en gång för ett initialt falskt loopingtillstånd – För output-kontrollerade loopar – När loopingtillståndet är resurskrävande |
Att Simulera Do-While Loop Beteende i Python
Från föregående diskussion kan vi fastslå två viktiga kriterier för att efterlikna en do-while-loop:
- Koden inuti loopen ska köras minst en gång, oavsett om loopingvillkoret är sant eller falskt.
- Villkoret ska kontrolleras efter att koden i loopen har körts. Om villkoret är falskt, ska loopen avslutas.
Oändlig While Loop och Break i Python
Du kan skapa en oändlig while-loop i Python på följande sätt:
while True: pass # Istället för True kan du använda vilket tillstånd som helst som alltid är sant while always_True_condition: pass
Satsen `break` används för att avsluta en loop och överföra kontrollen till första raden efter loopen.
while <condition>: if <some-condition>: break
I det första do-while-exemplet i C, var villkoret för att fortsätta loopen `count < 0`. Därför, är villkoret för att avsluta loopen att `count` är noll eller större, (`count >= 0`).
Här är hur vi simulerar do-while loopen i Python:
count = 1 while True: print("Loop runs...") if(count >= 0): break
Exempel på Python Do-While Loopar
Vi ska nu återskapa exemplen från tidigare, men med Python-kod som emulerar do-while-loopen.
#1. Låt oss återgå till exemplet med att skriva ut värdet på en räknevariabel när den är mindre än fem.
Vi vet hur man definierar en oändlig loop så att loopkroppen körs minst en gång.
Loopen bör fortsätta så länge som variabeln är mindre än fem. När räknaren når fem, ska vi bryta oss ur loopen. Därför blir `count == 5` det villkor som stoppar loopen.
Koden blir:
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å återskapa ett siffergissningsspel som en do-while-konstruktion i Python.
I siffergissningsspelet validerar vi användarens gissningar mot ett förutbestämt hemligt tal. Användaren ska gissa det hemliga talet inom ett antal försök, t.ex. `max_guesses`.
Koden ska be användaren att ange ett tal, oavsett om deras gissning är korrekt eller felaktig. Vi kan göra detta med hjälp av en oändlig while loop.
När ska vi avsluta loopen?
Vi ska avsluta loopen när något av följande inträffar:
- När användaren har gissat rätt tal.
- När användaren har slut på gissningar, d.v.s. antalet felaktiga gissningar är lika med `max_guesses`.
Följande kod visar hur vi gör detta:
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 bara bryta ut ur loopen, kan vi lägga till meddelanden för användaren och sedan avsluta 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
Nedan följer två exempel på körningar av koden.
I den första körningen avslutas loopen när användaren gissar rätt tal:
# 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 ett exempel där användaren får slut på gissningar utan att gissa rätt tal:
# 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
Förhoppningsvis har denna guide hjälpt dig att förstå hur man emulerar en do-while-loop i Python.
De viktigaste punkterna är:
- Använd en oändlig loop för att säkerställa att loopen körs minst en gång. Detta kan vara en enkel oändlig loop som `while True` eller `while
`, där villkoret alltid är sant. - Kontrollera loopens avslutsvillkor inuti loopen och använd satsen `break` för att avsluta loopen under ett specifikt tillstånd.
Utforska gärna andra sätt att använda for-loopar och funktionen `enumerate()` i Python.