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

W tym poradniku poznasz techniki imitowania pętli do-while w języku Python.

W każdym języku programowania pętle umożliwiają cykliczne powtarzanie zestawu instrukcji, zależnie od spełnienia określonego warunku. Python oferuje pętle while i for, ale nie zawiera wbudowanej pętli do-while.

Jednakże, można zasymulować działanie pętli do-while, wykorzystując dostępne pętle i instrukcje sterujące przepływem w Pythonie.

W ciągu kilku chwil nauczysz się, jak to zrobić. Zaczynajmy!

Czym charakteryzuje się pętla Do-While?

Jeśli masz doświadczenie w programowaniu w językach takich jak C lub C++, zapewne zetknąłeś się z pętlą do-while.

W pętli do-while, blok kodu umieszczony wewnątrz pętli (ograniczony nawiasami klamrowymi) jest wykonywany w pierwszej kolejności, a następnie sprawdzany jest warunek kontynuacji pętli.

Możesz przetestować poniższe przykłady w C, korzystając z kompilatora online, bezpośrednio w przeglądarce.

Przeanalizujmy 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 rezultat.

Output

Do-While loop: 
Loop runs...

W powyższym przykładzie:

  • Zmienna count ma wartość 1, a warunek pętli to count < 0. Mimo to, pętla wykonuje się raz, mimo że warunek jest początkowo niespełniony.
  • To odróżnia ją od pętli while, która wykonuje się wyłącznie wtedy, gdy warunek jest spełniony na początku.
//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 count < 0 jest fałszywy na starcie, ponieważ zmienna count jest inicjalizowana na 1. Dlatego po skompilowaniu i uruchomieniu tego kodu, instrukcja w pętli while nie zostanie wykonana.

Output

While loop: 
//loop body does not run!

Porównanie pętli While i Do-While: omówienie różnic

Przyjrzyjmy się dokładniej różnicom między pętlami while i do-while.

Rozważmy ten przykład:

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

W powyższym kodzie:

  • Zmienna count jest inicjalizowana wartością 1.
  • Używamy pętli do-while.
  • Zmienna count jest zwiększana o 1 w każdym obiegu pętli, a warunek kontynuacji to count < 5.

Poniżej znajduje się wizualne objaśnienie, jak przebiega wykonanie: działanie pętli do-while i czterokrotne sprawdzanie warunku.

Output

Do-while loop: 
1
2
3
4

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

//while_example2

#include <stdio.h>

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

    return 0;
}

Poniższy schemat ilustruje działanie pętli while. W tym przykładzie pętla while sprawdza warunek pięć razy.

Output

While loop: 
1
2
3
4

Choć wyniki dla powyższych pętli while i do-while są identyczne, istnieją pewne subtelne różnice.

W pętli while warunek jest sprawdzany na początku, a następnie wykonywane jest ciało pętli. Dlatego, jeśli pętla ma wykonać się K razy, powinno być dokładnie K uruchomień, w których warunek jest prawdziwy. W iteracji numer K+1 warunek staje się fałszywy i sterowanie jest przekazywane poza pętlę.

Z drugiej strony, w pętli do-while warunek sprawdzany jest dopiero po wykonaniu K-tego obiegu pętli.

Dlaczego ta drobna różnica jest istotna? 🤔

Załóżmy, że warunek pętli jest obliczeniowo kosztowny, np. wymaga wywołania funkcji rekurencyjnej lub skomplikowanej operacji matematycznej.

W takich przypadkach, dla K powtórzeń pętli, korzystne może być użycie pętli do-while.

Podsumowanie różnic: While kontra Do-While

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

Pętla While Pętla Do-WhileSprawdzenie warunku pętli: Przed wykonaniem ciała pętliSprawdzenie warunku pętli: Po wykonaniu ciała pętliJeśli warunek początkowo nie jest spełniony, ciało pętli nie jest wykonywane. Ciało pętli jest wykonywane przynajmniej raz.Warunek pętli jest sprawdzany K razy dla K wykonań pętli.Warunek pętli jest sprawdzany K-1 razy dla K wykonań pętli.Kiedy stosować pętlę while?
– Pętla ma działać tak długo, jak warunek jest spełniony
– Dla pętli z wejściem kontrolowanym warunkiem
– Gdy warunek pętli nie jest obliczeniowo kosztownyKiedy stosować pętlę do-while?
– Pętla ma zostać wykonana przynajmniej raz, nawet jeśli warunek jest początkowo niespełniony
– Dla pętli z wyjściem kontrolowanym warunkiem
– Gdy warunek pętli jest obliczeniowo kosztowny

