Цикл while в Python: синтаксис и примеры для начинающих

Запускаем бесконечное выполнение кода

Цикл while в Python: синтаксис и примеры для начинающих

Цикл while в Python выполняет блок кода, пока проверяемое условие остаётся истинным (True). Как только условие становится ложным (False), цикл завершается.

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

Вспомним, что будет, если на странице регистрации ввести email без «@». Код внутри While в Питоне это заметит, и программа попросит повторить попытку. Заранее неизвестно, сколько раз пользователь ошибётся, поэтому здесь while удобнее, чем for — цикл будет повторяться до тех пор, пока пользователь не введёт корректный адрес.

Что такое цикл while в Python

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

Чем while отличается от for

Цикл for проходит по заранее известной последовательности: списку, строке, диапазону чисел. Количество итераций определяется длиной этой последовательности ещё до старта программы.

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

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

Базовый синтаксис while в Python выглядит так:

# Задаём начальное значение переменной
a = 10
# Условие: цикл выполняется, пока a больше нуля
while a > 0:
    # Тело цикла: уменьшаем a на 1 при каждой итерации
    a -= 1

Конструкция состоит из ключевого слова while, условия и тела цикла. Условие — любое выражение, которое возвращает True или False. Тело — блок кода, который выполняется, пока условие истинно.

Роль двоеточия и отступов

Двоеточие после условия сообщает Python, что дальше идёт блок кода. Без двоеточия интерпретатор вернёт синтаксическую ошибку.

Отступ четыре пробела или один Tab обозначает границы цикла while в Python. Все строки с одинаковым отступом относятся к одному блоку.

# Условие проверяется перед каждой итерацией
while a > 0:
    # Эта строка входит в тело цикла
    a -= 1
# Эта строка не входит в тело цикла и выполняется после его завершения
print(a)

Как работает цикл while в Python

Алгоритм работы while укладывается в три шага:

  1. Интерпретатор вычисляет условие.
  2. Если результат True — выполняется тело цикла.
  3. Возвращается к шагу 1.

Когда условие возвращает False, интерпретатор пропускает тело и переходит к коду ниже. Если условие ложное с самого начала, тело не выполнится ни разу. Именно так работает цикл с предусловием — в отличие от цикла с постусловием, где тело выполняется хотя бы один раз.

Полезный блок со скидкой

Пока цикл ещё не ушёл в бесконечность — самое время освоить что-то новое в ИТ. Держите промокод Практикума на любой платный курс: KOD (можно просто нажать). Он даст скидку при покупке и позволит сэкономить на обучении.

Бесплатные курсы в Практикуме тоже есть — по всем специальностям и направлениям, начать можно в любой момент, карту привязывать не нужно, если что.

Счётчик: почему важно изменять переменную

В Pythone внутри тела цикла while должно происходить вычисление, влияющее на условие. Обычно это изменение переменной-счётчика.

i = 1
while i <= 5:
    print(i)
    i += 1

Без строки i += 1 переменная навсегда останется равной 1. В итоге условие i <= 5 никогда не станет ложным, и будет выполняться бесконечно.

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

Иногда бесконечный цикл в Python создают намеренно. Конструкция while True создаёт бесконечный цикл — тело выполняется без остановки. Выход из него создают внутри тела через оператор break.

# Условие всегда истинно
while True:
    # Считываем ввод пользователя
    user_input = input("Введите число: ")
    # Проверяем, ввёл ли пользователь нужное значение
    if user_input == "0":
        # Выходим из цикла при выполнении условия
        break

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

Управление циклом: break, continue, else

В Python поведение цикла while меняется с помощью оператора break, оператора continue и блока else.

Оператор break: принудительный выход

Break прерывает цикл немедленно, независимо от того, истинно условие или нет. Интерпретатор выходит из цикла и переходит к коду после него.

i = 0
# Цикл выполняется, пока i меньше 10
while i < 10:
    # Выходим из цикла, когда i равно 5
    if i == 5:
        break
    # Выводим текущее значение i
    print(i)
    # Увеличиваем i на 1
    i += 1

Вывод:

0
1
2
3
4

Оператор continue: пропуск итерации

Continue прерывает итерацию и возвращает интерпретатор к проверке условия.

i = 0
# Цикл выполняется, пока i меньше 5
while i < 5:
    # Увеличиваем i на 1 до проверки условия
    i += 1
    # Пропускаем вывод, если i равно 3
    if i == 3:
        continue
    # Выводим значение i
    print(i)

Вывод:

1
2
4
5

Блок else: выполнение после нормального завершения

Блок else выполняется один раз — после того, как условие цикла стало ложным. Если цикл завершился через break, блок else не выполняется.

i = 0
# Цикл выполняется, пока i меньше 3
while i < 3:
    # Выводим текущее значение i
    print(i)
    # Увеличиваем i на 1
    i += 1
# Выполняется после завершения цикла без break
else:
    print("Цикл завершён")

Вывод:

0
1
2
Цикл завершён

Флаги (сигнальные метки)

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

Сигнальные метки делают код более читаемым, когда условий выхода несколько.

# Создаём флаг
active = True
# Цикл работает, пока флаг True
while active:
    # Просим пользователя ввести слово
    word = input("Напиши 'стоп' для выхода: ")
    # Проверяем, ввели ли слово 'стоп'
    if word == "стоп":
        # Выключаем флаг (цикл остановится)
        active = False
    # Если ввели любое другое слово
    else:
        # Просто печатаем текст
        print("Работаем дальше!")

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

Иногда в Питоне один while размещают внутри другого. Например, нам нужно перебрать таблицу или координаты. Тогда первый while отвечает за строки, второй — за элементы внутри строки.

