Как да емулираме Do-While цикли в Python

В този урок ще научите как да емулирате do-while цикъл в Python.

Във всеки език за програмиране циклите ви помагат да извършвате определени действия многократно, в зависимост от условието за цикъл. Python поддържа конструкциите на цикъла while и for, но не поддържа изначално цикъла do-while.

Можете обаче да емулирате do-while цикъл, като разберете как работи – като използвате съществуващи цикли и команди за контрол на цикъл в Python.

Ще научите как да направите това през следващите няколко минути. Нека да започнем!

Какво представлява конструкцията Do-While Loop?

Ако сте програмирали на езици като C или C++, вероятно ще сте попаднали на конструкцията на do-while цикъл.

В цикъл do-while първо се изпълнява наборът от оператори в тялото на цикъла — в рамките на блока, разделен с фигурни скоби — и след това се проверява условието за цикъл.

Можете да изпълните следните C примери в онлайн C компилатора на pctechbg.net – направо от вашия браузър.

Разгледайте следния кодов фрагмент:

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

Ето изхода.

Output

Do-While loop: 
Loop runs...

В горния пример:

  • Стойността на count е 1, а условието за цикъл е count < 0. Въпреки това, цикълът се изпълнява веднъж, въпреки че условието за цикъл първоначално е False.
  • Това е в контраст с цикъла while, който се изпълнява само ако условието за цикъл е True на първо място.
//while_example1

#include <stdio.h>

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

    return 0;
}

Както споменахме, условието за цикъл, count < 0 е False, първоначално променливата count се инициализира на 1. Така че при компилиране и изпълнение на горния код виждаме, че операторът в тялото на цикъла while не се изпълнява.

Output

While loop: 
//loop body does not run!

Докато срещу Do-While: Преглед на разликите

Нека разгледаме по-отблизо разликите между циклите while и do-while.

Помислете за този пример:

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

В горната кодова клетка:

  • Променливата count се инициализира на 1.
  • Използваме do-while цикъл.
  • Променливата за броене се увеличава с 1 по време на всяко преминаване през цикъла и условието за цикъл е настроено да брои < 5.
  Как мога да видя къде се използва моят Apple ID?

Ето визуално обяснение как се извършва изпълнението: как работи цикълът do-while и четири пъти проверява за условието за цикъл.

Output

Do-while loop: 
1
2
3
4

Ако вместо това използвате цикъл while, това ще имаме.

//while_example2

#include <stdio.h>

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

    return 0;
}

Фигурата по-долу обяснява изпълнението на цикъла while; в този пример цикълът while проверява условието за цикъл пет пъти.

Output

While loop: 
1
2
3
4

Въпреки че резултатите за горните цикли while и do-while са идентични, има някои фини разлики.

В цикъла while проверката за условие е първа, последвана от тялото на цикъла. Така че, ако искате цикълът да се изпълнява K пъти, трябва да има точно K изпълнения, при които условието за цикъл е True. В итерация номер K+1 условието става False и контролата излиза от цикъла.

От друга страна, ако използвате do-while цикъл: условието за цикъл се проверява за K-тия път само след като K премине през цикъла.

И така, защо това незначително подобрение е полезно?🤔

Да предположим, че условието за цикъл е скъпо от изчислителна гледна точка: например включва извикване на рекурсивна функция, сложна математическа операция и т.н.

В такива случаи, за K повторения на тялото на цикъла, би било полезно вместо това да използвате do-while цикъл.

Докато срещу Do-While Резюме

Нека представим в таблица основните разлики, които сме научили. 👩‍🏫

