Цикл 'пока' (while) в языке 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 = FalsePython пока (цикл 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 + b0 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 -= 1x=0, y=10 x=1, y=9 x=2, y=8 x=3, y=7 x=4, y=6
Цикл выполняется, пока оба условия истинны. После 5 итераций x=5, условие x<5 ложно, цикл завершается.