Цикл 'пока' (while) в языке Python

Раздел: Управляющие конструкции -> Циклы в Python

Основы цикла while

Цикл while выполняет блок кода, пока условие истинно. Самое эффективное решение для повторения действий с неизвестным заранее количеством итераций.

count = 0
while count < 5:
    print("Итерация", count)
    count += 1

следующая итерация python (перейти к следующей итерации цикла в python)

Пояснение: переменная count инициализируется нулём. Цикл работает, пока count меньше 5. На каждом шаге значение увеличивается на 1. Когда count достигает 5, условие становится ложным и цикл завершается.

Типичная ошибка: забыть изменить переменную внутри цикла, что приведёт к бесконечному циклу. Решение: всегда проверять, что условие может стать ложным.

Как реализовать цикл с флагом для сложного условия?

Флаг - булева переменная, управляющая продолжением цикла.

flag = True
while flag:
    answer = input("Продолжить? (да/нет): ")
    if answer == "нет":
        flag = False

Python пока (цикл while в python)

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

Ошибка: изменение флага в неправильном месте. Важно убедиться, что условие проверяется корректно.

Как использовать while для обработки ввода до получения корректных данных?

user_input = ""
while not user_input.isdigit():
    user_input = input("Введите число: ")
    if not user_input.isdigit():
        print("Ошибка, повторите ввод.")
print("Вы ввели:", user_input)

Цикл запрашивает ввод, пока строка не станет цифровой. После выхода выводится результат.

Проблема: если пользователь вводит пустую строку, метод isdigit вернёт False, цикл продолжается. Дополнительно можно проверять наличие хотя бы одного символа.

Как прервать цикл досрочно с помощью break?

while True:
    cmd = input("Команда: ")
    if cmd == "exit":
        break
    print("Выполняю", cmd)

Бесконечный цикл while True требует явного выхода через break. Используется в интерактивных программах.

Риск: если забыть break, программа зависнет. Всегда следует предусмотреть условие выхода.

Как пропустить итерацию с помощью continue?

n = 0
while n < 10:
    n += 1
    if n % 2 == 0:
        continue
    print(n)

Continue переходит к следующей итерации, не выполняя оставшийся код. В примере печатаются только нечётные числа.

Как выполнить блок else после завершения цикла?

i = 0
while i < 5:
    print(i)
    i += 1
else:
    print("Цикл завершён без break")

Блок else выполняется, если цикл закончился естественным путём (условие стало ложным), а не через break.

Путаница: новички ожидают, что else выполняется всегда. Он не выполняется, если был break.

Расширенные примеры использования while

Вычисление чисел Фибоначчи до заданного предела

Пример
limit = 100
a, b = 0, 1
while a <= limit:
    print(a, end=' ')
    a, b = b, a + b
0 1 1 2 3 5 8 13 21 34 55 89

Пояснение: a и b - предыдущий и текущий элементы. Цикл продолжается, пока a не превысит limit. Одновременное присваивание обновляет значения.

Поиск простого числа с помощью while и else

Пример
n = 29
d = 2
while d * d <= n:
    if n % d == 0:
        print(n, "составное")
        break
    d += 1
else:
    print(n, "простое")
29 простое

Цикл проверяет делители от 2 до sqrt(n). Если ни один делитель не найден, срабатывает else и число объявляется простым. При break else не выполняется.

Чтение файла построчно до конца с помощью while

Пример
with open("data.txt", "r", encoding="utf-8") as f:
    line = f.readline()
    while line:
        print(line.strip())
        line = f.readline()

Примечание: предполагается, что файл существует. Цикл работает, пока readline возвращает непустую строку. Пустая строка означает конец файла. (Результат зависит от содержимого файла.)

Реализация игрового цикла с тайм-аутом

Пример
import time
start = time.time()
timeout = 5  # секунд
while time.time() - start < timeout:
    time.sleep(1)
    print("Прошло секунд:", int(time.time() - start))
else:
    print("Тайм-аут истёк")
Прошло секунд: 1
Прошло секунд: 2
Прошло секунд: 3
Прошло секунд: 4
Прошло секунд: 5
Тайм-аут истёк

Цикл выполняется, пока разница времени меньше timeout. После выхода срабатывает else.

Вложенный while с break и continue: поиск пар чисел

Пример
i = 1
while i <= 5:
    j = 1
    while j <= 5:
        if j == i:
            j += 1
            continue
        if i * j > 12:
            break
        print(f"({i},{j})", end=' ')
        j += 1
    print()
    i += 1
(1,2) (1,3) (1,4) (1,5) 
(2,1) (2,3) (2,4) (2,5) 
(3,1) (3,2) (3,4) 
(4,1) (4,2) (4,3) 
(5,1) (5,2) (5,3) (5,4)

Внутренний цикл перебирает j, при j==i пропускает continue, при превышении произведения 12 - break. Внешний цикл переходит к следующему i.

While с несколькими условиями и логическими операторами

Пример
x = 0
y = 10
while x < 5 and y > 5:
    print(f"x={x}, y={y}")
    x += 1
    y -= 1
x=0, y=10
x=1, y=9
x=2, y=8
x=3, y=7
x=4, y=6

Цикл выполняется, пока оба условия истинны. После 5 итераций x=5, условие x<5 ложно, цикл завершается.

Цикл while в Python - comments

En
Python пока (python)