Докато LoopDo-While LoopCheck за условие за цикъл: Преди изпълнението на тялото на цикъла. Проверка за условие за цикъл: След изпълнението на тялото на цикъла. Ако условието е False първоначално, тялото на цикъла не се изпълнява. Ако условието е False първоначално, тялото на цикъла се изпълнява точно веднъж. Условието за цикъл се проверява K пъти за K преминава през цикъла. Условието за цикъл се проверява K-1 пъти за K преминава през цикъла. Кога да се използва while цикъл?
– Цикълът трябва да работи, докато условието е True
– За входно контролирани контури
– Когато условието за цикъл не е скъпо от изчислителна гледна точка Кога да използвам do-while цикъл?
– Цикълът трябва да се изпълнява поне веднъж за първоначално невярно условие за цикъл
– За контури с контролиран изход
– Когато условието за цикъл е скъпо от изчислителна гледна точка

  APICS Certified Supply Chain Professional (CSCP) Сертифициране: Как да го получите

Емулиране на поведението на Do-While Loop в Python

От предишния раздел имаме следните две условия за емулиране на do-while цикъла:

  • Изявленията в тялото на цикъла трябва да се изпълнят поне веднъж – независимо дали условието за цикъл е True или False.
  • Условието трябва да се провери след изпълнение на оператори в тялото на цикъла. Ако условието е False, управлението трябва да излезе от цикъла: изход от управлението.

Infinite While Loop и оператор Break в Python

Можете да дефинирате безкраен цикъл while в Python, както е показано по-долу.

while True:
    pass

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

while always-True-condition:
   pass

Операторът break може да се използва за излизане от тялото на цикъл и прехвърляне на контрола към първия оператор извън тялото на цикъла.

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

В първия пример за цикъл do-while в C условието за продължаване на цикъла е count < 0. Така че условието за излизане от цикъла е стойност на count нула или по-голяма от нула (count >= 0).

Ето емулацията на do-while цикъла в Python:

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

Примери за Python Do-While Loop

Ще прегледаме отново примерите от предишния раздел и ще ги пренапишем на Python, като емулираме do while цикъл.

#1. Нека преразгледаме примера: отпечатване на стойности на променливата count, когато count е по-малко от пет.

Ние знаем как да дефинираме безкраен цикъл, така че тялото на цикъла да се изпълни поне веднъж.

Цикълът трябва да продължи, докато броят е по-малък от пет. Следователно, когато броят достигне пет, трябва да излезем от цикъла. Така че count == 5 е условието за изходен контрол.

Събирайки го заедно, имаме:

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. Можем също така да пренапишем играта за отгатване на числа като Python do-while конструкция.

  Как да наблюдавате използването на мрежата на докинг станцията на вашия Mac

В играта за отгатване на числа ние проверяваме предположенията на потребителя спрямо предварително зададено тайно число. Потребителят трябва да познае тайното число в рамките на определен брой максимални разрешени опити, да речем max_guesses.

Кодът трябва да подкани потребителя за въвеждане, независимо дали предположението му е правилно или грешно. Можем да направим това с помощта на безкраен цикъл while.

И така, кога трябва да излезем от цикъла?

Контролът трябва да излезе от цикъла, когато се случи някое от следните:

  • Когато потребителят е познал числото
  • Когато потребителят все още не е познал числото, но е изчерпал наличния брой предположения. Броят на неправилните предположения от потребителя = max_guesses.
  • Клетката с код по-долу показва как можем да го направим.

    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

    Вместо да излезем от цикъла, можем да добавим обяснителни оператори print(), когато срещнем всяко от горните условия и след това да излезем от цикъла.

    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

    Два примерни резултата са показани по-долу.

    В този примерен изход операторът break излиза от цикъла, когато потребителят познае тайното число правилно.

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

    Ето още един примерен изход, когато потребителят достигне максималния наличен брой предположения, но не успява да познае тайното число правилно.

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

    Заключение

    Надявам се този урок да ви е помогнал да разберете как да емулирате do-while цикъл в Python.

    Ето основните изводи:

    • Използвайте безкраен цикъл, за да сте сигурни, че тялото на цикъла ще се изпълнява поне веднъж. Може да е тривиален безкраен цикъл, като while True, или може да бъде while <условие>, така че условието винаги да е True.
    • Проверете за условието за изход вътре в цикъла и използвайте командата break, за да излезете от цикъла при определено условие.

    След това научете как да използвате for циклите и функцията enumerate() в Python.