Привет! Давай разберем тему Цикл while в Python. Выбирай формат: видеолекция от преподавателя университета JavaRush или детальный текстовый гайд, который я создал специально для тебя.
Первые программы, которые мы пишем, обычно представляют собой простую последовательность команд, выполняемых строго одна за другой. Это может быть, например, вывод приветственного сообщения в консоль или выполнение арифметических операций. Затем мы учимся добавлять ветвления, позволяющие программе выбирать действия в зависимости от заданных условий. Пример управления климатической системой в комнате можно выразить так:

if temp_room > temp_comfort:
    air_conditioner_on()
if temp_room < temp_comfort:
    heater_on()
Теперь перейдём к следующему этапу. В повседневной жизни мы часто сталкиваемся с задачами, требующими многократного повторения одних и тех же действий. Представьте, что вы готовите яблочный пирог и чистите яблоки. Этот процесс можно описать так: Пока в корзине есть яблоки, выполняйте:
  • Возьмите одно яблоко.
  • Очистите его и нарежьте дольками.
  • Положите дольки на тесто в форме.
  • Повторите с начала.
Если у вас, скажем, десять яблок, вы будете повторять эти шаги для каждого из них. Но как запрограммировать такое повторение? Если просто написать команды для каждого яблока, это будет неудобно: при изменении количества яблок код придётся переписывать. Если яблок меньше, часть команд окажется лишней, а если больше — некоторые яблоки останутся необработанными. Такой подход громоздок и сложен для изменения.

Циклы – операторы многократного выполнения действий

Для решения подобных задач в Python используется цикл while. Он позволяет компактно и понятно организовать многократное выполнение действий. Например, процесс подготовки яблок для пирога можно записать так:

while число_яблок_в_тазике > 0:
    яблоко = тазик.взять_очередное_яблоко()
    положить_в_пирог(яблоко.чистить().нарезать())
    число_яблок_в_тазике -= 1  # -= уменьшает количество яблок на единицу

print('Яблоки для пирога обработаны.')

Синтаксис цикла

Цикл while в Python имеет следующий вид:

while логическое_выражение:
    # Тело цикла - периодически выполняемые операторы
    действие1
    действие2
    # ...
Как он работает:
  • Проверяется логическое выражение после ключевого слова while.
  • Если выражение истинно (True), выполняются все команды в теле цикла, после чего возвращаемся к шагу 1.
  • Если выражение ложно (False), выполнение цикла прекращается, и программа переходит к команде, следующей за циклом.

Цикл с предусловием

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

def main():
    number = 3  # Возводимое в степень число
    result = 1  # Результат возведения в степень
    power = 1   # Начальный показатель степени
    
    while power <= 10:  # условие входа в цикл
        result = result * number
        print(f"{number} в степени {power} = {result}")
        power += 1

main()
Результат вывода в консоль:

3 в степени 1 = 3
3 в степени 2 = 9
3 в степени 3 = 27
3 в степени 4 = 81
3 в степени 5 = 243
3 в степени 6 = 729
3 в степени 7 = 2187
3 в степени 8 = 6561
3 в степени 9 = 19683
3 в степени 10 = 59049

Интересные факты о работе с циклами

Управляющие команды в теле цикла

Существуют две команды, влияющие на ход выполнения цикла: break и continue. continue – прекращает выполнение текущей итерации цикла и осуществляет переход к проверке логического выражения оператора while. Если вычисленное выражение будет истинно – выполнение цикла будет продолжено. break – немедленно прекращает выполнение текущего цикла и осуществляет переход к первой команде за его пределами. Таким образом, выполнение текущего цикла прерывается. Вспомним про наш фруктовый пример. Если мы не уверены в качестве предложенных яблок, то могли бы изменить код с применением команды continue:

while число_яблок_в_тазике > 0:
    яблоко = тазик.взять_очередное_яблоко()
    число_яблок_в_тазике -= 1  # уменьшаем количество яблок на единицу
    
    if яблоко.плохое():  # метод вернет True для гнилого яблока
        яблоко.выкинуть_в_мусор()
        continue  # продолжим цикл, перейдем к условию
    
    положить_в_пирог(яблоко.чистить().нарезать())
Конструкцию continue часто применяют, когда в теле цикла необходимо выполнять команды при наступлении некоторого условия. Пример – вычисление в цикле while суммы кубов натуральных чисел, у которых квадрат меньше их количества:

