Баннер мобильный (1) Пройти тест

Циклы в Python: принципы работы и примеры использования

Как использовать while, for, break и вложенные циклы

Разбор

3 марта 2024

Поделиться

Скопировано
Циклы в Python: принципы работы и примеры использования

Содержание

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

    Что такое циклы в Python

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

    К примеру, для вывода в консоль цифр от одного до пяти можно воспользоваться пятью отдельными вызовами функции print().

    print(1)
    print(2)
    print(3)
    print(4)
    print(5)
    
    >>> 1
    >>> 2
    >>> 3
    >>> 4
    >>> 5

    А можно завернуть все в цикл for, вызывая функцию print() всего один раз. Вместо пяти строк кода получилось две. Если придется переписать все для вывода чисел с одного до десяти, то надо будет исправить только границы цикла, а не переписывать десять вызовов.

    for number in range(1, 6):
        print(number)
    
    >>> 1
    >>> 2
    >>> 3
    >>> 4
    >>> 5

    Зачем нужны циклы в Python

    В Python циклы используют для автоматизации процессов как в простых программах, так и в проектах с большой кодовой базой. Обычно циклы применяются:

    • для повторения задач. С помощью циклов можно вызывать функции несколько раз, а сами циклы могут зависеть от условий;
    • работы с данными. Можно просуммировать все числа в списке, вывести результат, сохранить его или передать аргументом в другую функцию;
    • итерации. Цикл for позволяет перебрать все символы в строке, подсчитать их количество в общем или по заданному условию — к примеру, только гласные или согласные буквы;
    • обработки файлов. Можно загрузить документ и с помощью цикла заменить в нем все вхождения определенного слова на другое.

    Цикл while

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

    while условие:
        блок_кода

    В цикл while входят: 

    • условие. Логическое выражение, определяющее, когда должно прерваться выполнение цикла. Блок кода будет выполняться до тех пор, пока условие истинно;
    • блок кода. Набор операций и вызовов функций, который запускается при каждой новой итерации.

    Реализуем простейшую проверку ввода корректного пароля пользователем. Для этого создадим переменную password и поместим в нее сам пароль, у нас это будет qwerty. Цикл while будет выполняться до тех пор, пока пользовательское значение будет отличаться от содержимого переменной password.

    password = "qwerty"
    input_password = input("Введите пароль: ")
    
    while input_password != password:
        print("❌ Неверный пароль. Попробуйте снова.")
        input_password = input("Введите пароль: ")
    
    print("✅ Доступ разрешен. Вы ввели правильный пароль.")

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

    while True:
        print("Это бесконечный цикл.")

    В примере выше условие True всегда истинно и не изменяется, а значит, ничто не сможет завершить выполнение блока кода. В результате получим бесконечный вывод строки в консоль. Следует внимательно следить за тем, чтобы всегда было условие выхода из цикла.

    Цикл for

    С помощью for в Python удобно выполнять повторяющиеся действия для каждого элемента в коллекции (списке, кортеже или строке). Количество повторений зависит от того, сколько элементов надо пройти, а выход из цикла происходит после того, как элементы для итерирования закончились. В общем виде цикл for выглядит так:

    итерируемая_коллекция = [..., ..., ...]
    for временная_переменная in итерируемая_коллекция:
        блок_кода

    В него входят:

    • итерируемая коллекция. Структура данных, по которой проходит цикл;
    • временная переменная. Нужна для работы со значениями коллекции на каждом новом шаге выполнения цикла;
    • блок кода. Действия с переменной, выполняемые на каждом круге.

    Теперь напишем цикл, который проходится по набору чисел и определяет, четные они или нет. Будем использовать for и условия внутри блока кода.

    numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
    for num in numbers:
        if num % 2 == 0:
            print(f"{num} - четное число")
        else:
            print(f"{num} - нечетное число")
    
    >>> 1 - нечетное число
    >>> 2 - четное число
    >>> 3 - нечетное число
    >>> 4 - четное число
    >>> 5 - нечетное число
    >>> 6 - четное число
    >>> 7 - нечетное число
    >>> 8 - четное число
    >>> 9 - нечетное число

    Диапазоны чисел

    Часто надо задать количество итераций, но для этого неудобно заводить новую переменную с коллекцией. В таком случае можно создать диапазон чисел для итерации, который будет жить только внутри цикла. Делается это с помощью функции range(), которой можно передать до трех аргументов.

    Один аргумент. В таком случае можно создать диапазон чисел от нуля до n-1. К примеру, если указать range(5), то на выходе получим [0, 1, 2, 3, 4].

    for i in range(5):
        print(i)
    
    >>> 0
    >>> 1
    >>> 2
    >>> 3
    >>> 4

    Два аргумента. Если передать в range() сразу два аргумента, то получится диапазон от первого числа ко второму. Надо помнить, что при выводе второй аргумент будет уменьшен на единицу.

    for i in range(5, 10):
        print(i)
    
    >>> 5
    >>> 6
    >>> 7
    >>> 8
    >>> 9

    Три аргумента. Можно добавить третий аргумент, тогда можно будет задавать шаг последовательности. К примеру, если нужны только четные числа, то начинаем диапазон с четного числа и устанавливаем шаг 2.

    for i in range(2, 11, 2):
        print(i)
    
    >>> 2
    >>> 4
    >>> 6
    >>> 8
    >>> 10

    Выход из цикла с помощью break

    Иногда из цикла надо выйти до того, как он закончит выполняться, — к примеру, при достижении определенного условия, влияющего на дальнейшую логику программы. В Python это можно сделать с помощью ключевого слова break.

    Представим, что надо пройтись по всем числам в коллекции с помощью цикла for, но выйти из него, если встретилась единица.

    numbers = [2, 3, 4, 1, 5, 6, 7, 8, 9]
    for num in numbers:
        if num == 1:
            print("Выход из цикла")
            break
        print(num)
    
    >>> 2
    >>> 3
    >>> 4
    >>> Выход из цикла

    Выполнение цикла прервалось до того, как программа успела пройтись по всем элементам коллекции. Все из-за того, что мы достигли условия и сработало ключевое слово break. Если убрать единицу из коллекции, то цикл выведет все числа.

    numbers = [2, 3, 4, 5, 6, 7, 8, 9]
    for num in numbers:
        if num == 1:
            print('Выход из цикла')
            break
        print(num)
    
    >>> 2
    >>> 3
    >>> 4
    >>> 5
    >>> 6
    >>> 7
    >>> 8
    >>> 9

    Переход к следующей итерации

    Можно не только принудительно выходить из цикла, но и пропускать его итерации по условию с помощью continue. Мы уже использовали range() для вывода только четных чисел коллекции. Теперь реализуем этот алгоритм с помощью пропуска итераций.

    for i in range(1, 11):
        if i % 2 != 0:
            continue
        print(i)
    
    >>> 2
    >>> 4
    >>> 6
    >>> 8
    >>> 10

    В условии проверяем остаток от деления числа на два. Если он не равен нулю, то пропускаем число и не выводим его. Таким образом, мы не прервали выполнение цикла, но пропустили лишние итерации.

    Генератор коллекций

    Python позволяет записывать циклы for в одну строку. Так код получается более компактным и его можно использовать в дополнительных задачах. К примеру, с помощью такой записи генерируют коллекции.

    Представим, что надо быстро создать список чисел от одного до десяти. Можно объявить переменную и сделать это вручную.

    num = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    print(num)
    
    >>> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

    Это занимает много времени, особенно если в списке будет больше чисел. Поэтому можно автоматизировать задачу с помощью однострочного цикла for.

    num = [i for i in range(1, 11)]
    print(num)
    
    >>> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

    Можно использовать и условия — к примеру, сгенерировать список только нечетных чисел.

    num = [i for i in range(1, 11) if i % 2 != 0]
    print(num)
    
    >>> [1, 3, 5, 7, 9]

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

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

    for условие:
        блок_кода
        for условие:
            блок_кода

    Для примера представим, что у нас есть таблица из двух строк и четырех столбцов. Обойдем каждую ее ячейку с помощью вложенного цикла, выводя индекс каждой ячейки.

    for i in range(1, 3):
        for j in range(1, 5):
            print(f'Ячейка {i}:{j}')
    
    >>> Ячейка 1:1
    >>> Ячейка 1:2
    >>> Ячейка 1:3
    >>> Ячейка 1:4
    >>> Ячейка 2:1
    >>> Ячейка 2:2
    >>> Ячейка 2:3
    >>> Ячейка 2:4

    Итог

    • Циклы — базовый инструмент программирования на Python. С их помощью разработчики могут быстро выполнять повторяющиеся действия, автоматизируя процесс.
    • В каждом цикле есть условие и блок кода, которые выполняются, пока условие истинно.
    • С помощью циклов for можно итерировать коллекции данных, выполняя преобразования.
    • В циклах while задается явное условие.
    • С помощью ключевого слова break можно в любой момент прервать выполнение цикла.
    • Continue позволяет пропускать итерации, не подходящие под условие.

    Разбор

    Поделиться

    Скопировано
    0 комментариев
    Комментарии