Привет! Предлагаю изучить тему Цикл for в Python. На выбор два формата: видеолекция с преподавателем JavaRush университета или подробный текстовый разбор, который я подготовил специально для тебя.
Коротко: цикл for в Python перебирает готовую последовательность, а не считает шаги по условию, как в C или Java. Пишется он так: for переменная in объект:, а тело цикла идет ниже с отступом. Чтобы повторить действие заданное число раз, берут range(): запись for i in range(5) даст числа от 0 до 4. Перебирать при этом можно не только числа, но и список, строку, кортеж, множество или словарь. Умный программист всегда найдет способ не делать работу дважды. Если он видит, что какая-то задача повторяется снова и снова, он автоматизирует процесс так, чтобы компьютер выполнил все сам. И главное - сделает это качественно с первого раза. Именно для автоматизации повторяющихся задач и были созданы циклы. Допустим, тебе нужно показать на экране все числа от 0 до 99. Без использования циклов код выглядел бы так:
print(0)
print(1)
print(2)
print(3)
print(4)
print(5)
# И так далее
Представляешь? Целых 100 строчек одинакового кода! Это же кошмар. А теперь посмотри, как элегантно решается та же задача с помощью цикла:
for i in range(100):
    print(i)
Всего 2 строки, и готово!

Кратко

  1. for проходит по элементам последовательности, счетчик и условие выхода писать не нужно.
  2. range(n) дает числа от 0 до n минус 1; range(start, stop, step) задает начало, конец и шаг, а отрицательный шаг разворачивает счет.
  3. Нужен индекс вместе с элементом это enumerate(), нужно идти по двум спискам сразу это zip().
  4. break выходит из цикла целиком, continue пропускает только текущую итерацию.
  5. У цикла есть необычный блок else: он срабатывает, если цикл дошел до конца и ни разу не встретил break.
  6. Бесконечный цикл в Python делают через while True, а не через for.

Что такое циклы for в Python?

Цикл for в Python это специальная конструкция в программировании, которая позволяет повторять один и тот же блок кода нужное количество раз. Вместо линейного выполнения программы сверху вниз, цикл заставляет код "крутиться" в одном месте. Представь жизненную ситуацию: тебе нужно накапать 30 капель настойки в стакан. Обычный алгоритм действий:
  1. Взять стакан.
  2. Открыть флакон.
  3. Накапать 1-ю каплю.
  4. Накапать 2-ю каплю.
  5. И так далее.
  6. Накапать 30-ю каплю.
  7. Закрыть флакон.
  8. Выпить лекарство.
Но ведь можно описать это намного проще:
  1. Взять стакан.
  2. Открыть флакон.
  3. Накапать 30 капель.
  4. Закрыть флакон.
  5. Выпить лекарство.
В повседневной речи мы постоянно используем подобные "циклы": "пройди еще 15 шагов прямо", "сделай 3 подхода по 10 приседаний", "купи 7 разных продуктов и получишь скидку"... Примеров масса, принцип всегда один и тот же. Вот и в Python цикл for служит для того, чтобы сделать код короче и понятнее.

Принцип работы цикла for в Python

В Python цикл for работает с итерируемыми объектами (списки, строки, кортежи, range и др.), а какие вообще бывают типы данных, разобрано в отдельной статье:
for <переменная> in <итерируемый_объект>:
    # Тело цикла
    <действия>
Пример перебора цифр от 0 до 4 и вывод каждой в консоль:
for i in range(5):
    print(i)
Вывод:
0
1
2
3
4
Если перевести данную запись на человеческий язык, получится следующее: "Для каждого числа i в диапазоне от 0 до 4 включительно выведи его значение в консоль." Основные стадии работы цикла for можно изобразить следующей схемой:Блок-схема работы цикла на примере раскрашивания кружков: инициализация, проверка условия Circles меньше 10, тело цикла, увеличение счетчика и возврат к проверке, а при ложном условии выход

Функция range()

Функция range() - основной инструмент для создания числовых последовательностей в циклах:
# range(stop) - от 0 до stop-1
for i in range(5):
    print(i)  # 0, 1, 2, 3, 4

# range(start, stop) - от start до stop-1
for i in range(2, 7):
    print(i)  # 2, 3, 4, 5, 6

# range(start, stop, step) - от start до stop-1 с шагом step
for i in range(0, 10, 2):
    print(i)  # 0, 2, 4, 6, 8

Обратный цикл (от большего к меньшему)

for i in range(5, 0, -1):
    print(i)
Вывод:
5
4
3
2
1

Цикл for с различными типами данных

Перебрать можно любой итерируемый объект, а не только список. Вот что чаще всего попадает в цикл и что при этом получает переменная:
Что перебираем Что получает переменная Пример
список очередной элемент for x in [1, 2, 3]
строка очередной символ for ch in "Python"
кортеж очередной элемент for x in (1, 2, 3)
множество элемент, но порядок не гарантирован for x in {1, 2, 3}
словарь ключ for key in prices
словарь через items() пару из ключа и значения for key, value in prices.items()
range() число из диапазона for i in range(5)
enumerate() пару из индекса и элемента for i, x in enumerate(fruits)
zip() по одному элементу из каждой последовательности for a, b in zip(names, ages)

Перебор списка

fruits = ["яблоко", "банан", "апельсин"]
for fruit in fruits:
    print(fruit)
Вывод:
яблоко
банан
апельсин

Перебор строки

word = "Python"
for letter in word:
    print(letter)
Вывод:
P
y
t
h
o
n

