Комментарии (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 — когда нужно итерировать по нескольким последовательностям