В този урок ще научите как да емулирате 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.
Ето визуално обяснение как се извършва изпълнението: как работи цикълът 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 цикъл?
– Цикълът трябва да се изпълнява поне веднъж за първоначално невярно условие за цикъл
– За контури с контролиран изход
– Когато условието за цикъл е скъпо от изчислителна гледна точка
Емулиране на поведението на 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 конструкция.
В играта за отгатване на числа ние проверяваме предположенията на потребителя спрямо предварително зададено тайно число. Потребителят трябва да познае тайното число в рамките на определен брой максимални разрешени опити, да речем max_guesses.
Кодът трябва да подкани потребителя за въвеждане, независимо дали предположението му е правилно или грешно. Можем да направим това с помощта на безкраен цикъл while.
И така, кога трябва да излезем от цикъла?
Контролът трябва да излезе от цикъла, когато се случи някое от следните:
Клетката с код по-долу показва как можем да го направим.
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.