Jak emulować pętle Do-While w Pythonie?

Opublikowany: 2022-08-31

W tym samouczku dowiesz się, jak emulować pętlę do while w Pythonie .

W każdym języku programowania pętle pomagają w powtarzaniu pewnych działań, w zależności od warunku zapętlenia. Python obsługuje konstrukcje pętli while i for , ale natywnie nie obsługuje pętli do- while.

Możesz jednak emulować pętlę do-while, rozumiejąc, jak to działa — używając istniejących pętli i instrukcji sterujących pętli w Pythonie.

W ciągu kilku minut dowiesz się, jak to zrobić. Zaczynajmy!

Co to jest konstrukcja pętli Do-While?

Co to jest konstrukcja pętli Do-While?

Jeśli programowałeś w językach takich jak C lub C++, prawdopodobnie natknąłbyś się na konstrukcję pętli do-while.

W pętli do-while zestaw instrukcji w treści pętli — w bloku ograniczonym nawiasami klamrowymi — jest wykonywany jako pierwszy, a następnie sprawdzany jest warunek pętli.

Możesz uruchomić następujące przykłady C w internetowym kompilatorze C Geekflare — bezpośrednio z przeglądarki.

Rozważ następujący fragment kodu:

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

Oto wynik.

 Output Do-While loop: Loop runs...

W powyższym przykładzie:

  • Wartość count wynosi 1, a warunkiem pętli jest count < 0 . Jednak pętla uruchamia się raz, mimo że początkowo warunek zapętlenia jest False .
  • Jest to w przeciwieństwie do pętli while , która jest wykonywana tylko wtedy, gdy warunek pętli jest w pierwszej kolejności True .
 //while_example1 #include <stdio.h> int main() { int count = 1; printf("While loop: \n"); while(count<0){ printf("Loop runs..."); } return 0; }

Jak wspomniano, warunek pętli, count < 0 jest False , początkowo zmienna count jest inicjowana na 1. Tak więc po skompilowaniu i uruchomieniu powyższego kodu widzimy, że instrukcja w treści pętli while nie jest wykonywana.

 Output While loop: //loop body does not run!

While vs. Do-While: przegląd różnic

Przyjrzyjmy się bliżej różnicom między pętlami while i do-while.

While vs Do-While: Przegląd różnic

Rozważ ten przykład:

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

W powyższej komórce kodu:

  • Zmienna count jest inicjowana na 1.
  • Używamy pętli do-while.
  • Zmienna count jest zwiększana o 1 podczas każdego przejścia przez pętlę, a warunek pętli jest ustawiany na count < 5 .

Oto wizualne wyjaśnienie, w jaki sposób odbywa się wykonanie: jak działa pętla do-while i czterokrotnie sprawdza warunek zapętlenia.

przykładowa-pętla-podczas-czasu
 Output Do-while loop: 1 2 3 4

Jeśli zamiast tego użyjesz pętli while, otrzymamy to.

 //while_example2 #include <stdio.h> int main() { int count = 1; printf("While loop: \n"); while(count<5){ printf("%d\n",count); count++; }; return 0; }

Poniższy rysunek wyjaśnia wykonanie pętli while; w tym przykładzie pętla while sprawdza warunek zapętlenia pięć razy.

Przykład pętli while
 Output While loop: 1 2 3 4

Chociaż dane wyjściowe dla powyższych pętli while i do-while są identyczne, istnieją pewne subtelne różnice.

W pętli while najpierw sprawdzany jest warunek, a następnie treść pętli. Jeśli więc chcesz, aby pętla wykonała K razy, powinno być dokładnie K uruchomień, w których warunek zapętlenia to True . W iteracji o numerze K+1 warunek staje się False , a formant przerywa pętlę.

Z drugiej strony, jeśli używasz pętli do-while: warunek zapętlenia jest sprawdzany K-ty raz dopiero po przejściu K przez pętlę.

Dlaczego więc ta marginalna poprawa jest pomocna?

Załóżmy, że warunek pętli jest kosztowny obliczeniowo: na przykład wymaga wywołania funkcji rekurencyjnej, złożonej operacji matematycznej i tak dalej.

W takich przypadkach, dla powtórzeń K treści pętli, korzystne byłoby zamiast tego użycie pętli do-while.

Podsumowanie w czasie kontra Do-While

Wymieńmy najważniejsze różnice, których się nauczyliśmy.