Перебор с индексами

Если нужны и элемент, и его индекс, используй enumerate():
fruits = ["яблоко", "банан", "апельсин"]
for index, fruit in enumerate(fruits):
    print(f"{index}: {fruit}")
Вывод:
0: яблоко
1: банан
2: апельсин

Вложенные циклы

В Python также можно создавать вложенные циклы. Количество итераций будет умножаться:
for i in range(3):
    print(f"{i} | ", end="")
    for j in range(5):
        print(j, end=" ")
    print()  # переход на новую строку
Вывод:
0 | 0 1 2 3 4 
1 | 0 1 2 3 4 
2 | 0 1 2 3 4 

Работа с двумерными списками

Вложенные циклы идеально подходят для обхода двумерных структур:
matrix = [[0, 1, 2, 3, 4],
          [1, 2, 3, 4, 5],
          [2, 3, 4, 5, 6],
          [3, 4, 5, 6, 7]]

for row in matrix:
    for element in row:
        print(element, end=" ")
    print()  # переход на новую строку
Или с индексами:
for i in range(len(matrix)):
    for j in range(len(matrix[i])):
        print(matrix[i][j], end=" ")
    print()
Вывод:
0 1 2 3 4 
1 2 3 4 5 
2 3 4 5 6 
3 4 5 6 7 

Досрочное завершение цикла

Оператор break

Для прерывания цикла используется оператор break:
def find_first_position(string_list, element):
    for i, item in enumerate(string_list):
        if item == element:
            print(f"Элемент найден на позиции: {i}")
            break
    else:
        print("Элемент не найден")

# Пример использования
fruits = ["яблоко", "банан", "апельсин", "киви"]
find_first_position(fruits, "банан")
Вывод:
Элемент найден на позиции: 1
Обрати внимание: else в этом примере относится к циклу, а не к if. Он срабатывает, когда цикл дошел до конца и ни разу не встретил break, и разберем мы его чуть ниже, в разделе про for-else.

Оператор continue

Оператор continue пропускает текущую итерацию и переходит к следующей:
for i in range(10):
    if i % 2 == 0:  # если число четное
        continue    # пропускаем его
    print(i)        # выводим только нечетные
Вывод:
1
3
5
7
9

Конструкция for-else

В Python у цикла for есть уникальная особенность - блок else, который выполняется, если цикл завершился естественным образом (не через break):
def search_element(numbers, target):
    for num in numbers:
        if num == target:
            print(f"Элемент {target} найден!")
            break
    else:
        print(f"Элемент {target} не найден в списке")

# Примеры
numbers = [1, 3, 5, 7, 9]
search_element(numbers, 5)  # Элемент 5 найден!
search_element(numbers, 4)  # Элемент 4 не найден в списке

Полезные функции для работы с циклами

zip() - одновременный перебор нескольких последовательностей

names = ["Анна", "Борис", "Виктор"]
ages = [25, 30, 35]
cities = ["Токио", "Чикаго", "Рим"]

for name, age, city in zip(names, ages, cities):
    print(f"{name}, {age} лет, живет в {city}")
Вывод:
Анна, 25 лет, живет в Токио
Борис, 30 лет, живет в Чикаго
Виктор, 35 лет, живет в Рим

reversed() - обратный перебор

numbers = [1, 2, 3, 4, 5]
for num in reversed(numbers):
    print(num)
Вывод:
5
4
3
2
1

Бесконечный цикл

В Python бесконечный цикл обычно создают с помощью while True, а не for:
import itertools

# Бесконечный цикл с for (не рекомендуется)
for i in itertools.count():
    print(i)
    if i > 5:
        break
Но помни, что в большинстве случаев бесконечный цикл это свидетельство логической ошибки. У такого цикла обязательно должно быть условие выхода.

Вопросы и ответы

Чем цикл for в Python отличается от for в других языках?

Тем, что это не счетчик, а перебор. В C или Java в заголовке цикла пишут начальное значение, условие и шаг, а в Python цикл просто идет по готовой последовательности и сам заканчивается, когда элементы кончились. Привычный счетчик при этом никуда не делся: его роль играет функция range().

Как повторить действие ровно N раз?

Через range(): запись for i in range(10) выполнит тело цикла десять раз, а переменная i пробежит значения от 0 до 9. Если сама переменная не нужна, по традиции пишут подчеркивание: for _ in range(10).

Как перебрать словарь в цикле for?

Если написать for key in prices, переменная получит ключи. Чтобы сразу иметь и ключ, и значение, берут метод items(): for key, value in prices.items(). Для одних только значений есть values().

Чем break отличается от continue?

break прерывает весь цикл: выполнение переходит к коду после него, оставшиеся элементы не обрабатываются. continue прерывает только текущую итерацию и сразу переходит к следующему элементу, то есть цикл продолжает работу. Проще запомнить так: break это выход, continue это пропуск.

Что делает блок else у цикла for?

Он выполняется, когда цикл закончился сам, перебрав все элементы, и ни разу не был прерван через break. Удобнее всего это для поиска: в цикле ищем элемент и выходим по break, а в else пишем, что искомое не нашлось. Если break сработал, блок else пропускается.

Как пройти по списку в обратном порядке?

Тремя способами. Функция reversed(numbers) идет по элементам с конца. Обратный range вида range(len(numbers) - 1, -1, -1) дает индексы в обратном порядке. И срез numbers[::-1] создает перевернутую копию списка. Первый вариант обычно самый читаемый и не копирует данные. Читайте также: