Циклы в Python
Циклы — это фундаментальная концепция программирования, позволяющая выполнять блок кода многократно без его дублирования. Вместо того чтобы писать тысячу строк для вывода чисел от 1 до 1000, достаточно написать всего две. В Python существует два основных типа циклов: while и for. В этой статье мы подробно разберем их синтаксис, особенности работы с функцией range(), применение современного моржового оператора :=, а также методы экстренного управления ходом программы с помощью break и continue.
Цикл while: повторяем, пока условие истинно
Цикл while используется в ситуациях, когда заранее неизвестно количество повторений. Он будет выполняться до тех пор, пока заданное условие остается истинным (True). Как только условие становится ложным (False), интерпретатор выходит из цикла и продолжает выполнение кода дальше.
Классический пример — проверка пароля, вводимого пользователем:
correct_password = "qwerty123"
entered_password = ""
while entered_password != correct_password:
entered_password = input("Введите пароль: ")
print("Доступ разрешен!")Важные правила оформления while:
-
Отступы. Тело цикла обязательно выделяется четырьмя пробелами или одной табуляцией (рекомендуются пробелы по стандарту PEP8).
-
Условие выхода. Всегда следите за тем, чтобы внутри цикла изменялась переменная, влияющая на условие. Иначе вы получите бесконечный цикл, который может привести к зависанию программы.
Если внутри тела цикла не нужно выполнять никаких действий (например, когда все операции производятся внутри условия), используйте пустой оператор pass:
while input("Введите 'exit' для выхода: ") != "exit":
passМоржовый оператор := в циклах
Начиная с версии Python 3.8, разработчикам доступен оператор присваивания выражениям :=, получивший неофициальное название «морж» (walrus) из-за схожести с глазами и бивнями животного.
Этот оператор позволяет присвоить значение переменной и сразу же использовать его в условии. Это делает код значительно лаконичнее, убирая необходимость дублировать вызов функции input() до цикла и внутри него.
Без моржового оператора:
name = input("Введите имя: ")
while name != "СТОП":
print(f"Привет, {name}!")
name = input("Введите имя: ")С использованием :=:
while (name := input("Введите имя: ")) != "СТОП":
print(f"Привет, {name}!")Обратите внимание на обязательные скобки вокруг присваивания. Это упрощает чтение потоков данных и уменьшает количество строк кода.
Цикл for и функция range()
Цикл for в Python предназначен для перебора последовательностей (итерация по элементам). В отличие от while, он используется тогда, когда количество повторений четко определено или когда нужно пройти по каждому элементу списка, строки или диапазона чисел.
Для генерации числовых последовательностей используется встроенный тип (часто называемый функцией) 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) — генерирует числа с заданным шагом.
# Вывод четных чисел 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
Важно: Попытка изменить переменную цикла i внутри тела for не повлияет на следующую итерацию. На каждом новом витке переменной i будет присвоено следующее значение из последовательности range().
Итерация по объектам и вложенные циклы
Цикл for умеет перебирать не только range(). Ему под силу любой итерируемый объект: строки, списки, кортежи, словари и множества.
# Перебор символов строки
for letter in "Python":
print(letter)
# Перебор элементов списка
fruits = ["яблоко", "банан", "апельсин"]
for fruit in fruits:
print(f"Я люблю {fruit}")Вложенные циклы
Когда один цикл находится внутри другого, они называются вложенными. Это мощный инструмент для обработки матриц, создания комбинаций или перебора многомерных структур. Однако помните: количество общих итераций растет экспоненциально (внешний × внутренний), что может замедлить программу.
Пример генерации координат для поля 3x3:
for x in range(1, 4):
for y in range(1, 4):
print(f"X: {x}, Y: {y}")Управление поведением: break, continue и else
Иногда логика программы требует прервать цикл досрочно или пропустить часть действий на текущем шаге.
Оператор break
Немедленно прекращает выполнение текущего цикла (самого ближнего, если речь о вложенности). Управление передается следующей за циклом инструкции.
while True:
command = input("Введите 'exit' для выхода: ")
if command == "exit":
print("Завершение работы.")
break # Выход из бесконечного циклаОператор continue
Пропускает оставшуюся часть тела цикла и сразу переходит к следующей итерации.
# Выведем только нечетные числа от 1 до 10
for num in range(1, 11):
if num % 2 == 0:
continue # Пропускаем четные числа, переходим к следующему num
print(num)Блок else в циклах
Уникальная особенность Python — наличие блока else у циклов. Код внутри else выполняется только в том случае, если цикл завершился естественным путем (условие while стало ложным или элементы в for закончились). Если цикл был прерван оператором break, блок else выполнен не будет.
Это удобно для поиска элементов:
data = [1, 3, 5, 7]
target = 4
for item in data:
if item == target:
print("Нашли!")
break
else:
# Сюда попадем только если break не сработал
print("Элемент не найден.")Заключение
Освоив циклы while и for, вы получаете в руки инструмент для автоматизации любых повторяющихся процессов в коде. Помните о ключевых различиях:
-
while — для неизвестного заранее числа шагов, управляемого логическим условием.
-
for — для перебора известных последовательностей или точного числа итераций через range().
Используйте break и continue для тонкой настройки потока выполнения, а моржовый оператор := — чтобы писать более чистый и современный код. Следуя этим принципам, ваши программы на Python станут эффективными, читаемыми и профессиональными.