Podczas pętli Pętla w czasie
Sprawdź warunek zapętlenia: Przed wykonaniem ciała pętli Sprawdź warunek zapętlenia: Po wykonaniu ciała pętli
Jeśli warunek ma początkowo wartość False , treść pętli nie jest wykonywana. Jeśli warunek jest początkowo False , treść pętli jest wykonywana dokładnie raz .
Warunek zapętlenia jest sprawdzany K razy dla K przechodzi przez pętlę. Warunek zapętlenia jest sprawdzany K-1 razy dla K przechodzi przez pętlę.
Kiedy używać pętli while?
– Pętla powinna działać tak długo, jak warunek jest prawdziwy
– Do pętli z kontrolowanym wejściem
– Gdy warunek zapętlenia nie jest kosztowny obliczeniowo
Kiedy używać pętli do-while?
– Pętla powinna zostać uruchomiona co najmniej raz w przypadku początkowo fałszywego zapętlenia
– Do pętli z kontrolowanym wyjściem
– Gdy warunek zapętlenia jest kosztowny obliczeniowo

Emulacja zachowania pętli Do-While w Pythonie

Z poprzedniej sekcji mamy następujące dwa warunki do emulacji pętli do while:

  • Instrukcje w ciele pętli powinny zostać wykonane co najmniej raz — niezależnie od tego, czy warunek pętli to True czy False .
  • Warunek należy sprawdzić po wykonaniu instrukcji w ciele pętli. Jeśli warunek jest False , kontrolka powinna wyjść z pętli: wyjdź z kontroli.

Instrukcja Infinite While Loop i Break w Pythonie

pyton-do-czasu

Możesz zdefiniować nieskończoną pętlę while w Pythonie, jak pokazano poniżej.

 while True: pass # Instead of True, you can have any condition that is always True while always-True-condition: pass

Instrukcja break może służyć do wyrwania się z treści pętli i przeniesienia kontroli do pierwszej instrukcji poza treścią pętli.

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

W pierwszym przykładzie pętli do-while w C warunkiem kontynuowania pętli jest count < 0 . Tak więc warunkiem wyjścia z pętli jest wartość licznika równa zero lub większa od zera ( count >= 0 ).

Oto emulacja pętli do while w Pythonie:

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

Przykłady pętli Do-While w Pythonie

Wrócimy do przykładów z poprzedniej sekcji i przepiszemy je w Pythonie, emulując pętlę do while.

#1 . Wróćmy do przykładu: wypisanie wartości zmiennej count , gdy count jest mniejsza niż pięć.

Wiemy, jak zdefiniować nieskończoną pętlę, aby ciało pętli wykonało się przynajmniej raz.

Pętla powinna trwać tak długo, jak liczba jest mniejsza niż pięć. Dlatego, gdy liczba osiągnie pięć, powinniśmy wyrwać się z pętli. Zatem count == 5 jest warunkiem kontroli wyjścia.

Łącząc to, mamy:

 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 . Możemy również przepisać grę polegającą na zgadywaniu liczb jako konstrukt typu „do-while” w Pythonie.

W grze w zgadywanie liczb sprawdzamy domysły użytkownika na podstawie wstępnie zdefiniowanej tajnej liczby. Użytkownik powinien odgadnąć tajną liczbę w ramach określonej liczby dozwolonych prób, powiedzmy max_guesses .

Kod powinien monitować użytkownika o wprowadzenie danych, niezależnie od tego, czy jego przypuszczenie jest prawidłowe, czy błędne. Możemy to zrobić za pomocą nieskończonej pętli while.

Więc kiedy powinniśmy wyrwać się z pętli?

Kontrolka powinna wyrwać się z pętli, gdy wystąpi jedna z następujących sytuacji:

  1. Gdy użytkownik odgadł numer
  2. Gdy użytkownik nie odgadł jeszcze liczby, ale wyczerpał dostępną liczbę domysłów. Liczba błędnych odgadnięć przez użytkownika = max_guesses .

Poniższa komórka kodu pokazuje, jak możemy to zrobić.

 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

Zamiast wyłamywać się z pętli, możemy dodać objaśniające instrukcje print() , gdy napotkamy każdy z powyższych warunków, a następnie wyrwać się z pętli.

 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

Poniżej przedstawiono dwa przykładowe wyjścia.

W tych przykładowych danych wyjściowych instrukcja break wychodzi z pętli, gdy użytkownik poprawnie odgadnie tajną liczbę.

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

Oto kolejny przykładowy wynik, gdy użytkownik osiągnie maksymalną dostępną liczbę odgadnięć, ale nie uda mu się poprawnie odgadnąć tajnej liczby.

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

Wniosek

Mam nadzieję, że ten samouczek pomógł ci zrozumieć, jak emulować pętlę do-while w Pythonie.

Oto najważniejsze wnioski:

  • Użyj nieskończonej pętli, aby upewnić się, że treść pętli zostanie uruchomiona co najmniej raz. Może to być trywialna nieskończona pętla, taka jak while True, lub może to być while <warunek> , tak że warunek jest zawsze True.
  • Sprawdź warunek wyjścia wewnątrz pętli i użyj instrukcji break , aby wyrwać się z pętli pod określonym warunkiem.

Następnie dowiedz się, jak używać pętli for i funkcji enumerate() w Pythonie.