Циклы for и while: отличия и практическое применение в Python

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

Разница между for и while в Python

Циклы в Python позволяют выполнять повторяющиеся действия. Два основных вида - for и while. Их главное различие в том, что for итерирует по коллекции или последовательности, а while выполняется до тех пор, пока истинно условие. Выбор зависит от задачи.

Какой цикл выбрать для типовой задачи?

Наиболее эффективное решение - использовать for, если заранее известен итерируемый объект (список, строка, словарь, диапазон чисел) или нужно перебрать все элементы. Использовать while, если количество итераций неизвестно заранее и определяется условием.

Пример с for:

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

оператор case в python (оператор case (match) в python)

0
1
2
3
4

Match case python (конструкция match-case в python)

Тот же результат через while требует ручного управления счетчиком:

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

операторы ветвления в языке python (условные операторы в python)

0
1
2
3
4

Return s s python (оператор return в python)

Типичная ошибка:

В while забывают увеличивать счетчик, что приводит к бесконечному циклу. В for счетчик не требуется - ошибка маловероятна.

Вариант 1. Как перебрать элементы списка с индексом?

Использовать for с enumerate():

fruits = ['apple', 'banana', 'cherry']
for idx, fruit in enumerate(fruits):
    print(f'{idx}: {fruit}')

оператор выбора в python (оператор выбора if в python)

0: apple
1: banana
2: cherry

Python пустая команда (пустая команда pass в python)

Аналог с while:

i = 0
while i < len(fruits):
    print(f'{i}: {fruits[i]}')
    i += 1

как на языке python записывается полное ветвление (полное ветвление в python)

0: apple
1: banana
2: cherry

циклы в python примеры (примеры циклов в python)

Проблема:

В while легко ошибиться с границей индекса (len(fruits)-1), а также случайно изменить i внутри тела цикла. for безопаснее.

Вариант 2. Как выполнять цикл, пока не будет получен определенный ввод от пользователя?

Подходит while:

answer = ''
while answer != 'yes':
    answer = input('Введите yes для выхода: ')

программа с циклом while python (программа с циклом while на python)

for здесь неэффективен, так как неизвестно количество попыток.

Ошибка:

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

Вариант 3. Как организовать бесконечный цикл с прерыванием?

Используется while True с break:

while True:
    command = input('Введите "stop": ')
    if command == 'stop':
        break

For и while python в чем разница (разница между циклами for и while в python)

for не предназначен для бесконечных циклов, хотя можно имитировать через for _ in iter(int, 1), но это излишне.

Ошибка:

Забыть добавить break - программа зависнет. Лучше устанавливать ограничение итераций.

Вариант 4. Как пропускать или досрочно завершать итерации?

Оба цикла поддерживают break и continue:

for num in range(10):
    if num == 3:
        continue    # пропуск
    if num == 7:
        break       # завершение
    print(num)

Python if then else (условный оператор if then else в python)

0
1
2
4
5
6

В while - аналогично.

Проблема:

В while после continue счетчик не увеличивается - возможен бесконечный цикл. В for этого не происходит.

- While языка python (цикл while в python)
- циклы в python конструкции (циклы while в python)

Расширенные примеры

Пример 1. Цикл for с else

Блок else выполняется, если цикл завершился без break:

Пример
for num in [1, 2, 3]:
    if num == 0:
        break
else:
    print('Цикл завершен нормально')
Цикл завершен нормально

Пример 2. Цикл while с else

Аналогично работает:

Пример
i = 0
while i < 3:
    if i == 1:
        break
    i += 1
else:
    print('Не было break')
(пусто, так как break выполнился, else не сработал)

Пример 3. Цикл for для обхода словаря

Перебор ключей и значений с помощью .items():

Пример
person = {'name': 'Alice', 'age': 30}
for key, value in person.items():
    print(f'{key} = {value}')
name = Alice
age = 30

Пример 4. Цикл while с несколькими условиями

Использование логических операторов:

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

Пример 5. Вложенные циклы for и while

Таблица умножения через for и while:

Пример
for i in range(1, 4):
    j = 1
    while j <= 3:
        print(f'{i} * {j} = {i*j}', end=' ')
        j += 1
    print()
1 * 1 = 1 1 * 2 = 2 1 * 3 = 3
2 * 1 = 2 2 * 2 = 4 2 * 3 = 6
3 * 1 = 3 3 * 2 = 6 3 * 3 = 9

Пример 6. Использование range() с шагом в for

Четные числа от 0 до 10:

Пример
for i in range(0, 11, 2):
    print(i)
0
2
4
6
8
10

В while нужно самостоятельно менять шаг.

Пример 7. Бесконечный for? Нестандартный итератор

Можно создать бесконечный итератор с помощью iter() и функции-константы:

Пример
import itertools
for i in itertools.count(start=1):
    if i > 3:
        break
    print(i)
1
2
3

Однако для бесконечного цикла обычно применяют while True.

Пример 8. Циклы и преобразование типов

Чтение чисел из строки:

Пример
data = '1 2 3'
numbers = []
for token in data.split():
    numbers.append(int(token))
print(numbers)
[1, 2, 3]

То же с while:

Пример
tokens = data.split()
i = 0
while i < len(tokens):
    numbers.append(int(tokens[i]))
    i += 1
[1, 2, 3]

Пример 9. Использование else с while и break для поиска

Поиск элемента в списке:

Пример
items = [1, 3, 5]
target = 4
i = 0
while i < len(items):
    if items[i] == target:
        print('Найден')
        break
    i += 1
else:
    print('Не найден')
Не найден

Разница между циклами for и while в Python - comments

En
For и while python в чем разница (python)