Цикл while в Python. Как это работает, примеры использования

Циклы — один из основных инструментов любого языка. В Python есть два основных цикла, один из которых — while. Рассмотрим его, а также для лучшего понимания картины еще один. Ведь по сравнению с чем-то подобным гораздо легче понять любой материал, не так ли?

Понятие цикла

Цикл необходим, когда определенное действие необходимо выполнить несколько раз. Это очень упрощенно, поскольку на самом деле спектр применения циклов гораздо шире. В Python есть два основных типа циклов: for и while. Самый популярный – для.

Помимо конкретных действий, вы можете зацикливать различные фрагменты кода до определенного момента. Это может происходить определенное количество раз или до тех пор, пока выполняется определенное условие.

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

Цикл для

Наш цикл For не является счетчиком, как во многих других языках. Его задача — перечислить определенную последовательность значений. Что это значит? Допустим, у нас есть список элементов. Сначала цикл принимает первое, второе, третье и так далее.

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

>>> список = [10, 40, 20, 30]

>>> для элемента в списке:

… печать(элемент + 2)

...

12

42

22

32

В нашем примере мы использовали переменную элемент после команды for. В общем, имя может быть каким угодно. Например, популярное обозначение — i. И при каждой итерации этой переменной будет присваиваться конкретный объект из списка, который мы назвали соответствующим словом.

В нашем случае список представляет собой последовательность чисел 10,40,20,30. На каждой итерации в переменной появляется соответствующее значение. Например, как только цикл запускается, переменная элемент присвоено значение 10. На следующей итерации десятка превращается в число 40, на третий раз — в число 20 и, наконец, на последней итерации цикла — в 30.

Сигналом окончания цикла является окончание элементов списка.

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

>>> список = [1,2,3,4,5]

Или воспользуйтесь функцией Лен(), чтобы определить длину списка. Но в этом случае лучше использовать цикл пока, потому что нет необходимости использовать переменную.

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

Пока цикл

В отличие от цикла для, который просто перебирает значения последовательности, цикл в то время как имеет больше применений. Название этого типа циклов переводится как «еще». То есть «пока».

Это универсальный цикл, который есть во всех языках программирования. И в чем-то он напоминает условный оператор тис, который выполняет проверку на соответствие определенному условию. Только в отличие от условного оператора, в то время как выполняет проверку на каждой итерации, а не один раз. И только если условие ложно, цикл завершается и выполняется следующая за ним команда. Проще говоря, если ситуация, в которой он работает, уже не актуальна.

Если мы нарисуем цикл в то время как упрощенно это делается по такой схеме.Цикл while в Python. Как это работает, примеры использования

Основная ветка программы (выполняющаяся вне цикла) изображена на этом рисунке синими прямоугольниками. Бирюзовый символизирует тело цикла. В свою очередь ромб — это условие, которое проверяется на каждой итерации.

Цикл в то время как может привести к двум исключениям:

  1. Если в начале цикла логическое выражение не возвращает true, то он просто не начинается, завершившись до выполнения. В целом такая ситуация нормальна, поскольку при определенных обстоятельствах приложение может не предусмотреть наличие выражений в теле цикла.
  2. Если выражение всегда истинно, это может привести к возникновению цикла. То есть к бесконечной прокрутке цикла. Поэтому в таких программах всегда должен быть оператор выхода из цикла или программы. Однако такая ситуация возникнет, если программа смогла определить истинность или ложность того или иного условия. Если ей это сделать не удалось, то возвращается ошибка с завершением работы программы. Или вы можете обработать ошибку, и тогда, если она произойдет, будет выполнен определенный код.

Вариантов, как обработать ошибку, может быть огромное количество. Например, программа может попросить пользователя правильно ввести данные. Так, если человек указал отрицательное число там, где оно может быть только положительным, или ввел буквы там, где должны быть только цифры, программа сможет об этом сообщить.

Примеры цикла while

Вот пример кода, который обрабатывает ошибку в этом случае.

n = input("Введите целое число: ") 

а тип(n) != int:

    Пытаться:

        п = целое число (п)

    кроме ValueError:

        print("Неправильная запись!")

        n = input("Введите целое число: ") 

если n % 2 == 0:

    печать («Чет»)

еще:

    печать («Нечетный»)

Имейте в виду, что Python использует двоеточия для объявления сложных конструкций кода.

В приведенном выше коде мы определили условие, которое мы должны проверить, является ли число целым числом. Если да, то возвращается false. Если нет, то правда.

Во второй части кода, где используется оператор ifмы использовали оператор %, чтобы найти остаток после операции деления. Следующий шаг — проверить, является ли число четным. Если нет, то остаток в этом случае равен единице. Соответственно, число нечетное. 

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

То есть цикл будет регулярно выполняться до тех пор, пока не наступит условие. В данной ситуации это работает следующим образом. 

То есть можно пойти от обратного: зациклить определенное действие до тех пор, пока событие не станет ложным.

Парсинг кода

Теперь давайте посмотрим подробнее, как работает этот код. Для этого разберем его шаг за шагом.

  1. Сначала пользователь вводит строку, которая принимается переменной n. 
  2. Использование петли в то время как проверяется тип этой переменной. При первой записи оно не равно Int. Следовательно, в результате проверки установлено, что данное условие верно. Поэтому вводится тело цикла.
  3. С помощью оператора стараться мы пытаемся преобразовать строку в число. Если это сделать, то никакой ошибки не возникает. Соответственно, нет необходимости его обрабатывать. Поэтому интерпретатор возвращается в начало цикла, и по результатам проверки оказывается, что оно стало целым числом. Итак, переходим к шагу 7.
  4. Если преобразование не удалось, выдается ValueError. В этом случае поток программы отправляется обработчику исключений.
  5. Пользователь вводит новое значение, которое присваивается переменной n.
  6. Интерпретатор возвращается к шагу 2 и проверяет еще раз. Если это целое значение, перейдите к шагу 7. Если нет, преобразование повторяется в соответствии с шагом 3.
  7. С помощью оператора if Определяет, есть ли остаток после деления числа на 2. 
  8. Если нет, возвращается текст «даже».
  9. Если нет, возвращается текст «нечетный».

Рассмотрим теперь такой пример. Попробуйте определить, сколько раз пройдет этот цикл?

всего = 100 

я = 0

пока я < 5:

    n = целое число (вход())

    итого = итого — n

    i = i + 1 

print("Осталось", всего)

Правильный ответ — 5. Изначально значение переменной i - нуль. Интерпретатор проверяет, равна ли переменная i 4 или меньше. Если да, то значение возвращается. правда, и цикл выполняется соответственно. Значение увеличивается на единицу.

После первой итерации значение переменной становится 1. Происходит проверка, и программа понимает, что это число снова меньше 5. Соответственно, тело цикла выполняется второй раз. Поскольку шаги аналогичны, значение также увеличивается на единицу, и переменная теперь равна 2.

Это значение также меньше пяти. Затем цикл выполняется в третий раз, добавляя к переменной i 1 и ему присваивается значение 3. Это снова меньше пяти. И вот дело доходит до шестой итерации цикла, на которой значение переменной i равно 5 (ведь изначально оно было равно нулю, насколько мы помним). Соответственно, это условие не проходит проверку, и цикл автоматически завершается и осуществляется переход к следующему шагу, находящемуся за его пределами (или завершение программы, если не предусмотрены следующие шаги).

Цикл может происходить и в противоположном направлении. Вот пример кода, где при каждой последующей итерации из текущего значения переменной вычитается единица. 

всего = 100 

а всего > 0:

    n = целое число (вход())

    итого = итого — n 

print("Ресурс исчерпан")

Попробуйте угадать, что делает эта программа! Представьте, что в переменной общий сохраняется информация о программном ресурсе. Каждый раз интерпретатор проверяет, существует ли ресурс. Если нет, то выводится текст «Ресурс исчерпан» и программа закрывается. И с каждой итерацией цикла ресурс уменьшается на число, указанное пользователем.

А теперь домашнее задание. Попробуйте изменить приведенный выше код так, чтобы переменная физически не могла стать отрицательной. 

4 комментариев

Оставьте комментарий