← Назад к вопросам

Что такое цикл?

1.6 Junior🔥 71 комментариев
#Python Core

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

# Циклы в Python

Цикл — это конструкция программирования, которая повторяет блок кода определённое количество раз или до выполнения определённого условия. Это один из основных инструментов для избежания дублирования кода.

Виды циклов в Python

В Python есть два типа циклов: for и while.

1. Цикл while

Определение: повторяет блок кода, пока условие истинно.

# Базовый синтаксис
i = 0
while i < 5:
    print(f"i = {i}")
    i += 1

# Результат:
# i = 0
# i = 1
# i = 2
# i = 3
# i = 4

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

while True:
    password = input("Enter password: ")
    if len(password) >= 8:
        print("Password accepted")
        break  # выход из цикла
    else:
        print("Password too short")

2. Цикл for

Определение: итерирует по элементам последовательности (список, кортеж, строка, диапазон).

# По списку
names = ['Alice', 'Bob', 'Charlie']
for name in names:
    print(f"Hello, {name}")

# По диапазону
for i in range(5):
    print(i)  # 0, 1, 2, 3, 4

# По строке
for char in "Python":
    print(char)  # P, y, t, h, o, n

# По словарю
data = {'name': 'Alice', 'age': 25}
for key, value in data.items():
    print(f"{key}: {value}")

Диапазоны (range)

range() создаёт последовательность чисел:

# range(stop)
for i in range(5):  # 0, 1, 2, 3, 4
    print(i)

# range(start, stop)
for i in range(2, 7):  # 2, 3, 4, 5, 6
    print(i)

# range(start, stop, step)
for i in range(0, 10, 2):  # 0, 2, 4, 6, 8
    print(i)

# Отрицательный шаг (в обратном порядке)
for i in range(10, 0, -1):  # 10, 9, 8, ..., 1
    print(i)

Управление циклом: break и continue

# break — выход из цикла
for i in range(10):
    if i == 5:
        break  # прерывается при i=5
    print(i)  # 0, 1, 2, 3, 4

# continue — пропуск текущей итерации
for i in range(5):
    if i == 2:
        continue  # пропускает i=2
    print(i)  # 0, 1, 3, 4

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

Цикл внутри цикла:

# Таблица умножения
for i in range(1, 4):
    for j in range(1, 4):
        print(f"{i} * {j} = {i*j}", end="  ")
    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

Enumerate (получить индекс и значение)

names = ['Alice', 'Bob', 'Charlie']

# Без enumerate
for i in range(len(names)):
    print(f"Index: {i}, Name: {names[i]}")

# С enumerate (правильно)
for i, name in enumerate(names):
    print(f"Index: {i}, Name: {name}")

# С начальным индексом
for i, name in enumerate(names, start=1):
    print(f"{i}. {name}")
    # 1. Alice
    # 2. Bob
    # 3. Charlie

List Comprehension (компактный способ создания списков)

Вместо цикла можно использовать list comprehension:

# С циклом
squares = []
for i in range(5):
    squares.append(i ** 2)

# List comprehension (более компактно)
squares = [i ** 2 for i in range(5)]
# [0, 1, 4, 9, 16]

# С условием
evens = [i for i in range(10) if i % 2 == 0]
# [0, 2, 4, 6, 8]

# Вложенное
matrix = [[i*j for j in range(3)] for i in range(3)]
# [[0, 0, 0], [0, 1, 2], [0, 2, 4]]

Else в циклах

Блок else выполняется, когда цикл завершается нормально (без break):

for i in range(5):
    print(i)
else:
    print("Loop finished normally")

# С break
for i in range(10):
    if i == 5:
        print("Found 5")
        break
else:
    print("5 not found")  # не выполнится

Zip (итерирование по нескольким последовательностям)

names = ['Alice', 'Bob', 'Charlie']
ages = [25, 30, 35]

for name, age in zip(names, ages):
    print(f"{name} is {age} years old")

# Alice is 25 years old
# Bob is 30 years old
# Charlie is 35 years old

# Если длины разные — берёт до самой короткой
for name, age in zip(['A', 'B'], [1, 2, 3]):
    print(name, age)
# A 1
# B 2

Dict/Set Comprehension

# Dictionary comprehension
squares_dict = {i: i**2 for i in range(5)}
# {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}

# Set comprehension
unique_lengths = {len(word) for word in ['apple', 'app', 'banana', 'ban']}
# {3, 5, 6}

Практические примеры

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

numbers = [1, 5, 3, 8, 2, 7]
target = 8
found = False

for num in numbers:
    if num == target:
        found = True
        break

if found:
    print(f"Found {target}")
else:
    print(f"{target} not found")

Суммирование элементов

numbers = [1, 2, 3, 4, 5]
total = 0

for num in numbers:
    total += num

print(total)  # 15

# Или встроенная функция
print(sum(numbers))  # 15

Фильтрация данных

students = [
    {'name': 'Alice', 'grade': 85},
    {'name': 'Bob', 'grade': 92},
    {'name': 'Charlie', 'grade': 78}
]

high_performers = []
for student in students:
    if student['grade'] >= 85:
        high_performers.append(student)

# Или list comprehension
high_performers = [s for s in students if s['grade'] >= 85]

Бесконечный цикл (осторожно!)

# Опасно: может зависнуть программа
while True:
    print("This runs forever")

# Правильно: с условием выхода
count = 0
while True:
    print(count)
    count += 1
    if count >= 5:
        break  # обязательно выход

Производительность: for vs while

import time

# for быстрее
start = time.time()
for i in range(1000000):
    pass
for_time = time.time() - start

start = time.time()
i = 0
while i < 1000000:
    i += 1
while_time = time.time() - start

print(f"for: {for_time:.4f}s, while: {while_time:.4f}s")
# for: 0.0234s, while: 0.0412s (while медленнее)

Ключевые выводы

  • for — для итерирования по последовательности (список, диапазон, строка)
  • while — для повторения блока до выполнения условия
  • break — выход из цикла
  • continue — пропуск текущей итерации
  • list comprehension — компактный и быстрый способ создания списков
  • enumerate — когда нужны индексы
  • zip — когда нужно итерировать по нескольким последовательностям