Циклы — это конструкции, позволяющие выполнять блок кода многократно. В Python для этого чаще всего используют for и while. Они решают одну задачу (повторение), но делают это по-разному: у них отличаются логика работы, типичные сценарии применения и возможные риски.
Как работает цикл for
Цикл for в Python — это не «счётчик от A до B», как в некоторых других языках, а цикл по итерируемому объекту. Он последовательно перебирает элементы коллекции: списка, кортежа, строки, словаря, множества, генератора и т. д.
Синтаксис:
for элемент in итерируемый_объект: # тело цикла
Пример 1: перебор списка
numbers = [10, 20, 30, 40] for n in numbers: print(n)
Вывод:
10 20 30 40
Здесь n последовательно принимает значения из списка numbers.
Пример 2: перебор строки
word = "Python" for ch in word: print(ch)
Вывод:
P y t h o n
Каждый символ строки — отдельный элемент.
Пример 3: range() для числовых диапазонов
Если нужно повторить действие N раз или пройтись по числам, используют range():
for i in range(5): print(i)
Вывод:
0 1 2 3 4
range(5) создаёт последовательность чисел от 0 до 4 включительно. Можно задавать начало, конец и шаг:
for i in range(2, 10, 2): print(i)
Вывод:
2 4 6 8
Пример 4: перебор словаря
По умолчанию for по словарю перебирает ключи:
data = {"a": 1, "b": 2, "c": 3} for key in data: print(key, data[key])
Чтобы сразу получать пары ключ-значение, используют .items():
for key, value in data.items(): print(key, value)
Как работает цикл while
Цикл while выполняет тело цикла, пока истинно заданное условие:
while условие: # тело цикла
Условие проверяется перед каждой итерацией. Если оно ложно с самого начала, тело цикла не выполнится ни разу.
Пример 5: простой счётчик
i = 0 while i < 5: print(i) i += 1
Вывод:
0 1 2 3 4
Обратите внимание: в while нужно вручную обновлять переменную, от которой зависит условие. Если забыть про i += 1, цикл станет бесконечным.
Пример 6: ожидание ввода до корректного значения
age = -1 while age <= 0 or age > 120: try: age = int(input("Введите возраст (1–120): ")) except ValueError: print("Некорректное значение, попробуйте снова.") print("Вы ввели:", age)
Здесь цикл нужен, потому что заранее неизвестно, сколько попыток потребуется для корректного ввода.
Пример 7: обработка данных до специального маркера
lines = [] line = input("Вводите строки (пустая строка — конец): ") while line != "": lines.append(line) line = input() print("Всего строк:", len(lines))
Когда выбирать for, а когда while
| Ситуация | Рекомендуемый цикл | Почему |
|---|---|---|
| Нужно пройтись по элементам коллекции (список, строка, словарь и т. п.) | for |
Это естественный способ перебора итерируемых объектов. |
| Нужно повторить действие N раз | for + range() |
Чётко задаётся количество итераций. |
| Количество итераций заранее неизвестно | while |
Цикл продолжается, пока выполняется условие. |
| Цикл зависит от внешнего события или ввода пользователя | while |
Условие может меняться непредсказуемо. |
| Нужна логика «выполнять, пока не произойдёт X» | while |
Фокус на условии продолжения, а не на переборе. |
Частые ошибки и как их избежать
- Бесконечный цикл в
while
Самая типичная ошибка — не обновлять переменную условия:pythoni = 0 while i < 5: print(i) # забыли i += 1 → бесконечный цикл
Решение: всегда проверяйте, что условие со временем станет ложным.
- Попытка использовать
forтам, где нужна проверка сложного условия
Если логика звучит как «повторять, пока не случится X», лучшеwhile. - Изменение коллекции во время перебора в
for
Не рекомендуется удалять или добавлять элементы в список, по которому идётfor. Это может привести к пропуску элементов или неожиданным результатам. В таких случаях используютwhile, работают с копией списка или строят новый список.
Практический пример: сравнение подходов на одной задаче
Задача: вывести квадраты чисел от 1 до 5.
Вариант с for (предпочтительный):
for n in range(1, 6): print(n, n * n)
Вариант с while (работает, но менее естественно):
n = 1 while n <= 5: print(n, n * n) n += 1
Оба варианта дают одинаковый результат, но for здесь читается проще и меньше подвержен ошибкам.
Пример, где while действительно удобнее
Задача: запрашивать у пользователя числа, пока он не введёт 0, и посчитать сумму.
total = 0 value = None while value != 0: value = int(input("Введите число (0 — завершить): ")) total += value print("Сумма:", total)
Здесь заранее неизвестно, сколько чисел введёт пользователь, поэтому while — естественный выбор.
Дополнительные конструкции: break и continue
Они работают и в for, и в while.
break— прерывает цикл.continue— пропускает оставшуюся часть текущей итерации и переходит к следующей.
Пример с break:
for n in range(10): if n == 5: break print(n)
Вывод: 0 1 2 3 4.
Пример с continue:
for n in range(5): if n % 2 == 0: continue print(n)
Вывод: 1 3.
- Используйте
for, когда нужно пройтись по коллекции или выполнить действие заранее известное число раз. Это безопаснее, проще и читаемее. - Используйте
while, когда количество итераций не определено и цикл должен продолжаться, пока выполняется некоторое условие. - Всегда следите, чтобы условие в
whileмогло стать ложным, иначе получится бесконечный цикл. - Для управления ходом цикла применяйте
breakиcontinue, если это делает логику понятнее.
