Основные недостатки языка python
Содержание:
- Введение в генераторы
- Командами какого меню можно воспользоваться для установки эффектов смены слайдов?
- Что нужно знать
- Профессиональные навыки
- #11: Бросаем вызов!
- Возможности
- Что нужно понимать
- Функции, которые когда-нибудь можно выучить
- Где используется Python
- Строгая динамическая типизация
- Функции
- Литература
- Итоги
- FreeSpacer – очистка компьютера и дисков от мусора
- Deep Anomaly Detection
- Сколько зарабатывают разработчики на Python
- Библиотека Xoltar Toolkit
- Массивы
- Как пользоваться ADB run
- От Python 2 до 3
- Одиночные проверки
Введение в генераторы
Генератор — функция, которая генерирует последовательность результатов вместо одного значения
Вместо того, чтобы возвращать значение, мы создаём серию значений (с использованием оператора yield). Вызов функции генератора создает объект-генератор. Однако функция не запускается.
Функция генератор выполняется только при вызове .
yield возвращает значение, но приостанавливает выполнение функции. Функция генератор возобновляется при следующем вызове . При завершении итератора возбуждается исключение .
Небольшие выводы:
- Функция генератор — более удобный способ написания итератора
- Вам не нужно беспокоиться о реализации протокола итератора (, и т. д.), т.к. при создании функции с магия Python уже добавляет в объект функции нужные методы.
Помимо функции генератора возможно также использовать генераторное выражение, которое также возвращает .
Синтаксис генераторного выражения также прост
Командами какого меню можно воспользоваться для установки эффектов смены слайдов?
Что нужно знать
-
Английский язык. Он нужен для чтения документации, примеров на stackoverflow и статьей
, а так же чтобы клеить иностранок, когда будете ездите в отпуск. Многие в России имеют печальный опыт обучения языку в школе и в институте, но на самом деле, ребят, это действительно на 95% проблема системы образования, а на остальные 5% — отсутствие реальной необходимости в языке. Не существует людей (не считая немых и больных амнезией), которые не смогли бы научиться говорить на английском, а уж тем более свободно читать. Почти все вы уже умеете читать со словарем и для начала этого вполне достаточно. - POSIX-операционная система. Конечно с появлением docker и прочих vagrant’ов это стало не так критично как ранее, но все же работать на UBUNTU или MacOS на порядок комфортнее из-за нормальной нативной консоли (особенно под убунтой) с ее командами ls, cd, cat, ps, grep, kill, killall, vim, ssh, cp/scp и множеством других, используемых ежедневно в работе. Оболочка bash, переменные окружения, ssh и ключи доступа к удаленным машинам — все это используется весьма и весьма часто. Как изучать? Да никак особо, просто установите и пользуйтесь, постепенно само все изучится, ну можно статейки по отдельным командам посмотреть.
- Python и его структуры данных. Структуры данных называются в питоне немного иначе, чем в других языках. Для изучения синтаксиса я настоятельно рекомендую самый обычный туториал на официальном сайте, он отлично написан — если не сильны в английском заодно и попрактикуете. Помните, если вы собираетесь работать питонистом, то английский нужен будет постоянно.
- Библиотеки Python. Именно знание их в основном от вас будут ожидать работодатели. О существовании некоторых достаточно просто знать, а некоторые нужно знать хорошо. Django сейчас в тренде и хорошее знание этого фреймворка сильно упрощает поиск работы. Вкратце: с одним лишь знанием языка вы нафик никому не нужны. Нужно иметь представление о популярных библиотеках, а найти список таких можно просто полистав вакансии.
- Форматы данных XML, HTML, JSON. Это форматы данных, без которых нынче никуда. Для изучения XML я рекомендую почитать документацию lxml (и попробовать все примеры оттуда), для HTML — htmlbook.ru, для json — хотя бы просто погуглите что это.
- Протокол HTTP. Имхо, самое полезное в нем это знать статусы сообщений HTTP, что такое cookies, session, заголовки, тело и reason. Мне кажется статьи в википедии хватит для начала, но может кто подскажет хорошую статью?
- Базы данных. Их можно изучать годами — настолько обширная тема и хорошее знание баз данных, умение оптимизировать структуру и запросы необходимы чтобы стать ведущим разработчиком с большой зарплатой. Но для начала вам нужен хотя бы минимум — уметь установить СУБД и знать что такое INSERT, UPDATE, SELECT, JOIN, GROUP BY для реляционных баз. Лично я рекомендую PostgreSQL, так как она хорошо поддерживает гео-данные, которые нынче в каждом втором стартапе. Помимо реляционных, вам надо знать, что есть ещё noSQL типа Mongo (и зачем они нужны) и key-value хранилища типа Redis.
- (очень желательно) Javascript, jQuery и прочие AngularJS. Сейчас все больше сайтов уже не генерят HTML, а асинхронно обмениваются с сервером информацией и ее отображают. Надо понимать зачем это все и из этого вытекает следующий пункт.
- (желательно) Архитектуры информационных систем. Фактически хорошее понимание архитектур вкупе с хорошим знанием баз данных делает вас сеньором. www.insight-it.ru — к сожалению мало обновляется последнее время, но даже то что там есть я нахожу крайне полезным.
- (желательно) Еще один тренд — это асинхронное программирование. Это не является чем-то необходимым для того чтобы найти работу, но это может быть вектором для дальнейшего развития.
Профессиональные навыки
Существует много языков для образовательных целей, например, Scratch или LOGO. С их помощью можно понять логику программирования, поэтому некоторые из них применяют в школах, и это хорошо. Хотя как бы вы в них не продвинулись, никто их серьезно не воспринимает (конечно, кроме учителей, которые преподают их ученикам).
Лучше займитесь Python. Он доступен, но сразу погружает вас в мир настоящего программирования.
Интеграция Python с другими языками? Нет проблем. Дополнительные решения? Да, имеется много вариантов. Jython – это Java с включенным Python, IronPython – это .NET c включенным Python.
#11: Бросаем вызов!
Если вы не уверены в том, что готовы окунаться в некоторые крупные проекты, упомянутые ранее, при этом мелкие вас не очень интересуют, вы можете думать: а чем еще можно заняться?
Кодерские задачки могут помочь вам попрактиковаться в навыках работы в Python и получить поверхностное представление обо всем спектре вещей, которые вы можете делать в Python,
Проще говоря: вам предоставят проблему, и вам нужно найти решение, в котором используется Python.
У вас будет шанс разработать решения, которые имеют смысл для вас, при этом у вас есть возможность углубиться в язык Python при помощи подсказок. Так вы получите представление о том, какие модули вам нужно импортировать, чтобы решить проблему.
Кодовые челенджы – это хороший способ освоить наибольшее количество библиотек, методов и фреймворков. Вы гарантированно найдете что-нибудь, что зацепит ваш интерес, и захотите уделять этому свободное время. Вы можете вернуться к этому списку и найти то, что зажгло в вас интерес, когда вы использовали это в одном из челенджей.
Чтобы начать, попробуйте одно из следующих, чтобы оценить свои силы:
- Python Challenge. Более 20 доступных уровней. Создавайте простые скрипты в Python, чтобы решить уровень. По интернету есть разбросанные подсказки, но старайтесь искать решение самостоятельно!
- PyBites Code Challenge. Включает в себя 50 задач, и количество растет! Эти задачи направлены на то, чтобы вы научились работать в Python для создания приложений, которые будут решать определенные проблемы.
Если вы предпочитаете программировать в таких задачах самостоятельно вместо пошаговых инструкций, то не будет лишним иметь под рукой вспомогательный ресурс.
Книга Python Tricks – это отличный источник информации, который поможет при работе с задачами. В книге рассматриваются малоизвестные части Python, на основании которых и формируются задачи.
Возможности
Python можно применять в разных сферах:
- Arduino или Raspberry Pi. Вы можете кодировать платы и создавать много интересных устройств. Это хорошо вознаграждается.
- Компьютерная безопасность. Тесты на проникновение, анализ систем безопасности, разработка программного обеспечения – на Python вы можете выполнять все эти задачи.
- Интернет вещей. Вы можете делать гаджеты для собственного умного дома или работать в этой сфере на Python как профессионал.
- Маркетинг. Можно собирать информацию с помощью Python о пользователях сайта или социальных сетей Facebook, Google и Twitter, а затем создавать лучшую таргетинговую рекламу.
- Наука. Обработка математических и статистических данных, обработка результатов экспериментов в области геномики, химии, геоинформации и других наук.
- Обеспечение качества.Тестирование программного обеспечения, автоматическое тестирование, отладка – для любой области вы можете написать тест.
- Статистика. Здесь Python применяется очень часто.
- Машинное обучение. В этой сфере обрабатываются большие массивы данных. Python – будущее машинного обучения.
- Веб-разработка. Здесь Python более эффективен, чем PHP.
Python может применяться во многих других сферах, где раньше о нем не думали, например, в разработке игр.
Что нужно понимать
Таблица соответствия того, что нужно работодателю и как вы можете ему с этим помочь
Мечта работодателя | Что от вас требуется |
---|---|
делегирование — поставил задачу и её сделали правильно без твоего участия | не боитесь брать на себя ответственность и достаточно компетентны |
скорость разработки (основное преимущество питона) | владеете языком, знаете сторонние библиотеки и понимаете, что скорость разработки очень важна |
надежность системы | тэстирование собственного кода насколько это возможно или требуется |
поддерживаемость (еще одно преимущество синтаксиса и рекомендаций питона) | знакомство с гайдлайнами (pep, import this) и по возможности следование им |
эффективность системы | знакомство со свежими технологиями, библиотеками и другими приложениями |
эффективность разработчика | заинтересованы в проекте. Тут я советую действительно выбирать проекты, которые интересны. |
предсказуемость, возможность планирования | ваши планы на ближайший год ясны |
Интересно что он ей такое сказал на самом деле?
Функции, которые когда-нибудь можно выучить
Следующие встроенные функции Python определённо не бесполезны, но они более специализированы.
Эти функции вам, возможно, будут нужны, но также есть шанс, что вы никогда не прибегнете к ним в своём коде.
- : возвращает итератор (список, набор и т. д.);
- : возвращает , если аргумент является вызываемым;
- and : вместо них рекомендуется использовать генератор-выражения;
- : округляет число;
- : эта функция выполняет деление без остатка () и операцию по модулю () одновременно;
- , и : служат для отображения чисел в виде строки в двоичной, восьмеричной или шестнадцатеричной форме;
- : возвращает абсолютное значение числа (аргумент может быть целым или числом с плавающей запятой, если аргумент является комплексным числом, его величина возвращается);
- ;
- .
Где используется Python
Сфера использования языка Python достаточно широка – это и веб-разработки, игры, программирование станков с ЧПУ, программирование роботизированных систем и многое другое.
Приведу только несколько примеров:
- В веб-разработке для работы с Python используются фреймворки Django, Pyramid и многие другие.
- Для создания сайтов применяют движки Abilian SBE, Ella, Saleor и прочие.
- Для работы на стационарных компьютерах на языке Python написаны визуальный редактор GIMP, программа для создания трехмерной графики Blender и т.д.
- На Python разрабатываются мобильные приложения для Android и IOS.
- Игры Battlefield 2, World of Tanks, Civilization IV и другие также были написаны с использованием Питона.
- Для программирования Paspbery Pi также применяется Питон. Компания Lego также дает возможность программировать роботов Lego EV3 на Python.
- Язык используется и в научных исследованиях для проведения разного рода вычислений. Для этого применяются библиотеки SciPy, NumPy, Matplotlib.
- На Python создаются скрипты, плагины. Скрипты имеют возможность встраивания в другие языки программирования для автоматизации различных задач.
- Также язык применятся для встроенных систем на станках ЧПУ и различных устройствах с автоматическим регулированием.
И это далеко не полный перечень областей применения языка Python. Поэтому изучение этого языка может быть очень полезным для любого программиста, инженера по автоматизации или специалиста по обработке данных.
Строгая динамическая типизация
Динамическая типизация – значит, в одной и той же переменной в разное время могут храниться значения
разных типов. Сейчас – число, потом – строка, и всё – в одной переменной.
Во многих языках так нельзя: создал, мол, целочисленную переменную, вот и храни в ней целые числа.
Это удобно для компьютера, но не всегда удобно для программиста.
Строгая типизация – значит, нельзя просто так производить действия с объектами разных типов. Например, строку с
числом сложить не получится: сначала надо превратить строку в число, а только потом – сложить. Сам Питон
такое преобразование делать не будет.
Может показаться, что это неудобно, но на самом деле это защищает от прорвы ошибок. Чтобы понять о чём
речь, достаточно посмотреть на JavaScript, язык со слабой типизацией:
Функции
Функция – это часть кода, принимающая аргументы и возвращающая вычисленное значение. Аргумент – это объект, отправляемый в функцию. Аргументом может быть какое-нибудь значение или ссылка на него.
Функции языка программирования Python
В функции используются параметры и их число не ограничено. Число аргументов соответствует параметрам. Функцию можно объявить в любом месте. Она записывается как:
– def <имя функции> (): – после определения функции ставиться двоеточие, аргументы функции заключаются в круглые скобки. После двоеточия идет со следующей строки отступ и тело функции.
Для выхода из функции используется оператор return, который возвращает значения. Если оператор return не указан, то произойдет возврат значения None.
Функции бывают встроенные и пользовательские. В интерпретаторе Python есть ряд часто используемых функций. Они всегда доступны и можно посмотреть документацию с их описанием и примерами применения. Например, при помощи функции input () можно ввести данные с клавиатуры, а при помощи функции print () вывести данные в консоль. Так, print (“Hello, World!”) выводит строку «Hello, World!».
Еще одной интересной функцией является декоратор. Декоратор позволяет расширить возможности функции, не меняя ее кода, при помощи обертывания функции другой функцией.
Существует возможность написать свою собственную функцию для нужных задач. Кроме этого есть много функций, которые существуют в библиотеках Python и также могут быть использованы при написании скриптов. Для этого нужно скачать нужную библиотеку и импортировать ее.
Литература
Итоги
В ООП и ФП есть как свои плюсы, так и свои минусы. Например, на чистом ФП не напишешь красивый и выразительный код на Python, в котором можно легко разобраться, из-за чего преимущества Python сходят на нет. Однако, это не значит, что мы не можем использовать преимущества функционального подхода.
Как можно заметить, если мы пишем код на генераторах, то он получается вполне себе декларативным. Можно сказать, что код на генераторах — в некоторой степени ФП, так элегантно вошедший в Python.
Наша главная задача — писать ясный, понятный, красивый, тестируемый код и выбирать для этого подходящие инструменты. ФП — не самоцель, а лишь средство, как и всегда, чтобы мочь написать ещё лучший код!
Если нашли ошибки, пишите в телеграмме Niccolum или на почту lastsal@mail.ru. Буду рад конструктивной критике.
FreeSpacer – очистка компьютера и дисков от мусора
Deep Anomaly Detection
Из песочницы
Детекция аномалий с помощью методов глубокого обучения
Выявление аномалий (или выбросов) в данных — задача, интересующая ученых и инженеров из разных областей науки и технологий. Хотя выявлением аномалий (объектов, подозрительно не похожих на основной массив данных) занимаются уже давно и первые алгоритмы были разработаны еще в 60-ых годах прошлого столетия, в этой области остается много неразрешенных вопросов и проблем, с которыми сталкиваются люди в таких сферах, как консалтинг, банковский скоринг, защита информации, финансовые операции и здравоохранение.В связи с бурным развитием алгоритмов глубоко обучения за последние несколько лет было предложено много современных подходов к решению данной проблемы для различных видов исследуемых данных, будь то изображения, записи с камер видеонаблюдений, табличные данные (о финансовых операциях) и др.
Инженеры Facebook исключительно заинтересованы в Python, что делает его третьим по популярности языком среди гигантов социальной сети (сразу за C++ и их проприетарным PHP-диалектом Hack). В целом, было сделано более 5000 коммитов к утилитам и сервисам в Facebook, которые управляют инфраструктурой, бинарным распределением, отображением оборудования и операционной автоматизацией.
Простота использования библиотек Python означает, что производственным инженерам не нужно писать или поддерживать слишком много кода, что позволяет им сосредоточиться на улучшениях. Это также гарантирует то, что инфраструктура Facebook способна эффективно масштабироваться.
Согласно сообщению Facebook в 2016 году, Python в настоящее время отвечает за несколько сервисов по управлению инфраструктурой. К ним относятся использование TORconfig для настройки и формирования сетевого коммутатора, FBOSS для CLI коммутатора whitebox и использование Dapper для планирования и выполнения работ по техническому обслуживанию. Facebook опубликовал множество проектов на Python с открытым исходным кодом, написанных для Py3, включая Facebook Ads API и фреймворк Python Async IRCbot. Facebook в настоящее время находится в процессе обновления своей инфраструктуры и обработчиков до Python 3.4, и AsyncIO помогает их инженерам в этом процессе.
Сколько зарабатывают разработчики на Python
По данным блога «Хабр.Карьеры», медианная зарплата Python-разработчика во втором полугодии 2019 года — 115 тысяч рублей. А теперь оценим по уровню специалиста:
- джуниор получает в среднем 54 тысячи рублей;
- мидл — около 100 тысяч;
- сеньор — примерно 160 тысяч. Фактически встречаются разработчики и с окладом 300 тысяч;
- тимлид — в районе 195 тысяч.
Как видите, зарплата по мере роста квалификации увеличивается почти в четыре раза.
Data Science, машинное обучение и искусственный интеллект развиваются очень активно. Неотъемлемая часть этих отраслей — как раз Python и специалисты, владеющие им. К слову, коронакризис слабо затронул это направление, волатильность здесь небольшая.
Для первого знакомства с Python мы проводим бесплатный интенсив. А освоить язык до уровня middle-специалиста поможет факультет Python-разработки GeekBrains. По итогам обучения вы откроете для себя все сферы, где применяют Python: научитесь создавать клиент-серверные, прототипировать мобильные приложения, понимать алгоритмы и основы структур данных, проектировать архитектуру программных проектов, работать с Git. А также получите массу других навыков и умений, необходимых для успешной работы программистом.
Библиотека Xoltar Toolkit
Сразу оговоримся, что библиотека достаточно старая и подходит лишь для Python 2, однако для ознакомления её достаточно. Библиотека Xoltar Toolkit Брина Келлера (Bryn Keller) покажет нам больше возможностей ФП.
Основные возможности ФП Келлер представил в виде небольшого эффективного модуля на чистом Python. Помимо модуля functional, в Xoltar Toolkit входит модуль lazy, поддерживающий структуры, вычисляемые «только когда это необходимо». Множество функциональных языков программирования поддерживают отложенное вычисление, поэтому эти компоненты Xoltar Toolkit предоставят вам многое из того, что вы можете найти в функциональном языке наподобие Haskell.
Ничто в Python не запрещает переприсваивания другого значения имени, ссылающемуся на функциональное выражение. В ФП под именами понимается всего лишь буквенное сокращение более длинных выражений, при этом подразумевается, что одно и то же выражение всегда приводит к одному и тому же результату. Если же уже определенному имени присваивается новое значение, это допущение нарушается.
К несчастью, одно и то же выражение sum2(range(10)) вычисляется к разным результатам в двух местах программы, несмотря на то, что аргументы выражении не являются изменяемыми переменными.
К счастью, модуль functional предоставляет класс Bindings, предотвращающий такое переприсваивание.
Разумеется, реальная программа должна перехватить и обработать исключение BindingError, однако сам факт его возбуждения позволяет избежать целого класса проблем.
Массивы
В массивах «array» хранятся однотипные данные, структурированные определенным образом. Они похожи на списки, но ограничены размером и типом входных данных. Для создания нового массива нужно импортировать библиотеку, которая может с ним работать. Ячейки массива имеют одинаковый размер.
Одномерные и многомерные массивы в Python
Массивы бывают одномерными, двумерными, многомерными. Размерность массива можно изменять, поэтому предусмотрена функции, позволяющие измерить его размер. В массиве можно добавлять и удалять элементы.
В качестве примера приведу синтаксис метода для списка: spisok . append (аргумент), где аргументом могут быть данные любого типа и аргумент является обязательным. Название метода записывается после названия списка через точку «. append». Этот метод принимает только один аргумент и вставляет его в конец списка. Синтаксис других методов аналогичен.
Как пользоваться ADB run
От Python 2 до 3
Во второй версии присутствовали следующие нововведения:
- предложены list comprehension (обсуждали тут), заимствованные из языка Haskell ;
- улучшена работа сборщика мусора в циклах;
- добавлена возможность вызывать методы строковых объектов явно, без импортирования специального модуля string
- и многое другое.
Серия 2.х закончилась на версии 2.7 и больше не будет поддерживаться с января 2020 .
В декабре 2008 вышла версия 3.0 с лозунгом “уменьшение дублирующейся функциональности путем устранения устаревших способов сделать это”. И вот что было сделано в третьей версии:
-
стал функцией вместо оператора
раньше: print "The answer is", 2*2 сейчас: print("The answer is", 2*2)
- переместили в модуль functools, а и возвращают iterator (о них говорили тут)
-
ведет cебя как в 2.х, поэтому нет нужды запоминать поведение обиох объектов. К тому же при индексировании все равно возвращается объект :
>>> range(30) range(0, 10) >>> type(range(30)) <class 'range'>
- , больше не принимают аргумент , вместо него используется ( был также добавлен в версию 2.4).
- заменен на
- Четкое различение между текстовыми (str) и бинарными (bytes) данными вместо Юникода и 8-битные строк.
- Новый синтаксис для наследования метаклассов:
Раньше: Сейчас: class C: __metaclass__ = M ...
class C(metaclass=M): ... ...
- Знак “не равно” <> был заменен на !=.
- и многое другое .
Все эти изменения направлены на унификацию процесса программирования, чтобы разработчики старались писать одинаково.
Одиночные проверки
Внутри условия
можно прописывать и такие одиночные выражения:
x = 4; y = True; z = False if(x): print("x = ", x, " дает true") if(not ): print("0 дает false") if("0"): print("строка 0 дает true") if(not ""): print("пустая строка дает false") if(y): print("y = true дает true") if(not z): print("z = false дает false")
Вот этот оператор
not – это отрицание
– НЕ, то есть, чтобы проверить, что 0 – это false мы
преобразовываем его в противоположное состояние с помощью оператора отрицания
НЕ в true и условие
срабатывает. Аналогично и с переменной z, которая равна false.
Из этих примеров
можно сделать такие выводы:
-
Любое число,
отличное от нуля, дает True. Число 0 преобразуется в False. -
Пустая строка –
это False, любая другая
строка с символами – это True. - С помощью
оператора not можно менять
условие на противоположное (в частности, False превращать в True).
Итак, в условиях
мы можем использовать три оператора: and, or и not. Самый высокий
приоритет у операции not, следующий приоритет имеет операция and и самый
маленький приоритет у операции or. Вот так работает оператор if в Python.
Видео по теме
Python 3 #1: установка и запуск интерпретатора языка
Python 3 #2: переменные, оператор присваивания, типы данных
Python 3 #3: функции input и print ввода/вывода
Python 3 #4: арифметические операторы: сложение, вычитание, умножение, деление, степень
Python 3 #5: условный оператор if, составные условия с and, or, not
Python 3 #6: операторы циклов while и for, операторы break и continue
Python 3 #7: строки — сравнения, срезы строк, базовые функции str, len, ord, in
Python 3 #8: методы строк — upper, split, join, find, strip, isalpha, isdigit и другие
Python 3 #9: списки list и функции len, min, max, sum, sorted
Python 3 #10: списки — срезы и методы: append, insert, pop, sort, index, count, reverse, clear
Python 3 #11: списки — инструмент list comprehensions, сортировка методом выбора
Python 3 #12: словарь, методы словарей: len, clear, get, setdefault, pop
Python 3 #13: кортежи (tuple) и операции с ними: len, del, count, index
Python 3 #14: функции (def) — объявление и вызов
Python 3 #15: делаем «Сапер», проектирование программ «сверху-вниз»
Python 3 #16: рекурсивные и лямбда-функции, функции с произвольным числом аргументов
Python 3 #17: алгоритм Евклида, принцип тестирования программ
Python 3 #18: области видимости переменных — global, nonlocal
Python 3 #19: множества (set) и операции над ними: вычитание, пересечение, объединение, сравнение
Python 3 #20: итераторы, выражения-генераторы, функции-генераторы, оператор yield
Python 3 #21: функции map, filter, zip
Python 3 #22: сортировка sort() и sorted(), сортировка по ключам
Python 3 #23: обработка исключений: try, except, finally, else
Python 3 #24: файлы — чтение и запись: open, read, write, seek, readline, dump, load, pickle
Python 3 #25: форматирование строк: метод format и F-строки
Python 3 #26: создание и импорт модулей — import, from, as, dir, reload
Python 3 #27: пакеты (package) — создание, импорт, установка (менеджер pip)
Python 3 #28: декораторы функций и замыкания
Python 3 #29: установка и порядок работы в PyCharm
Python 3 #30: функция enumerate, примеры использования