Добрый день! Сегодня мы продолжим знакомиться с функционалом срезов и узнаем, как извлечь из списка строки или кортежа не просто некий кусочек, но и извлечь кусочек кусочка, а именно, мы узнаем, что срезом бывает третий аргумент, который задает его шаг. Еще мы посмотрим, как срезы можно применить сразу внутри цикла "for" или внутри функции "map()". Например, если у нас есть знакомый нам список из имен студентов, мы можем попросить компьютер вывести на экран каждого второго командой "[0:4:2]". Таким образом, компьютер пойдет с нулевого индекса и будет брать каждое второе. Он возьмет нулевое имя, то есть имя "Аня", возьмет второе имя, то есть имя "Таня" и на этом, собственно, наш список закончится. Возьмет и сразу выведет их на экран. Мы можем начать не с нулевого индекса, например, мы можем попросить компьютер командой "[1::2]" начать с первого индекса и, опять же, брать, например, каждое второе имя; в этом случае компьютер возьмет первый индекс — имя "Дима", возьмет третий индекс — имя "Валя", составит из них список и выведет его на экран. И, наконец, мы можем попросить компьютер вообще идти в обратную сторону: не от нулевого индекса к последнему, а от последнего к нулевому. В этом случае мы указываем шаг отрицательным и компьютер послушно выведет наш список имен в обратном порядке: "Валя", "Таня", "Дима", "Аня". Срезы можно сразу указывать не только внутри команды "print()", но и в более сложных командах, даже конструкциях, например, внутри цикла "for" или внутри функции "map()". В частности, мы можем попросить компьютер пройти не по всем именам студентов, а взять каждое второе, начиная с нулевого. В этом случае компьютер сначала расшифрует строчку "students[::2]" и из нашего списка из четырех элементов оставит только два элемента: оставит имя "Аня", оставит имя "Таня" и после этого пройдет циклом по этому усеченному списку. Также срезы можно использовать и в функции "map()". Например, мы можем попросить компьютер сделать срез от начала списка студентов и остановившись перед именем с индексом "2", то есть в этот срез попадут имена с нулевым и первым индексом: "Аня" и "Дима", внутри функции "map()" мы можем попросить применить к каждому из этих имен метод строк "upper", который делает все буквы большими, переводит их в верхний регистр. Наконец, результат работы функции "map()" — мы просим компьютер превратить в список. Этот список мы и просим вывести на экран и компьютер послушно выберет два слова: "Аня", "Дима", и все слова будут написаны большими буквами. Давайте посмотрим, как используются такие сложные срезы на каком-нибудь реальном примере, например, давайте расшифруем шифр Фрэнсиса Бэкона, которому 400 лет.