Symulacja działania pętli Do-While w Pythonie

Z poprzedniej sekcji wynika, że aby zasymulować działanie pętli do-while, musimy spełnić dwa warunki:

  • Instrukcje wewnątrz pętli muszą zostać wykonane przynajmniej raz, niezależnie od tego, czy warunek jest spełniony, czy nie.
  • Warunek należy sprawdzić po wykonaniu instrukcji wewnątrz pętli. Jeśli warunek jest fałszywy, sterowanie powinno zostać przekazane poza pętlę.

Nieskończona pętla While i instrukcja Break w Pythonie

Nieskończoną pętlę while w Pythonie można zdefiniować w następujący sposób.

while True:
    pass

# Zamiast True, możesz użyć dowolnego warunku, który zawsze będzie prawdziwy

while always-True-condition:
   pass

Instrukcja break służy do wyjścia z pętli i przekazania kontroli do pierwszej instrukcji znajdującej się poza nią.

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

W pierwszym przykładzie pętli do-while w C, warunkiem kontynuacji pętli jest count < 0. Zatem warunkiem wyjścia z pętli jest count >= 0.

Oto symulacja 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

Powrócimy do przykładów z wcześniejszej sekcji i zaimplementujemy je w Pythonie, symulując pętlę do-while.

#1. Wróćmy do przykładu: wypisywanie wartości zmiennej count, dopóki jest mniejsza od pięciu.

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

Pętla powinna działać tak długo, jak count jest mniejsze niż pięć. Zatem, kiedy count osiągnie pięć, powinniśmy wyjść z pętli. Zatem count == 5 jest warunkiem wyjścia.

Łącząc to, otrzymujemy:

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ę w zgadywanie liczb jako konstrukcję typu „do-while” w Pythonie.

W grze w zgadywanie liczb, sprawdzamy próby użytkownika w odniesieniu do tajnej liczby. Użytkownik ma odgadnąć tajną liczbę w ramach określonej liczby prób, np. max_guesses.

Kod powinien monitować użytkownika o wprowadzenie, niezależnie od tego, czy jego próba jest poprawna, czy nie. Możemy to osiągnąć za pomocą nieskończonej pętli while.

Kiedy powinniśmy wyjść z pętli?

Sterowanie powinno zostać przekazane poza pętlę, gdy zajdzie jedna z poniższych sytuacji:

  • Użytkownik odgadł liczbę.
  • Użytkownik nie odgadł jeszcze liczby, ale wyczerpał dostępną liczbę prób. Liczba błędnych prób użytkownika = max_guesses.
  • Poniższy kod pokazuje, jak 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 od razu wychodzić z pętli, możemy dodać instrukcje print() wyjaśniające, co się stało, gdy natrafimy na każdy z powyższych warunków, a następnie wyjść 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 wyniki.

    W tych przykładach instrukcja break powoduje wyjście z pętli, gdy użytkownik odgadnie tajną liczbę.

    # Przykładowy wynik, gdy secret_number = 43, a użytkownik odgadnie prawidłowo!
    
    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ą liczbę prób, ale nie odgadnie prawidłowo tajnej liczby.

    # Przykładowy wynik, gdy secret_number = 33, a użytkownik nie odgadnie poprawnie!
    
    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!

    Podsumowanie

    Mam nadzieję, że ten poradnik pomógł Ci zrozumieć, jak symulować pętlę do-while w Pythonie.

    Oto kluczowe wnioski:

    • Użyj nieskończonej pętli, aby mieć pewność, że kod w pętli zostanie wykonany przynajmniej raz. Może to być prosta nieskończona pętla, np. while True, lub while , gdzie warunek zawsze jest spełniony.
    • Sprawdź warunek wyjścia z pętli w jej wnętrzu i użyj instrukcji break, aby wyjść z pętli, gdy warunek ten zostanie spełniony.

    Następnie dowiedz się, jak korzystać z pętli for i funkcji enumerate() w Pythonie.


    newsblog.pl