def main():
    sum_value = 0    # итоговая сумма
    i = 0           # стартовое число ряда
    count = 20      # количество чисел
    
    while i <= count:
        i += 1      # берем очередное число
        if i * i <= count:  # если квадрат числа меньше количества чисел
            continue        # сумму не считаем, переходим к следующему числу
        sum_value += i * i * i  # иначе считаем сумму кубов чисел
    
    print(sum_value)  # печатаем результат

main()

Бесконечный цикл

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

while True:
    # Тело цикла
    pass
В этом случае и пригодится применение команды break для организации выхода из него. Этот вид цикла имеет место при ожидании внешних условий, которые формируются за пределами логики тела цикла. Например, в играх, эмулирующих виртуальный мир вокруг героя (выход из цикла = выход из игры), или при использовании алгоритмов, возможно, улучшающих результат с каждым последующим вызовом в цикле. Следует помнить, что в обычных условиях бесконечные циклы – одна из проблем неустойчивости программы. Для демонстрации вернёмся к степеням числа:

def main():
    number = 3  # Возводимое в степень число
    result = 1  # Результат возведения в степень
    power = 1   # Начальный показатель степени
    
    while True:
        result = result * number
        print(f"{number} в степени {power} = {result}")
        power += 1
        if power > 10:
            break  # выход из цикла

main()
Результат вывода в консоль:

3 в степени 1 = 3
3 в степени 2 = 9
3 в степени 3 = 27
3 в степени 4 = 81
3 в степени 5 = 243
3 в степени 6 = 729
3 в степени 7 = 2187
3 в степени 8 = 6561
3 в степени 9 = 19683
3 в степени 10 = 59049

Вложенные циклы

Вот мы и подошли к завершающей теме о наших циклах. Вспомним о яблочном пироге и наш «цикл»: Если в тазике есть яблоки, выполняем шаги:
  • Берем яблоко
  • Чистим и нарезаем его дольками
  • Помещаем на основание пирога из теста на сковороде
  • Возвращаемся на шаг 1
Подробнее распишем процесс нарезания дольками:
  • Число долек = 0
  • Пока число долек < 12, выполнить шаги:
    • Отрезать очередную дольку от яблока
    • Кол-во долек += 1
    • Возвращаемся к проверке условия
Получили цикл в цикле. Подобные конструкции весьма частые. Для завершающего примера построим таблицу умножения, которую школьники видели на обложках тетрадей в младших классах:Цикл while в Python - 1

def main():
    # Выводим значения второго множителя в строке
    print("    2  3  4  5  6  7  8  9")
    
    i = 2  # первый множитель, присваиваем стартовое значение
    while i < 10:  # Первый цикл, выполняем пока первый множитель меньше 10
        print(f"{i} | ", end="")  # Выводим первый множитель в начало строки
        
        j = 2  # второй множитель, стартовое значение
        while j < 10:  # Второй цикл, выполняем пока второй множитель меньше 10
            mul = i * j  # Считаем произведение множителей
            if mul < 10:  # Если содержит одну цифру-после него выводим два пробела
                print(f"{mul}  ", end="")
            else:  # иначе выводим произведение и после него - один пробел
                print(f"{mul} ", end="")
            j += 1  # Увеличиваем на единицу второй множитель
        
        print()  # Перейдем на следующую строку вывода
        i += 1   # Увеличиваем на единицу первый множитель

main()
Результат вывода в консоль:

    2  3  4  5  6  7  8  9
2 | 4  6  8  10 12 14 16 18 
3 | 6  9  12 15 18 21 24 27 
4 | 8  12 16 20 24 28 32 36 
5 | 10 15 20 25 30 35 40 45 
6 | 12 18 24 30 36 42 48 54 
7 | 14 21 28 35 42 49 56 63 
8 | 16 24 32 40 48 56 64 72 
9 | 18 27 36 45 54 63 72 81 

Цикл while-else в Python

Python имеет уникальную особенность - конструкцию while-else. Блок else выполняется, если цикл завершился естественным образом (не через break):

def search_number(numbers, target):
    i = 0
    while i < len(numbers):
        if numbers[i] == target:
            print(f"Число {target} найдено на позиции {i}")
            break
        i += 1
    else:
        print(f"Число {target} не найдено в списке")

# Примеры использования
numbers = [1, 3, 5, 7, 9]
search_number(numbers, 5)  # Число 5 найдено на позиции 2
search_number(numbers, 4)  # Число 4 не найдено в списке
Циклы (в частности, оператор while) – один из фундаментальных кирпичиков построения программ. Решая задачи на JavaRush, вы изучите все их разнообразие, разберёте тонкости функционирования и получите практические навыки их применения.