Як эмуляваць цыклы 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 techking.by — прама з вашага браўзера.

Разгледзім наступны фрагмент кода:

//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.
Праверце гэта:  Як стварыць дыяграму Ганта ў Табліцах Google

Вось візуальнае тлумачэнне таго, як адбываецца выкананне: як працуе цыкл 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.

Рэзюмэ ў той час як у параўнанні з выкананнем

Давайце звядзем у табліцу асноўныя адрозненні, якія мы даведаліся. 👩‍🏫

У той час як LoopDo-While LoopПраверце ўмовы цыклу: Перад выкананнем цела цыклу Праверце ўмовы цыклу: Пасля выканання цела цыклу. Калі першапачаткова ўмова False, цела цыклу не выконваецца. Калі першапачаткова ўмова False, цела цыклу выконваецца роўна адзін раз. Умова цыклу правяраецца K разоў, калі K праходзіць праз цыкл. Умова цыклу правяраецца K-1 разоў, калі K праходзіць праз цыкл. Калі выкарыстоўваць цыкл while?
– Цыкл павінен працаваць, пакуль умова ісціна
– Для шлейфаў з кантролем ўваходу
– Калі ўмова цыкла не з’яўляецца вылічальнай дарогай Калі выкарыстоўваць цыкл do-while?
– Цыкл павінен быць выкананы хаця б адзін раз для першапачаткова Ілжывага ўмовы цыклу
– Для цыклаў з кіраваным выхадам
– Калі ўмовы цыкла з’яўляюцца вылічальна дарагімі

Праверце гэта:  Што адбываецца з покемонам у трэнажорнай зале, калі яго захопяць

Эмуляцыя паводзін цыклу Do-While у Python

З папярэдняга раздзела ў нас ёсць наступныя дзве ўмовы для эмуляцыі цыклу do-while:

  • Аператары ў целе цыкла павінны выконвацца як мінімум адзін раз, незалежна ад таго, ці з’яўляецца ўмова цыклу True або False.
  • Умова павінна быць праверана пасля выканання аператараў у целе цыкла. Калі ўмова несапраўдная, кантроль павінен выйсці з цыклу: выйсці з кіравання.

Бясконцы цыкл While і аператар 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 >= 0).

Вось эмуляцыя цыклу do-while у Python:

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

Прыклады цыкла Do-While на Python

Мы вернемся да прыкладаў з папярэдняга раздзела і перапішам іх на 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.

У гульні ў адгадванне лікаў мы правяраем здагадкі карыстальніка з загадзя вызначаным сакрэтным лікам. Карыстальнік павінен адгадаць сакрэтнае лік на працягу пэўнай колькасці максімальна дазволеных спроб, скажам, max_guesses.

Праверце гэта:  7 лепшых хостынгаў сервераў V Rising для ўсіх

Код павінен прапаноўваць карыстальніку ўвод, незалежна ад таго, правільная ці няправільная яго здагадка. Мы можам зрабіць гэта з дапамогай бясконцага цыклу 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.