Предисловие.
Эта статья посвящена циклу for - одной, возможно, из самых полезных вещей в Python.
Дисклеймер.
(Статья получилась по истенне просто огромной, поэтому советую ее сохранить и перечитывать время от времени, чтобы уложить весь материал в своей голове или читать частями (нет, я серьезно, это не авторская прихоть)).
Содержание.
Что такое цикл for в Python?
- Синтаксис.
- Разберем что делает эта программа.
Гайды по циклу for.
- Матрица.
- Диапазон-приемы.
- Сортировка пузырьком.
- Списочные выражения.
- enumerate
Послесловие.
- Словарь.
- Благодарность.
- Полезные ссылки.
Что такое цикл for в Python?
Ну, сразу сложно дать популярный ответ. Можно, конечно, побросаться узконаправленными терминами, но это ничего не даст начинающему питонисту.
Если говорить по простому -
эта штука дает возможность выполнять код внутри самого цикла определенное количество раз..
Даже такое простое пояснение звучит сложновато, неправда ли? Но сейчас я все быстро объясню, разъясню и покажу, постепенно перейдя к самим лафхакам.
Если вы считаете себя уже достаточно опытным Python-кодером, то просто немного пролистайте до заголовка "Гайды по циклу for." и читайте дальше.
Так вот, про сам for. С помощью этого цикла можно реализовать многие все свои программные мечты. Если вы знакомитесь с этим циклом в первый раз - то просто не можете представить его потенциал.
Но для начала немного теории.
Синтаксис.
Синтаксис (в данном случае) это норма записи нужных операций. В данном случае особенностью синтаксиса является последовательность пробелов, двоеточие на конце первой строки и отступ в четыре пробела на второй строке.
Если говорить по русски, то картинку выше можно перевести так -
"Для ... в диапазоне ... делать ..."
Таким образом можно сказать, что при выполнении этого цикла, мы "бежим" в определенном диапазоне ("заданное количество шагов") и при каждом "шаге" что-то делаем.
Вот пример реальной программы:
Разберем что делает эта программа.
Для каждого шага из 17 вставляем число. Если порядковый номер шага делиться на вставленное число без остатка, то печатаем "ДА", иначе - "НЕТ".
Так будет звучать программа, если ее "переводить" на русский язык.
Но главное помните - "шаг" - это условность, "бег" - тоже. Я не перевожу с Python на русский, а лишь формулирую смысл и порядок работы на доступном языке. Эти "смысловые уступки" я делаю для лучшего усвоения материала, который по-настоящему может быть полезен в будущем.
Гайды по циклу for.
Наконец-то перейдем к сладкому, а именно к Python-лайфхакам по циклу for.
1. Матрица.
Каждый уважающий себя программист обязан уметь делать матрицу, иначе он сравним с писателем, который не знает что такое запятая. Поэтому я решил рассмотреть способ ее создания с помощью цикла for, а если точнее - с помощью вложенных циклов на примере своего собственного кода кода.
Матрица сложения.
Что вы видите? for в for? Когда я только познакомился с вложенными циклами мне было очень сложно переварить эти две строки. Давайте разберем что это такое.
Матрица из себя представляет систему каких-либо математических величин, расположенных в виде прямоугольной схемы. Таким образом можно сказать, что таблица умножения - это матрица, морской бой - тоже матрица, шахматы - догадайтесь сами.
На сколько мы занем из курсов школьной математики - площадь квадрата - а*а, площадь прямоугольника - а*b, то есть и чтобы создать матрицу нам тоже нужно "перемножить" ее будущие стороны - строки и столбцы.
Это и делают первые две строчки данного кода, но они выполняют эту операцию немного по своему... (сейчас будет немного фольклора)
Представьте великана и обычного человека. Один неспешный шаг огромной сущности равняется девяти шажочкам бегущего человечка, однако гигант идет ровно на юг, а человечек бежит на восток. Когда ступня громадины касается земли каждый он выкрикивает цифру, соответствующую порядковому номеру его шага, когда же человек касается земли во время бега - он складывает порядковый номер шага великана и своего шага, после выкрикивая получившийся число. Но есть два ньюанса - после шага великана шаги человека "обнуляются" и человечек всегда обсчитывается на две единицы.
Так будет звучать сказка, если ее напишут по мотивам моего кода. i - шаг человека, j - шаг великана. 10 -1 = 9 (кол-во шагов в сторону света). Великан создает столбик, а человек делает строки от столбика. Это что касается вложенных циклов.
Но как можно поменять код, чтобы человечек никогда не ошибался при счете?
Об этом и не только дальше...
2. Диапазон-приемы.
Что я сделал?
Правильно изменил диапазон. Теперь великан и человечек будут считать свои шаги, начиная от нуля включительно. Раньше их ряд выкрикиваемых чисел выглядел так: 1, 2, 3, ... 9 (10 не включительно!), теперь отсчет начинается с 0 (10-тку все равно игнорят(). Это очень важно понимать! Иначе неграмотный вывод будет обеспечен.
Однако с таблицей умножения такой номер не прокатит:
Вам не кажется бессмысленным тот ряд нулей? Почему так происходит? Эта вам пища для размышлений, не все же мне вам разжевывать).
Если вы думали, что на этом все игры с диапазоном заканчиваются, то готов вас обрадовать (или огорчить, я не знаю) - это лишь начало.
Шаги становятся прыжками.
Не обязательно двигаться по числовой прямой или четко по списку. Всегда есть лазейка, как перескочить пару элементов (и не только) и эта лазейка - срезы.
Давайте обозначим:
- Ранее я брал в качестве диапазона только числовой ряд. Если вы не знали - бегать можно еще и по спискам, словарям, строкам, множествам и много по чем еще. Вы можете не знать что это такое, поэтому я разместил небольшой словарь в конце статьи. Там конечно не пережевываю каждую букву, как это делал в начале, но надеюсь суть поймете. Подобные узконаправленные термины, которые есть в словаре, будут выделены курсивом с подчеркиванием.
- Срезы не обязательно всегда (далеко не всегда) в циклах.
Так вот. Что вам пригодится в будущем:
У каждого элемента в списке есть свой индекс. Он может быть отрицательным и положительным (и нулем):
С помощью индексов можно вырывать отдельные элементы из, допустим, списка и делать с ними, только с ними, все что угодно:
Также можно повертеть, покрутить и сам список, например создать его перевернутую копию с помощью такого индекс-приема :
Но, хочу признать, что я вас, только что, немного развел на время. Ведь, например, верхний код можно выполнить в четыре строки, выкинув дорогой нам цикл for:
Я лишь хотел показать вам, что срезы тоже можно использовать в цикле for. Причем не только показать, но и сугубо лично посоветовать это делать, ведь на начальных этапах изучения программирования главное - экспериментировать, найдя лучшие способы и механики решения определенных задач конкретно для себя.
len
На этот раз кратенько.
len - это встроенная функция, которая позволяет выводить число элементов во многих итерируемых объектах.
Как вы уже могли понять эти данные можно использовать в "диапазонных" целях.
3. Сортировка пузырьком.
Окей, а сейчас реально годный лайфак для более менее опытных Python-кодеров - сортировка пузырьком.
Этот прием позволит правильно отсортировать список с помощью цикла for. Да, конечно, есть стандартные функции и методы для выполнения данной операции, но не лишним будет узнать, как они работают. Если кто-то из опытных программистов увидит в вашем коде сортировку пузырьком, то обязательно преисполниться огромным уважением к вам.
Сортировка пузырьком или сортировка обменом называется так потому, что элементы последовательно в"сплывают" (отправляются в конец списка), как пузырьки воздуха в воде. Сначала всплывает самый большой элемент, за ним - следующий по старшинству и т. д. Для этого мы сравниваем по очереди все соседние пары и при необходимости меняем элементы местами, ставя больший элемент на более старшее место.
Так выглядит код с грамотным применением сортировки пузырьком.
4. Списочные выражения.
"Чем меньше строк - тем опытнее программист." - это высказывание могло бы стать негласным правилом в мире кодеров. Действительно, новичкам нужно практиковаться, экспериментировать и понимать различные механизмы работы изучаемого языка, поэтому коды сравнимы с эпопеями в плане длины, в то время как опытные программисты находят различные лазейки, как сделать код короче, тем самым экономя время, которое является важнейшем ресурсом для человека.
Одной из таких лазеек являются списочные выражения.
Это удивительно на сколько сильно сокращать код. Было четыре строки - теперь одна. Причем никаких издержек, вывод будет тот же (программы считает квадраты четных чисел до 10 и вывод обоих: [0, 4, 16, 36, 64] ).
Но давайте разберемся в синтаксисе:
Теперь не надо создавать пустой список на отдельной строке - в него сразу кладутся квадраты чисел, только реализация этого "кладения" не так тривиальна. В квадратные скобки списка заключаются возведение в квадрат i, цикл for с диапазоном 10 без двоеточия на конце и if-овое условие. Причем именно в таком порядке. Ну, и на последней строчке, как и в обычном варианте, печатается получившийся список.
5. enumerate
Если вы когда-либо проходили каки-то курсы программирования на Python, то имеете опыт решения задачки, где нужно было пронумеровать элементы списка.
Да, они не были сложными, но их можно было решать намного быстрее:
Теперь элементы списка будут красиво пронумерованы от нуля включительно в созданном кортеже.
Послесловие.
Словарь.
- Списки в Python - упорядоченные изменяемые коллекции объектов произвольных типов. Являются очень гибкой структурой данных и широко используются в программах.
- Множество в Python - "контейнер", содержащий не повторяющиеся элементы в случайном порядке.
- Кортеж в Python - это последовательность неизменяемых объектов. Кортежи очень схожи со списками, с той разницей - что элементы кортежа не могут быть изменены и используют обычные скобки, вместо квадратных, как в списках.
Благодарность.
Огромное спасибо за внимание!
Оно очень важно для меня, как для автора. Надеюсь вам было интересно и вы узнали что-то новое и полезное.
Если у вас есть вопросы или правки к статье - пишите в комментариях. Я с радостью прочитаю и постараюсь ответить.
Полезные ссылки.
Буду очень раз, если ты на меня подпишешься.
Здесь можно скачать PyCharm, программу где я писал коды, которые есть в статье в качестве скриншотов.
У меня есть YouTube-канал, где я делаю материалы к статьям и не только. Возможно тебе будет интересно.
КиберФорум - форум программистов, системных администраторов, администраторов баз данных, компьютерный форум, форум по электронике и бытовой технике, обсуждение софта. Бесплатная помощь в решении задач по программированию, математике, физике и другим наукам, решение проблем с компьютером, операционными системами.
И под конец - интересная статья про рисование на Python, которую можно найти здесь.
- Еще раз спасибо за внимание!