# Начинаем с первой строки
row = 1
# Повторяем, пока не дойдём до третьей строки
while row <= 3:
    # В каждой новой строке начинаем с первого столбца
    col = 1
    # Перебираем столбцы в текущей строке
    while col <= 2:
        # Показываем номер строки и столбца
        print(row, col)
        # Переходим к следующему столбцу
        col += 1
    # Переходим к следующей строке
    row += 1

Вывод:

1 1
1 2
2 1
2 2
3 1
3 2

Программа сначала берёт первую строку и проходит все столбцы в ней. Потом переходит ко второй строке и снова начинает со столбца 1. Затем так же обрабатывает третью строку.

Переменную col нужно создавать заново перед каждым новым проходом по строке. Без этого столбцы во второй строке и дальше уже не будут перебираться.

Практические примеры использования цикла while в Python

Пример 1 — счётчик и простая итерация

count = 10
while count > 0:
    print(count)
    count -= 1
print("Старт!")

Результат в терминале:

10
9
8
7
6
5
4
3
2
1
Старт!

Пример 2 — ввод данных от пользователя (input)

password = ""
while password != "yandex123":
    password = input("Введите пароль: ")
print("Доступ разрешён")

Пример работы в терминале:

Введите пароль: 123
Введите пароль: qwerty
Введите пароль: yandex123
Доступ разрешён

Пример 3 — поиск элемента в списке

fruits = ["яблоко", "банан", "вишня", "груша"]
index = 0
while index < len(fruits):
    if fruits[index] == "вишня":
        print(f"Найдено на позиции {index}")
        break
    index += 1
else:
    print("Не найдено")

Цикл проходит по списку и ищет элемент "вишня". Если находит — выводит его позицию и завершает цикл через break.

Результат в терминале:

Найдено на позиции 2

Индексация в Python начинается с 0, поэтому "вишня" находится на позиции 2.

Пример 4 — бесконечный цикл с break

total = 0
while True:
    value = input("Введите число (stop для итога): ")
    if value == "stop":
        break
    total += int(value)
print(f"Сумма: {total}")

Цикл работает бесконечно, пока пользователь не введёт stop. Все введённые числа суммируются.

Пример работы в терминале:

Введите число (stop для итога): 5
Введите число (stop для итога): 10
Введите число (stop для итога): 3
Введите число (stop для итога): stop
Сумма: 18

Пример 5 — флаг вместо break

running = True
attempts = 0
while running:
    guess = input("Угадайте число (1-10): ")
    attempts += 1
    if guess == "7":
        print(f"Верно! Попыток: {attempts}")
        running = False
    else:
        print("Неверно, попробуйте ещё")

Программа продолжает работать, пока переменная running равна True. Когда пользователь угадывает число 7, значение меняется на False, и цикл завершается.

Пример работы в терминале:

Угадайте число (1-10): 3
Неверно, попробуйте ещё
Угадайте число (1-10): 9
Неверно, попробуйте ещё
Угадайте число (1-10): 7
Верно! Попыток: 3

Пример 6 — вложенный цикл while

i = 1
while i <= 5:
    j = 1
    line = ""
    while j <= i:
        line += "$ "
        j += 1
    print(line)
    i += 1

Результат:

$
$ $
$ $ $
$ $ $ $
$ $ $ $ $

Пример 7 — меню программы

while True:
    print("\n1. Приветствие")
    print("2. Текущая дата")
    print("3. Выход")
    choice = input("Выберите пункт: ")
    if choice == "1":
        print("Привет!")
    elif choice == "2":
        from datetime import date
        print(date.today())
    elif choice == "3":
        print("До встречи")
        break
    else:
        print("Неизвестная команда")

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

Пример работы в терминале:

1. Приветствие
2. Текущая дата
3. Выход
Выберите пункт: 1
Привет!

1. Приветствие
2. Текущая дата
3. Выход
Выберите пункт: 3
До встречи

Сравнение while и for

Критерийwhilefor
Количество итерацийНеизвестно заранееОпределено длиной коллекции или range()
Условие продолженияЛюбое логическое выражениеНаличие следующего элемента
СчётчикНужно обновлять вручнуюОбновляется автоматически
Риск бесконечного циклаВысокий при ошибке в логикеМинимальный
Типичное применениеОжидание ввода, обработка потоковПеребор списков, строк, словарей

Типичные ошибки при использовании while

  • Условие никогда не становится ложным. Внутри цикла нужно менять переменную, от которой зависит условие, иначе программа зависнет.
x = 0
while x < 5:
    # без этой строки цикл уходит в бесконечность
    x += 1
  • Лишний сдвиг переменной. Счётчик меняется дважды — в теле цикла и за его пределами. В итоге значения пропускаются.
  • Неверный знак сравнения. Вместо < пишут<= и наоборот. Цикл выполняется на одну итерацию больше или меньше, чем нужно.
  • Изменение переменной не в том месте. Если счётчик обновляется в начале тела цикла, а не в конце, первая итерация работает с неправильным значением.
  • Условие всегда ложно с самого начала. Поэтому цикл не выполняется ни разу. Нужно следить за начальным значением переменной до запуска.

x = 0
while x < 5:
    # без этой строки цикл уходит в бесконечность
    x += 1
  • Использование while вместо for. Когда заранее известно количество итераций, while усложняет код без причины — в таких случаях лучше использовать цикл for с range().

Что дальше

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

Бонус для читателей 

Если вам интересно писать код и вы хотите разобраться, какой язык программирования выбрать для старта, — держите промокод Практикума на любой платный курс: KOD (можно просто нажать). Он даст скидку при покупке и позволит сэкономить на обучении.

Бесплатные курсы в Практикуме тоже есть — по всем специальностям и направлениям. Начать можно в любой момент, карту привязывать не нужно.

Текст: Вадим Егорцев
Вам может быть интересно
easy