Найти в Дзене
Программы от меня

Python-овские циклы в python

Циклы — это сердце любого языка программирования, и Python предлагает для них не только простой и понятный синтаксис, но и целый набор "секретных ингредиентов", которые делают код элегантным и эффективным. В этой статье мы разберем все о циклах в Python: от базы, которую нужно знать каждому, до интересных трюков, которые превратят вас из новичка в настоящего питониста. Погнали! Прежде чем колдовать, нужно понять основу. В Python есть два верных друга: while и for. Цикл while прост и суров: он выполняет команды снова и снова, пока верно заданное условие. Это идеальный выбор, когда вы не знаете заранее, сколько шагов потребуется. Например, ждать от пользователя правильный пароль до победного конца. secret = "волшебство"
answer = ""
while answer != secret:
answer = input("Угадайте секретное слово: ")
print("Добро пожаловать в мир магии!")
Хотите сделать код с while еще компактнее? В Python 3.8 появился "моржовый оператор" (walrus operator). Он позволяет одновременно и присвоить зн
Оглавление



Циклы — это сердце любого языка программирования, и Python предлагает для них не только простой и понятный синтаксис, но и целый набор "секретных ингредиентов", которые делают код элегантным и эффективным. В этой статье мы разберем все о циклах в Python: от базы, которую нужно знать каждому, до интересных трюков, которые превратят вас из новичка в настоящего питониста.

Погнали!

1. База: while и for

Прежде чем колдовать, нужно понять основу. В Python есть два верных друга: while и for.

Цикл while прост и суров: он выполняет команды снова и снова, пока верно заданное условие. Это идеальный выбор, когда вы не знаете заранее, сколько шагов потребуется. Например, ждать от пользователя правильный пароль до победного конца.

secret = "волшебство"
answer = ""
while answer != secret:
answer = input("Угадайте секретное слово: ")
print("Добро пожаловать в мир магии!")
  • Цикл for — это король перебора. Он идеален, когда нужно пройтись по элементам коллекции (списку, строке, словарю) или повторить действие известное количество раз -3-5. Вместо того чтобы писать 100 строк print, вы пишете одну -6:pythonКопироватьСкачатьfor i in range(5): # range(5) создает последовательность 0, 1, 2, 3, 4
    print(f"Итерация номер {i}")

2. Трюк №1: Моржовый оператор :=

Хотите сделать код с while еще компактнее? В Python 3.8 появился "моржовый оператор" (walrus operator). Он позволяет одновременно и присвоить значение переменной, и проверить его в условии -1-4.

Посмотрите на разницу. Было:

name = input("Введите имя: ")
while name != "СТОП":
print(f"Привет, {name}!")
name = input("Введите имя: ")

Стало (смотрите, как элегантно!):

while (name := input("Введите имя: ")) != "СТОП":
print(f"Привет, {name}!")

Мы избавились от дублирования кода — имя теперь вводится ровно в одном месте -4.

3. Трюк №2: Волшебная палочка enumerate

Часто новички, пришедшие из других языков, пишут так -2:

my_list = ['яблоко', 'банан', 'вишня']
for i in range(len(my_list)):
print(i, my_list[i])

Это работает, но это некрасиво. В Python для этого есть встроенная функция enumerate. Она дает нам одновременно и индекс, и значение элемента -2-6-7.

for index, value in enumerate(my_list):
print(index, value)

Код стал чище, понятнее и быстрее работает.

4. Трюк №3: Ракетница zip

Что делать, если нужно пройтись сразу по двум (или больше) спискам параллельно? Конечно же, использовать zip -6-7! Эта функция, как аккуратная ракетница, собирает элементы из нескольких обойм в один блок.

names = ["Анна", "Борис", "Виктор"]
ages = [25, 30, 35]
cities = ["Москва", "Сочи", "Казань"]

for name, age, city in zip(names, ages, cities):
print(f"{name}, {age} год, город {city}")

Вывод будет аккуратным и синхронным.

5. Трюк №4: Избегаем вложенных циклов с itertools.product

Вложенные циклы — это часто боль и путаница. Например, нам нужно найти комбинацию чисел из трех списков, сумма которых равна 2077 -2.

Обычный "квадратный" код:

list_a = [1, 2020, 70]
list_b = [2, 4, 7, 2000]
list_c = [3, 70, 7]
for a in list_a:
for b in list_b:
for c in list_c:
if a + b + c == 2077:
print(a, b, c)

А теперь — магия модуля itertools:

from itertools import product

for a, b, c in product(list_a, list_b, list_c):
if a + b + c == 2077:
print(a, b, c)

Функция product генерирует все возможные комбинации (декартово произведение), и нам хватает одного цикла -2. Код сразу становится плоским и читаемым.

6. Трюк №5: Блок else у цикла

Это фишка, которая есть только в Python. У циклов for и while может быть блок else. Он выполняется только в том случае, если цикл завершился естественным путем, без команды break -3-6.

Это идеально подходит для поиска.

def search_number(numbers, target):
for num in numbers:
if num == target:
print(f"Нашли {target}!")
break
else:
print(f"Число {target} не найдено.")

search_number([1, 2, 3, 4, 5], 3) # Нашли 3!
search_number([1, 2, 3, 4, 5], 10) # Число 10 не найдено.

Обратите внимание: сообщение "не найдено" выводится только после того, как цикл честно перебрал все элементы и не наткнулся на break.

7. Трюк №6: Тонкая настройка с itertools

Модуль itertools — это набор швейцарских ножей для циклов. Мы уже видели product. Вот еще пара примеров -2:

chain() — склеивает несколько итераторов в один, позволяя пройтись по ним в одном цикле, как по единому списку.

from itertools import chain
for i in chain([1, 2], ['a', 'b'], (5, 6)):
print(i) # Выведет: 1, 2, a, b, 5, 6
  • groupby() — группирует подряд идущие элементы. Например, можно сжать строку, сосчитав повторения.

8. Трюк №7: Пишем свои генераторы для циклов

Самый мощный трюк — вы можете научить цикл for работать так, как нужно вам. Для этого используются функции-генераторы с ключевым словом yield -2.

Хотите цикл, который перебирает только четные числа?

def even_only(numbers):
for i in numbers:
if i % 2 == 0:
yield i

my_numbers = [1, 2, 3, 4, 5, 6]
for n in even_only(my_numbers):
print(n) # Выведет: 2, 4, 6

Мы создали свой собственный итератор, который отфильтровывает ненужное.

Итоги

Циклы в Python — это не просто скучные повторения действий. С помощью небольших трюков — enumerate, zip, itertools или хитрого else — вы можете писать код, который будет не только работать, но и радовать глаз своей красотой и эффективностью -7. Используйте эти инструменты, и ваш код станет по-настоящему "pythonic"!