Как эмулировать циклы Do-While в Python

Опубликовано: 2022-08-31

В этом руководстве вы узнаете, как эмулировать цикл do-while в Python .

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

Однако вы можете эмулировать цикл do-while, поняв, как он работает, используя существующие циклы и операторы управления циклом в Python.

Вы узнаете, как это сделать в течение следующих нескольких минут. Давайте начнем!

Что такое конструкция цикла Do-While?

Что такое конструкция Do-While Loop

Если вы программировали на таких языках, как C или C++, вы, вероятно, сталкивались с конструкцией цикла do-while.

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

Вы можете запустить следующие примеры C в онлайн-компиляторе Geekflare прямо из браузера.

Рассмотрим следующий фрагмент кода:

 //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: обзор различий

Рассмотрим этот пример:

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

В приведенной выше ячейке кода:

  • Переменная count инициализируется 1.
  • Мы используем цикл do-while.
  • Переменная count увеличивается на 1 при каждом проходе цикла, а условие цикла устанавливается count < 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("%d\n",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 Резюме

Давайте сведем в таблицу ключевые различия, которые мы узнали.

Пока цикл Цикл Do-While
Проверка условия цикла: Перед выполнением тела цикла Проверка условия цикла: после выполнения тела цикла
Если изначально условие равно False , тело цикла не выполняется. Если изначально условие равно False , тело цикла выполняется ровно один раз .
Условие зацикливания проверяется K раз за K проходов через цикл. Условие зацикливания проверяется K-1 раз за K проходов через цикл.
Когда использовать цикл while?
- Цикл должен выполняться до тех пор, пока условие истинно
– Для контуров с контролируемым входом
– Когда условие зацикливания не требует больших вычислительных ресурсов.
Когда использовать цикл do-while?
- Цикл должен запускаться хотя бы один раз для изначально ложного условия цикла.
– Для петель с контролируемым выходом
– Когда условие зацикливания требует больших вычислительных ресурсов.

Эмуляция поведения цикла Do-While в Python

Из предыдущего раздела у нас есть следующие два условия для эмуляции цикла do-while:

  • Операторы в теле цикла должны выполняться хотя бы один раз — независимо от того, является ли условие цикла True или False .
  • Условие следует проверять после выполнения инструкций в теле цикла. Если условие равно 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 .

Код должен подсказывать пользователю ввод данных независимо от того, верна его догадка или нет. Мы можем сделать это, используя бесконечный цикл while.

Итак, когда мы должны вырваться из петли?

Элемент управления должен выйти из цикла, когда произойдет одно из следующих событий:

  1. Когда пользователь угадал число
  2. Когда пользователь еще не угадал число, но исчерпал все доступные варианты. Количество неправильных догадок пользователя = 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 <condition> , чтобы условие всегда было True.
  • Проверьте условие выхода внутри цикла и используйте оператор break , чтобы выйти из цикла при определенном условии.

Затем узнайте, как использовать циклы for и функцию enumerate() в Python.