Управляющие конструкции: циклы

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

Какие циклы существуют в Python

Основным и наиболее эффективным инструментом для повторения действий в Python является цикл for. Он используется для перебора элементов любой итерируемой последовательности: списков, строк, кортежей, словарей, множеств, а также объектов, созданных функцией range().

Пример базовой итерации:

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

значение range в python (значение range() в python)

Результат:

0
1
2
3
4

значение while в python (значение while в python)

Цикл for автоматически завершается при исчерпании итератора. Это исключает ошибки, связанные с неправильной инициализацией или обновлением счетчика, что характерно для циклов в других языках.

Для получения индекса вместе с элементом применяется встроенная функция enumerate():

fruits = ['яблоко', 'банан', 'вишня']
for idx, fruit in enumerate(fruits):
    print(f'{idx}: {fruit}')

как сделать бесконечный цикл в python (создание бесконечного цикла в python)

0: яблоко
1: банан
2: вишня

цикл с параметром в python (цикл с параметром в python)

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

Для этого применяется цикл while. Он выполняется до тех пор, пока истинно заданное условие.

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

цикл while python пример (пример цикла while в python)

Итерация 0
Итерация 1
Итерация 2

алгоритм while python (цикл while в python)

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

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

Как перебрать все элементы многомерной структуры?

Используются вложенные циклы. Один цикл проходит по внешнему измерению, второй - по внутреннему.

matrix = [[1, 2], [3, 4], [5, 6]]
for row in matrix:
    for item in row:
        print(item, end=' ')

Python бесконечный (бесконечный цикл while в python)

1 2 3 4 5 6

какие циклы существуют в python (какие циклы существуют в python?)

Проблема:

Глубокие вложения ухудшают читаемость и производительность. Альтернатива - использование itertools.chain() или генераторов.

Как прервать или пропустить итерацию по условию?

Инструкция break немедленно завершает цикл, continue переходит к следующей итерации, пропуская оставшуюся часть тела.

for num in range(10):
    if num == 5:
        break
    if num % 2 == 0:
        continue
    print(num)

команда break в python (оператор break в python)

1
3

программирование циклических алгоритмов python (циклические алгоритмы в python)

Здесь continue пропускает чётные числа, а break останавливает цикл при достижении 5.

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

К циклам for и while можно добавлять необязательный блок else. Он выполняется, только если цикл завершился естественным образом (без break).

for n in range(2, 6):
    for x in range(2, n):
        if n % x == 0:
            print(f'{n} равно {x} * {n//x}')
            break
    else:
        print(f'{n} - простое число')
2 - простое число
3 - простое число
4 равно 2 * 2
5 - простое число

Как пройти по ключам, значениям или парам словаря?

Цикл for по умолчанию перебирает ключи. Для получения значений или пар используются методы .values() и .items().

d = {'a': 1, 'b': 2}
for key in d:
    print(key, d[key])

for val in d.values():
    print(val)

for k, v in d.items():
    print(k, v)

Как заменить итерацию рекурсивными вызовами?

Рекурсия - функция, вызывающая саму себя. Она не является циклом в прямом смысле, но позволяет реализовать повторение без явного for или while.

def factorial(n):
    if n == 0:
        return 1
    return n * factorial(n-1)

print(factorial(5))
120

Опасность:

Глубина рекурсии ограничена (по умолчанию ~1000). Превышение вызывает RecursionError. Для глубоких итераций лучше использовать стек на основе while.

...

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

Генераторы и yield

Генераторы создают последовательности на лету, экономя память.

Пример
def fibonacci(limit):
    a, b = 0, 1
    while a < limit:
        yield a
        a, b = b, a + b

for num in fibonacci(100):
    print(num, end=' ')
0 1 1 2 3 5 8 13 21 34 55 89

Бесконечная итерация с itertools.cycle

Модуль itertools предоставляет инструменты для работы с итераторами.

Пример
from itertools import cycle

colors = ['красный', 'зеленый', 'синий']
cycling = cycle(colors)
for _ in range(6):
    print(next(cycling))
красный
зеленый
синий
красный
зеленый
синий

Параллельная итерация с zip

Объединяет несколько последовательностей в кортежи.

Пример
names = ['Анна', 'Борис', 'Виктор']
scores = [85, 92, 78]
for name, score in zip(names, scores):
    print(f'{name}: {score}')
Анна: 85
Борис: 92
Виктор: 78

Обход дерева с помощью стека (эмуляция рекурсии)

Пример
tree = {
    'value': 1,
    'children': [
        {'value': 2, 'children': []},
        {'value': 3, 'children': [
            {'value': 4, 'children': []}
        ]}
    ]
}

def traverse(node):
    stack = [node]
    while stack:
        current = stack.pop()
        print(current['value'])
        stack.extend(current['children'][::-1])

print('Итеративный обход:')
traverse(tree)
Итеративный обход:
1
2
3
4

Собственный итератор с __iter__ и __next__

Пример
class Countdown:
    def __init__(self, start):
        self.current = start
    def __iter__(self):
        return self
    def __next__(self):
        if self.current <= 0:
            raise StopIteration
        self.current -= 1
        return self.current + 1

for num in Countdown(3):
    print(num)
3
2
1

Асинхронный цикл async for

Используется для итерации по асинхронным итераторам (например, чтение данных из сети).

Пример
import asyncio

class AsyncRange:
    def __init__(self, n):
        self.i = 0
        self.n = n
    def __aiter__(self):
        return self
    async def __anext__(self):
        if self.i >= self.n:
            raise StopAsyncIteration
        await asyncio.sleep(0.1)
        self.i += 1
        return self.i

async def main():
    async for x in AsyncRange(3):
        print(x)

asyncio.run(main())
1
2
3

Цикл с else и break при поиске

Пример
values = [10, 25, 30, 45, 50]
for v in values:
    if v > 40:
        print('Найдено значение > 40:', v)
        break
else:
    print('Все значения не превышают 40')
Найдено значение > 40: 45

Какие циклы существуют в Python? - comments

En
какие циклы существуют в python (python)