[МУЗЫКА] Продолжаем разговор про упорядоченные типы данных. Теперь мы с вами поговорим про новый цикл, с которым мы будем работать. Мы уже знаем один оператор для запуска цикла — это while. Сегодня мы проговорим про цикл for, и он появится в нашем инструментарии. Например, давайте обсудим такую задачу: у нас есть список, все еще наш любимый список покупок, и представьте, что вам нужно вывести поэлементно все названия продуктов. Например, я хочу в разных строчках напечатать: хлеб, молоко, сметана. В моем списке всего три элемента, я сейчас к ним обратилась по индексу. Но, опять же, мы всегда представляем, что в нашем списке элементов будет, может быть, много. И это явно будет неудобно. Из того, что мы знаем, мы могли бы придумать, как такую конструкцию реализовать с циклом while. Например, мы бы завели какую-то переменную, в которой бы хранили счетчик индексов с элементом, под каким индексом мы сейчас работаем. Запустили бы цикл, такой, чтобы он перебрал все эти индексы. И внутри цикла напечатали бы нашу переменную. Как только индекс превысил какое-то число, цикл останавливается. Напечатали все наши элементы, на разных строчках. Соответственно, если бы в списке было сто, тысяча, еще больше элементов, они бы тоже все напечатались. Это бы сработало. Но на самом деле выглядит не очень удобно. Нам надо помнить про то, что нужно обозначить переменную, придумать критерий остановки, не забыть эту переменную увеличить. Наверное, как и обычно в Python, для такой задачи есть какое-то более простое решение, ведь такая задача выглядит как что-то универсальное, что-то такое, о чем другие люди тоже задумывались. В Python есть другой инструмент, другой цикл, который делает эту задачу перебора элементов более удобной. Выглядит он вот так. У меня здесь ключевое слово for — новое, мы такое еще не видели. У нас есть двоеточие, отступ. И по сути это выполнение каких-то инструкций для каждого элемента последовательности. И вот первая линия нам как раз задает, элементы какой последовательности или другого типа данных мы перебираем. Потом двоеточие, потом отступ и инструкции, которые мы выполняем. Вот здесь, например, я решила ту же задачу, что и на предыдущем слайде: напечатала мой список покупок на новых строках. Давайте разбираться, как он работает. Список покупок: хлеб, молоко, сметана. Три элемента. Наш цикл, и он печатается. Итак, давайте смотреть, что такое for. for — это «для», по сути, ключевое слово, которое говорит: перебери мне в какой-то последовательности все элементы. in — это по сути наш оператор проверки, мы его встречали, но здесь он как раз сигнализирует, в какой последовательности в каком объекте мы эти элементы будем искать. И thing — это на самом деле название переменной. Она может быть другая: item, x. Как вашей душе пожелается, так вы сможете ее и назвать. И на самом деле это переменная, в которую внутри цикла попадают наши элементы. У меня здесь это отмечено зелеными комментариями. Операции, которые там происходят, но которых мы не видим. Как работает цикл? Цикл, в отличие от цикла while, не нуждается в критерии остановки. Нам не нужно придумать правило, по которому наш цикл закончит работу. Наш цикл работает до тех пор, пока в последовательности есть элементы. Например, с нашим списком. Мы запускаем цикл — он идет и смотрит, есть ли в моем списке что-то. Он говорит: ага, там есть элемент — вот он, хранится под индексом 0 (хлеб), я его беру, с ним работаю. Закончил выполнять все инструкции для первого элемента, вернулся в начало цикла. Проверяет, есть ли следующий элемент: ага, там молоко. Выполняет все инструкции для этого элемента. Доходит до последнего элемента. Выполнил все инструкции для сметаны. Возвращается в начало цикла и говорит: ага, элементов больше нет, я заканчиваю работу. Очень удобно, нам не нужно придумывать, когда нужно остановиться — цикл сам все знает. Вернемся к нашей переменной. Смотрите, что происходит к цикле. Когда запускается цикл for, он берет какой-то элемент, и вот эти шаги, которые в комментариях, мы их не видим, но на самом деле там происходит операция присвоения. То есть мы говорим: возьми каждый элемент этого списка, каждый по очереди положи в переменную thing и дальше выполни с ней какие-то инструкции. То есть, например, на первом шаге цикла в эту переменную попадает хлеб, то есть происходит операция присвоения, которую мы не делаем на самом деле, но это именно то, что там за кадром. И мы говорим: а теперь ты создал эту переменную, что-то в нее положил, поэтому теперь, пожалуйста, нам ее напечатай. Возвращаемся в начало цикла, теперь в эту переменную попадает следующий элемент — молоко — мы опять его печатаем. И так далее. И на самом деле это честная переменная, она существует вне цикла. Если мы ее напечатаем, мы увидим,что в этой переменной будет храниться последний элемент, который туда попал. В нашем случае сметана. Подытожим. Цикл for перебирает элементы последовательностей: списков, кортежей, строк. Позже мы поговорим про другие типы данных, с которыми он тоже будет работать. Цикл for автоматически создает внутри себя переменную, к которой мы потом можем обращаться и выполнять с этой переменной какие-то инструкции. Название этой переменной может быть любым — это не какое-то зарезервированное слово. Можете ее назвать, как вашей душе угодно. Главное, называйте ее одинаково: и когда вы объявляете цикл, и когда вы обращаетесь к ней в инструкции. Соответственно, цикл for перебирает элементы внутри последовательности и по очереди присваивает их этой переменной, которую создает автоматически. Так мы можем к этим элементам применять какие-то стандартизированные одинаковые операции. И эта внутренняя переменная будет существовать и вне цикла. Но вряд ли мы будем ее использовать. Итак, мы с вами поговорили про новый инструмент — цикл for. Теперь давайте посмотрим, как он работает в Python. [МУЗЫКА]