Программирование на языке Python. Среды разработки PyCharm и Jupiter Notebook
Рассмотрены основные практические навыки работы в среде PyCharm. В качестве базовых элементов работы в среде PyCharm даны рекомендации по установке среды PyCharm, началу работы, правилам выполнения программы, дополнительным вариантам выполнения команд, переименованию переменных и базовой настройке IDE PyCharm. Приведено описание и рассмотрены основные правила использования среды разработки Jupiter Notebook, которая, в первую очередь, ориентирована на программирование средствами Python. Среда Jupiter Notebook позволяет сразу видеть результаты выполнения программного кода, а также обеспечивает работу с отдельными его фрагментами. Среда разработки позволяет отдельно загрузить файл в память, отдельно проверить его содержимое и отдельно его обработать.
Для студентов вузов, изучающих дисциплину «Алгоритмические языки и программирование» укрупненного направления подготовки 09.03.00 – «Информатика и вычислительная техника», может быть использована в качестве практического руководства при изучении основ современных информационных технологий.
1. Установка и запуск среды PyCharm
Установка среды PyCharm
Начало работы
Выполнение программы
Дополнительные варианты выполнения команд
Переименование переменных
Базовая настройка IDЕ PyCharm
Пример программы
2. Инструкция по началу работы в среде PyCharm
На каких языках поддерживается PyCharm?
На каких платформах я могу запустить PyCharm?
Шаг 1. Откройте/создайте проект в PyCharm
Шаг 2. Ознакомьтесь с интерфейсом
Шаг 3. Настройте свою среду
Шаг 4. Сделайте свой код аккуратным
Шаг 5. Создание кода
3. Перевод и назначение инструментов среды PyCharm
Information
Окно среды
Панель проверки
Панель Problems
Панель Terminal
Панель Python Packages
Панель Python Console
Верхняя правая часть окна среды
Верхняя панель
Меню File
Меню Edit
Меню View
Меню Navigate
Меню Code
Меню Refactor
Меню Run
Меню Tools
Меню VCS
Меню Window
Меню Help
4. Горячие клавиши PyCharm
5. Основные элементы и структура программы на языке Python
Комментарии
Литералы
Знаки пунктуации. Базовые операторы
Арифметические операторы
Операторы сравнения
Операторы присваивания
Побитовые операторы
Логические операторы
Операторы принадлежности
Операторы тождественности
Приоритет выполнения операторов
Ленивые логические выражения
Идентификаторы
Синтаксическая структура программы
Инструкции ввода и вывода данных
Модуль matc
6. Отладка
Понятие об отладке программ
Причины и типы ошибок
Способы и средства отладки
Отладка программ в среде PyCharm
7. Руководство PEP 8 по написанию кода
Внешний вид кода
Пробелы в выражениях и инструкциях
Негласная договоренность об именах
Комментарии
Философия программирования
8. Наиболее часто реализуемые действия в среде PyCharm
Назначение меню Help/Find Action
Установка Python
Импорт/добавление существующего файл Python в проект PyCharm
Quick фиксы (действия по быстрому исправлению кода) в PyCharm
Навигация с помощью курсора
Настройка собственного стиля кода
Настройка PyCcarm + GitHub
Просмотр структуры модуля
9. Программирование на Python в Jupyter Notebook
Общие сведения о Jupyter Notebook
Установка Jupyter Notebook
Терминология Jupyter Notebook
Запуск Jupyter
Создание и переименование папки
Создание и сохранение блокнота
Интерфейс Jupyter Notebook
Горячие клавиши Jupyter Notebook
Получение справочной информации
Панель инструментов
Строка меню Jupyter Notebook
Приемы документирования в Jupyter Notebook
Приемы форматирования текста
Добавление таблиц
Вставка ссылок на Интернет-ресурсы
Вставка медиаконтента
Работа с формулами
Дополнительные возможности кодовых ячеек
Установка сторонних пакетов в Jupyter Notebook
Комментирование кода
Вывод значений
Магические команды
Интерактивное управление с помощью виджетов
Дополнительные настройки Jupyter Notebook
Расширения
Изменение темы оформления
Управление папками и ноутбуками в Jupyter
Краткий словарь терминов Python
© 2002-2023 Научно-техническое издательство
«Горячая линия – Телеком»
Оплата банковской картой онлайн
NeilAlishev / Instruction.md
Это очень частая проблема, которая появляется на некоторых ОС. Дело в том, что среда разработки запустилась, но браузер не открылся автоматически.
Как решить эту проблему?
В первую очередь, попробуйте запустить Anaconda Navigator с правами администратора (правой кнопкой мыши нажать на иконку Anaconda Navigator, во всплывающем меню выбрать «Запуск от имени администратора»). Теперь, запустите Jupyter Notebook.
Если все равно не открывается окно браузера, выполните инструкции описанные далее.
- Запустите программу, которая называется CMD.exe Prompt (может также называться Anaconda Prompt), нажав на Launch. Эта программа находится тут же, в Anaconda Navigator, рядом с программой Jupyter Notebook. После нажатия на Launch, должна открыться командная строка. Если этой программы нет в Anaconda Navigator, можно найти программу «Anaconda Prompt» на компьютере с помощью обычного поиска по программам.
- В этой командной строке мы должны выполнить команду jupyter notebook list (если команда не сработала, попробуйте сначала выполнить команду jupyter notebook list -V , а потом уже команду jupyter notebook list )
- Вышеупомянутая команда показывает тот адрес, по которому мы сможем получить доступ к нашей среде разработки. Адрес имеет вид: http://localhost:8888/?token=СЛУЧАЙНАЯ_ПОСЛЕДОВАТЕЛЬНОСТЬ_БУКВ_И_ЦИФР
Вам необходимо скопировать этот адрес, вставить его в адресную строку вашего браузера и перейти на эту страницу. После этого откроется среда разработки Jupyter Notebook. Можно работать.
Чтобы скопировать адрес из командной строки Windows, необходимо кликнуть правой кнопкой мыши в любом месте командной строки. В выпадающем меню надо выбрать пункт «пометить». После этого, можно будет выделить курсором интересующий нас адрес. После того, как адрес будет выделен, надо нажать на клавишу Enter на вашей клавиатуре. Готово — адрес скопирован в буфер обмена. Можно его вставлять в адресную строку браузера.
ОС Linux или Mac OS: Надо просто открыть терминал и там написать jupyter notebook Полученный адрес надо скопировать в адресную строку браузера.
P.S. Если Jupyter Notebook так и не запустился, можно использовать среду разработки PyCharm. Эта среда разработки ничуть не хуже, чем Jupyter Notebook, и тоже отлично нам подойдет.
Настройка сочетаний клавиш в ipython notebook
Задача следующая: в ipython notebook необходимо добавить сочетание клавиш для конкретного действия из меню. Например, требуется назначить клавиши для перемещения ячейки вниз и вверх. В справке, показываемой в ipython notebook по кнопке H , сочетания клавиш для этих действий не обнаружено. Найденное в интернете сочетание клавиш Ctrl + m , j не работает.
Отслеживать
Timofei Bondarev
задан 15 апр 2015 в 10:48
Timofei Bondarev Timofei Bondarev
9,366 4 4 золотых знака 40 40 серебряных знаков 56 56 бронзовых знаков
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Если требуется добавить новое сочетание клавиш для какого-либо действия в ipython-notebook , достаточно добавить соответствующую запись в файл /static/custom/custom.js своего профиля, где — это путь к настройкам профиля ipython.
По умолчанию ipython запускается под стандартным профилем, настройки которого обычно расположены по адресу ~/.ipython/profile_default/ .
Открываем соответствующий файл custom.js в любом редакторе и добавляем действие при загрузке ipython notebook (для примера назначим клавиши Shift-j и Shift-k командам «опустить ячейку» и «поднять ячейку» соответственно):
$([IPython.events]).on('app_initialized.NotebookApp', function() < IPython.keyboard_manager.command_shortcuts.add_shortcut( 'shift-j', 'ipython.move-selected-cell-down'); IPython.keyboard_manager.command_shortcuts.add_shortcut( 'shift-k', 'ipython.move-selected-cell-up'); >);
В первой строке мы добавили анонимную функцию, которая будет запущена при старте ipython notebook .
В ней происходит добавление двух сочетаний клавиш для стандартных действий с помощью метода add_shortcut объекта IPython.keyboard_manager.command_shortcuts .
В метод add_shortcut в простейшем случае передаются две строки. Первая соответствует сочетанию клавиш, а вторая отвечает за действие по этому сочетанию.
Объект IPython.keyboard_manager.command_shortcuts отвечает за сочетания клавиш в командном режиме. Если требуется добавить сочетание в режим редактирования, используйте объект IPython.keyboard_manager.edit_shortcuts
Список всех стандартных действий (и соответствующих им строк) я нашёл только в исходном коде jupyter . Важно помнить, что названия стандартных действий должны иметь префикс ipython. , как в примере выше.
Как я понял, отсутствие официальной документации аргументируется тем, что IPython JavaScript API постоянно изменяется.
Также существует расширенное создание действий на сочетание клавиш: вторым аргументом функции add_shortcut вместо строки можно передать объект со следующими полями:
- help : строка, которая будет показываться в справке по всем сочетаниям клавиш.
- help_index : строка (по умолчанию zz ), в соответствии с которой осуществляется сортировка сочетаний клавиш в справке.
- handler : функция, принимающая один аргумент (объект event ), описывающая действие по сочетанию клавиш.
Если эта функция возвращает false , то обработка сочетания клавиш будет на этом завершена, а также не будет вызвана обработка по умолчанию (обычно и возвращают false ). Подробнее в документации по обработке событий jQuery.
Посмотрим на примере, как это выглядит:
IPython.keyboard_manager.command_shortcuts.add_shortcut('shift-j', < help : 'move cell down', help_index : 'zz', handler : function(event) < IPython.notebook.move_cell_down(); return false; >> );
Это второй, известный мне, и более общий способ добавить действие по сочетанию клавиш.
- Определение списка стандартных действий в исходном коде программы
- Справка по созданию своих действий на сочетания клавиш
- Реализация стандартных действий в исходном коде программы
- Добавление сочетаний клавиш в исходном коде программы
- Небольшая статья о JavaScript API для ipython notebook
ipywidgets: создаем графические приложения на базе Jupyter
Jupyter Notebook – это крайне удобный инструмент для разработчика. Являясь дата-инженером, я использую его как основную IDE. Единственным его ограничением является невозможность создания графических форм классическими методами, принятыми в Python. В этой статья я хочу поделиться лучшим способом решить эту проблему.
Основным достоинством Jupyter Notebook является то, что каждая ячейка представляет из себя отдельную программу, которая способна исполниться, как независимо от других ячеек, так и взять переменные из уже выполненных ячеек. Данное достоинство позволило стать юпитеру самым удобным инструментом для аналитика данных. И дальнейшее развитие этого инструмента именно в таком ключе привело к созданию библиотеки ipywidgets, основная задача которой создать в рамках ноутбуков инструменты визуализации и интерактивности. Предоставляя инструменты в виде элементов управления (кнопок, чекбоксов, слайдеров и т.д.), контейнеров для медиа и инструмента для создания графиков на основе Matplotlib, ipywidgets стал лучшим инструментом для визуализации работы с данными. Однако, ipywidgets – это не просто инструмент для создания интерактивности в ячейках, но и полноценная система для построения клиентских приложений внутри Jupyter Notebook, которая во многом схожа с WPF или Swing. Именно эту сторону библиотеки я постараюсь сегодня раскрыть.
Для демонстрации возможностей ipywidgets я создал совсем небольшое приложение состоящее всего из трех форм:
Первая форма – это главное меню, с которого можно перейти на две другие.
Вторая форма – форма на которой можно посмотреть список товаров, которые есть в базе данных. В базе данных сохраняется только пара с именем какого-то продукта и количества его на складе. В качестве БД, я использовал Redis, развернутый в докере.
На этой форме можно увидеть очень серьезную проблему ipywidgets – это отсутствие чего-то вроде GridView. Из-за этого создавать красивые табличные представления стандартными инструментами практически невозможно (справедливости ради есть второй, более сложный, но и более внешне привлекательный способ решения этой задачи с точки зрения эстетической красоты. Он описан по ссылке. Однако, на практике в промышленных задачах использовался только первый способ – выравнивание с помощью f-string).
Также можно заметить, что на форме нет кнопки «Назад». Это еще одна проблема ipywidgets, о которой я расскажу чуть позже. Можно заметить, что данная форма открылась в отдельной вкладке. Это один из наиболее удобных способов управлять связанными формами.
Третья форма – это форма, на которой можно ввести количество товара и его количество, после чего сохранить эту информацию в БД. Приложение сообщит о том, что сохранение прошло успешно сообщением под кнопкой “Сохранить”.
Как создать такое приложение – я и расскажу в этой статье, а также немного поделюсь опытом коммерческой разработки крупного приложения на этой технологии.
Шаг 1. Установка библиотек и создание первой формы
Для работы с ipywidgets понадобится всего две библиотеки: сама ipywidgets и оболочка IPython. Они устанавливаются через pip install.
Нужно понимать, что для запуска нужен Jupyter Notebook. Без него приложения работать не будут и программа просто выведет в консоли кортеж, в котором находятся объекты элементов на первой форме:
Установить Jupyter, можно через pip install или в докере, или с помощью плагина для VS Code.
Перед началом разработки, стоит решить – что будет использоваться в качестве контейнера форм. Как я написал выше, очень удобно использовать вкладки (класс Tab), однако, они могут стать большой проблемой в случае, если в приложении предполагается большое количество переходов между формами и возвратов на предыдущую форму. Связано это с тем, что по сути все вкладки хранятся в кортеже и для того, чтобы добавить новую вкладку, нужно пересоздавать кортеж с новой (об этом чуть позже) и точно так же пересоздавать кортеж без удаляемой вкладки, которую еще нужно найти в кортеже, что практически невозможно при большом количестве вкладок. Есть альтернативный вариант с использованием представлений HBox или VBox. Несмотря на то, что этот подход наиболее похож на подходы, используемые в Swing и WinForms, он порождает проблему с возвратом на предыдущую форму, если она должна хранить какое-то состояние. Именно это является проблемой реализации кнопки «Назад». На практике, в больших приложениях дебаг этой кнопки с очень большой вероятностью превратиться в ад. Именно поэтому я в своем опыте и данном приложении использую вкладки, так как это наиболее простой способ перемещаться на более старые формы. Более того, если вкладка не будет закрыта, то ее состояние сохранится до конца работы приложения, даже если были открыты несколько таких форм в других вкладках.
Перейдем к созданию формы главного меню.
1) Импортируем необходимые библиотеки:
import ipywidgets as widgets from IPython.display import display import redis
2) Для начала нам необходимо создать нашу систему вкладок:
Она представляет из себя виджет Tab, который содержит параметр children и который является кортежем, содержащим все существующие вкладки. В данном приложении при создании объекта Tab мы не указываем ни одной вкладки.
Передаваемый параметр layout определяет размещение и размеры объекта. В данном случае задается ширина вкладки.
3) Кнопки создаются следующим образом:
list_btn = widgets.Button(description=»Просмотр товаров»)
На кнопку необходимо повесить обсервер, который будет реагировать на нажатие на кнопку:
Это делается с помощью метода on_click, ему передается другой метод: в данном случае это метод, отрисовывающий требуемую форму. Необходимо учесть, что в указанный метод передается *args.
def __list_form(self, *args)
Аналогичным способом создаем и вторую кнопку.
1) Для отображения всех элементов на форме в едином контейнере, необходимо этот контейнер создать, делается это следующим образом:
box = widgets.VBox([ widgets.Label("Выберите пункт меню:"), list_btn, add_btn ])
Контейнер представляет из себя объект класса, содержащий в себе список виджетов. Можно заметить, что прямо внутри создания контейнера был создан Label.
2) Теперь необходимо поместить контейнер во вкладку:
self.__tabs.children = [box] self.__tabs.set_title(0, "Главное меню")
Для этого достаточно просто заполнить параметр children, который был оставлен, пустым списком, содержащим первую форму. Методом set_title задается порядок отображения текущей вкладки и ее имя.
3) Напоследок необходимо отобразить систему кладок на экране с помощью
IPython.display.display() display(self.__tabs)
Отображение происходит один раз на все время работы приложения.
Шаг 2. Создание формы просмотра данных из БД
Как я писал выше, в ipywidgets нет способа создать красивое табличное представление без использования сторонних библиотек. Для этих целей обычно используется виджет SelectMultiple, который построчно выводит элементы списка. У виджета нет своей «шапки», поэтому ее придется создать как обычную строку первым элементом списка.
product_list = [«Товар | Количество»]
А сами элементы списка заполняются из Redis. Главное помнить, что каждая строка в виджете – это элемент списка. Сам виджет создается следующим образом:
Дальше аналогично нужно создать контейнер, но способ помещения контейнера в систему вкладок представляет из себя некий «костыль». Как я писал выше, в параметре children хранится кортеж, а кортежи в Python, как и элементы в них – неизменяемы. Поэтому необходимо преобразовать текущий кортеж в список, добавить к нему новый контейнер и снова привести все к кортежу. Также, чтобы данная вкладка не заменяла меню, необходимо установить ей индекс, следующий за индексом формы, который ее вызывает. Если указать меньший, то контейнер на форме с этим индексом перезапишется, а если больший, то приложение выдаст ошибку из-за выхода за границы кортежа и не откроет форму.
self.__tabs.children = tuple(list(self.__tabs.children) + [box]) self.__tabs.set_title(1, "Просмотр товаров")
Шаг 3. Создание формы добавления в БД
Заключительной формой станет форма добавления данных в БД. Она состоит из двух textbox, кнопки и изначально скрытого лейбла.
Textbox представляет из себя объект Text. Параметр description задает текстовый лейбл, который будет располагаться слева от поля. Если текст лейбла обрезается, то в параметре layout можно увеличить ширину виджета:
Таким же способом можно создать textbox и для ввода количества, однако, числовое значение и его имеет смысл защитить от ввода чего-либо, кроме цифр, точки и минуса. Для этого в ipywidgets есть виджет FloatText. Его создание выглядит аналогичным образом:
Стоит отметить, что так же существует виждет IntText, кроторый запрещает ввод чисел с плавающей точкой и виджеты BoundedIntText и BoundedFloatText, которые отличаются от стандартных тем, что позволяют указать допустимый диапазон.
С создание кнопок уже происходило ранее, поэтому последним интересным элементом будет создание изначально скрытого элемента. Каждый виджет содержит параметр layout, который в свою очередь содержит флаг visibility. Для того, чтобы элемент был скрыт, его необходимо указать как hidden. Чтобы показать элемент, нужно указать параметр visible – соответственно.
save_label = widgets.Label(value="Сохранено!") save_label.layout.visibility = "hidden" save_label.layout.visibility = "visible"
Заключение
В данной статье я попытался рассказать о библиотеке ipywidgets как о средстве для создания графических приложений на базе Jupyter Notebook. Эту концепцию я продемонстрировал, создав приложение, которое выполняет две конкретные задачи и обращается к базе данных. Также я постарался рассказать о базовых виджетах, которые содержаться в библиотеке. Но их значительно больше – полный список можно посмотреть по ссылке. Кроме того, библиотека имеет поддержку HTML и CSS, что делает возможности по дизайну практически безграничными и дает возможность переопределять и создавать новые виджеты. В интернете можно найти кастомные виджеты практически на любые задачи, в том числе и красивые табличные представления.
Полный код программы
class App(): def __init__(self): self.__tabs = widgets.Tab(layout=) def run(self): list_btn = widgets.Button(description="Просмотр товаров") list_btn.on_click(self.__list_form) add_btn = widgets.Button(description="Добавление товара") add_btn.on_click(self.__add_form) box = widgets.VBox([ widgets.Label("Выберите пункт меню:"), list_btn, add_btn ]) self.__tabs.children = [box] self.__tabs.set_title(0, "Главное меню") display(self.__tabs) def __list_form(self, *args): pool = redis.ConnectionPool(host='localhost', port=6379, db=0) r = redis.Redis(connection_pool=pool) product_list = ["Товар | Количество"] for key in r.scan_iter(): key = key.decode('utf-8') quantity = r.get(key).decode('utf-8') product_list.append(key+ " |" + quantity) sm = widgets.SelectMultiple(options=product_list) box = widgets.VBox([ widgets.Label("Список товаров:"), sm ]) self.__tabs.children = tuple(list(self.__tabs.children) + [box]) self.__tabs.set_title(1, "Просмотр товаров") def __add_form(self, *args): name_box = widgets.Text(description='Название: ') quantity_box = widgets.FloatText(description='Количество: ') save_btn = widgets.Button(description='Сохранить') def __on_save_btn_click(*args): pool = redis.ConnectionPool(host='docker.for.windows.localhost', port=6379, db=0) r = redis.Redis(connection_pool=pool) r.set(name_box.value, quantity_box.value) save_label.layout.visibility = "visible" save_btn.on_click(__on_save_btn_click) save_label = widgets.Label(value="Сохранено!") save_label.layout.visibility = "hidden" box = widgets.VBox([ widgets.Label("Заполните поля:"), name_box, quantity_box, save_btn, save_label ]) self.__tabs.children = tuple(list(self.__tabs.children) + [box]) self.__tabs.set_title(1, "Добавление товаров")