Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Какие циклы есть в Python?
В Python есть несколько способов организовать повторяющееся выполнение кода. Давайте разберём все основные типы циклов.
1. Цикл for
Цикл for используется для итерации по элементам итерируемых объектов (списки, строки, диапазоны и т.д.).
# Итерация по списку
fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
print(fruit)
# Итерация по строке (каждый символ)
for char in "hello":
print(char) # h, e, l, l, o
# Итерация по диапазону (range)
for i in range(5): # 0, 1, 2, 3, 4
print(i)
# range с началом и шагом
for i in range(1, 10, 2): # 1, 3, 5, 7, 9
print(i)
# Получить индекс и значение
for index, fruit in enumerate(fruits):
print(f"{index}: {fruit}") # 0: apple, 1: banana, 2: cherry
Итерация по словарю:
user = {"name": "Alice", "age": 30, "city": "NYC"}
# Итерация по ключам (по умолчанию)
for key in user:
print(key) # name, age, city
# Итерация по значениям
for value in user.values():
print(value) # Alice, 30, NYC
# Итерация по парам (ключ, значение)
for key, value in user.items():
print(f"{key}: {value}") # name: Alice, age: 30, city: NYC
Вложенные циклы:
# Таблица умножения
for i in range(1, 4):
for j in range(1, 4):
print(f"{i} * {j} = {i*j}", end=" ")
print() # новая строка
2. Цикл while
Цикл while выполняется, пока условие истинно. Используется, когда число итераций неизвестно.
# Простой while
count = 0
while count < 5:
print(count)
count += 1 # 0, 1, 2, 3, 4
# Ввод данных до корректного значения
while True:
user_input = input("Введите число (0-10): ")
try:
num = int(user_input)
if 0 <= num <= 10:
break # выход из цикла
else:
print("Число вне диапазона")
except ValueError:
print("Некорректный ввод")
# Работа с файлом
with open('data.txt') as f:
while True:
line = f.readline()
if not line: # конец файла
break
print(line.strip())
3. Операторы управления циклом
break — выход из цикла:
# Поиск элемента
for num in [1, 2, 3, 4, 5]:
if num == 3:
break # выход при нахождении
print(num) # выведет 1, 2
# Выход из вложенного цикла
for i in range(3):
for j in range(3):
if i == 1 and j == 1:
break # выходит только из внутреннего цикла
print(f"({i},{j})", end=" ")
print() # новая строка после каждой строки i
continue — переход к следующей итерации:
# Пропуск чётных чисел
for num in range(1, 6):
if num % 2 == 0:
continue # пропустить эту итерацию
print(num) # выведет 1, 3, 5
# Пропуск пустых строк
with open('data.txt') as f:
for line in f:
if line.strip() == '':
continue # пропустить пустые строки
print(line.strip())
else в цикле:
# else выполняется, если цикл завершился нормально (без break)
for num in [1, 2, 3, 4, 5]:
if num == 10:
break
else:
print("10 не найден") # будет выведено
# Практический пример
for user_id in user_ids:
if user_exists(user_id):
print(f"Пользователь {user_id} найден")
break
else:
print("Ни один пользователь не найден")
4. Функциональные подходы (альтернативы циклам)
List comprehension (списковое выражение):
# Вместо:
squares = []
for num in range(5):
squares.append(num ** 2)
# Пишем:
squares = [num ** 2 for num in range(5)] # [0, 1, 4, 9, 16]
# С условием
evens = [num for num in range(10) if num % 2 == 0] # [0, 2, 4, 6, 8]
# Вложенный список
matrix = [[i*j for j in range(3)] for i in range(3)]
Dict comprehension:
# Создание словаря
squares_dict = {num: num**2 for num in range(5)}
# {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
# Инвертирование ключей и значений
original = {'a': 1, 'b': 2, 'c': 3}
inverted = {v: k for k, v in original.items()}
# {1: 'a', 2: 'b', 3: 'c'}
Set comprehension:
# Множество уникальных квадратов
squares_set = {num**2 for num in [1, 2, 2, 3, 3, 3]}
# {1, 4, 9}
map(), filter(), reduce():
# map — применить функцию ко всем элементам
nums = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x**2, nums)) # [1, 4, 9, 16, 25]
# filter — оставить только элементы, соответствующие условию
evens = list(filter(lambda x: x % 2 == 0, nums)) # [2, 4]
# reduce — свернуть в одно значение
from functools import reduce
product = reduce(lambda x, y: x * y, nums) # 120 (1*2*3*4*5)
5. Итераторы и генераторы
Создание собственного итератора:
class CountUp:
def __init__(self, max):
self.current = 1
self.max = max
def __iter__(self):
return self
def __next__(self):
if self.current > self.max:
raise StopIteration
result = self.current
self.current += 1
return result
for num in CountUp(3):
print(num) # 1, 2, 3
Генератор (generator) — ленивый итератор:
def count_up(max):
current = 1
while current <= max:
yield current # возвращает значение, сохраняет состояние
current += 1
for num in count_up(3):
print(num) # 1, 2, 3
# Генератор экономит память
def fibonacci(n):
a, b = 0, 1
for _ in range(n):
yield a
a, b = b, a + b
for fib in fibonacci(5):
print(fib) # 0, 1, 1, 2, 3
6. Сравнение подходов:
# Задача: получить квадраты чисел 1-5
# 1. Традиционный for
result = []
for i in range(1, 6):
result.append(i ** 2)
# 2. List comprehension — более «питонический»
result = [i ** 2 for i in range(1, 6)]
# 3. map() с лямбдой
result = list(map(lambda i: i ** 2, range(1, 6)))
# 4. Генератор
result = (i ** 2 for i in range(1, 6))
Практические советы:
- for — когда знаете количество итераций
- while — когда число итераций зависит от условия
- List comprehension — когда создаёте новый список (читаемо и быстро)
- Генератор — для больших последовательностей (экономия памяти)
- break/continue — для управления потоком выполнения
- else в цикле — когда нужна логика после нормального завершения