Цикл for и цикл while: как повторять действия и когда что выбрать

Циклы — это конструкции, позволяющие выполнять блок кода многократно. В Python для этого чаще всего используют for и while. Они решают одну задачу (повторение), но делают это по-разному: у них отличаются логика работы, типичные сценарии применения и возможные риски.


Как работает цикл for

Цикл for в Python — это не «счётчик от A до B», как в некоторых других языках, а цикл по итерируемому объекту. Он последовательно перебирает элементы коллекции: списка, кортежа, строки, словаря, множества, генератора и т. д.

Синтаксис:

python
for элемент in итерируемый_объект:
    # тело цикла

Пример 1: перебор списка

python
numbers = [10, 20, 30, 40]
 
for n in numbers:
    print(n)

Вывод:

text
10
20
30
40

Здесь n последовательно принимает значения из списка numbers.

Пример 2: перебор строки

python
word = "Python"
 
for ch in word:
    print(ch)

Вывод:

text
P
y
t
h
o
n

Каждый символ строки — отдельный элемент.

Пример 3: range() для числовых диапазонов

Если нужно повторить действие N раз или пройтись по числам, используют range():

python
for i in range(5):
    print(i)

Вывод:

text
0
1
2
3
4

range(5) создаёт последовательность чисел от 0 до 4 включительно. Можно задавать начало, конец и шаг:

python
for i in range(2, 10, 2):
    print(i)

Вывод:

text
2
4
6
8

Пример 4: перебор словаря

По умолчанию for по словарю перебирает ключи:

python
data = {"a": 1, "b": 2, "c": 3}
 
for key in data:
    print(key, data[key])

Чтобы сразу получать пары ключ-значение, используют .items():

python
for key, value in data.items():
    print(key, value)

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

Цикл while выполняет тело цикла, пока истинно заданное условие:

python
while условие:
    # тело цикла

Условие проверяется перед каждой итерацией. Если оно ложно с самого начала, тело цикла не выполнится ни разу.

Пример 5: простой счётчик

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

Вывод:

text
0
1
2
3
4

Обратите внимание: в while нужно вручную обновлять переменную, от которой зависит условие. Если забыть про i += 1, цикл станет бесконечным.

Пример 6: ожидание ввода до корректного значения

python
age = -1
while age <= 0 or age > 120:
    try:
        age = int(input("Введите возраст (1–120): "))
    except ValueError:
        print("Некорректное значение, попробуйте снова.")
 
print("Вы ввели:", age)

Здесь цикл нужен, потому что заранее неизвестно, сколько попыток потребуется для корректного ввода.

Пример 7: обработка данных до специального маркера

python
lines = []
line = input("Вводите строки (пустая строка — конец): ")
 
while line != "":
    lines.append(line)
    line = input()
 
print("Всего строк:", len(lines))

Когда выбирать for, а когда while

Ситуация Рекомендуемый цикл Почему
Нужно пройтись по элементам коллекции (список, строка, словарь и т. п.) for Это естественный способ перебора итерируемых объектов.
Нужно повторить действие N раз for + range() Чётко задаётся количество итераций.
Количество итераций заранее неизвестно while Цикл продолжается, пока выполняется условие.
Цикл зависит от внешнего события или ввода пользователя while Условие может меняться непредсказуемо.
Нужна логика «выполнять, пока не произойдёт X» while Фокус на условии продолжения, а не на переборе.

Частые ошибки и как их избежать

  1. Бесконечный цикл в while
    Самая типичная ошибка — не обновлять переменную условия:

    python
    i = 0
    while i < 5:
        print(i)
        # забыли i += 1 → бесконечный цикл

    Решение: всегда проверяйте, что условие со временем станет ложным.

  2. Попытка использовать for там, где нужна проверка сложного условия
    Если логика звучит как «повторять, пока не случится X», лучше while.
  3. Изменение коллекции во время перебора в for
    Не рекомендуется удалять или добавлять элементы в список, по которому идёт for. Это может привести к пропуску элементов или неожиданным результатам. В таких случаях используют while, работают с копией списка или строят новый список.

Практический пример: сравнение подходов на одной задаче

Задача: вывести квадраты чисел от 1 до 5.

Вариант с for (предпочтительный):

python
for n in range(1, 6):
    print(n, n * n)

Вариант с while (работает, но менее естественно):

python
n = 1
while n <= 5:
    print(n, n * n)
    n += 1

Оба варианта дают одинаковый результат, но for здесь читается проще и меньше подвержен ошибкам.


Пример, где while действительно удобнее

Задача: запрашивать у пользователя числа, пока он не введёт 0, и посчитать сумму.

python
total = 0
value = None
 
while value != 0:
    value = int(input("Введите число (0 — завершить): "))
    total += value
 
print("Сумма:", total)

Здесь заранее неизвестно, сколько чисел введёт пользователь, поэтому while — естественный выбор.


Дополнительные конструкции: break и continue

Они работают и в for, и в while.

  • break — прерывает цикл.
  • continue — пропускает оставшуюся часть текущей итерации и переходит к следующей.

Пример с break:

python
for n in range(10):
    if n == 5:
        break
    print(n)

Вывод: 0 1 2 3 4.

Пример с continue:

python
for n in range(5):
    if n % 2 == 0:
        continue
    print(n)

Вывод: 1 3.

  • Используйте for, когда нужно пройтись по коллекции или выполнить действие заранее известное число раз. Это безопаснее, проще и читаемее.
  • Используйте while, когда количество итераций не определено и цикл должен продолжаться, пока выполняется некоторое условие.
  • Всегда следите, чтобы условие в while могло стать ложным, иначе получится бесконечный цикл.
  • Для управления ходом цикла применяйте break и continue, если это делает логику понятнее.

Добавить комментарий