{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Объектно-ориентированное программирование и информационная безопасность\n",
    "\n",
    "*Валерий Семенов, Самарский университет*\n",
    "\n",
    "<div style=\"text-align:center\"><img src=\"jupyter-logo.jpg\"></div>\n",
    "\n",
    "<h1 style=\"text-align:center\">Jupyter Notebook и JupyterLab</h1>\n",
    "\n",
    "<div style=\"text-indent:30px; text-align:justify\"><strong>Jupyter Notebook</strong> и <strong>JupyterLab</strong> - это две различные вычислительные среды для работы с документами Jupyter. Обе среды поддерживают несколько языков, включая Python (IPython), Julia, R и другие. Они используются в основном для анализа данных, их визуализации и интерактивных исследовательских вычислений.</div>\n",
    "<div style=\"text-indent:30px; text-align:justify\"><strong>Jupyter Notebook</strong> — это интерактивное окружение в виде электронного блокнота, объединяющее код и его описание и делающее его привлекательным как для начинающих, так и для проектов средней сложности на Python и других языках.</div>\n",
    "<div style=\"text-indent:30px; text-align:justify\"><strong>JupyterLab</strong> — это более продвинутая веб-среда разработки, подходящая для работы над крупными проектами. Она предлагает интегрированную среду с множеством вкладок, панелей и функций и обладает модульным пользовательским интерфейсом.</div>\n",
    "\n",
    "<h1 style=\"text-align:center\">Знакомство с Jupyter Notebook</h1>\n",
    "\n",
    "<div style=\"text-indent:30px; text-align:justify\">Jupyter Notebook чем-то похож на текстовый редактор: есть меню, панель инструментов и поле для работы, которое состоит из <strong>ячеек</strong> (<strong><i>cells</i></strong>). Ячейки могут содержать как код, так и текст (неразмеченный и размеченный). Комментарии в ячейках с кодом должны начинаться со знака <strong>#</strong>.</div>\n",
    "\n",
    "<h2 style=\"text-align:center\">Пример ячейки с кодом:</h2>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "3 0.2\n"
     ]
    }
   ],
   "source": [
    "a = 3  # создаем переменную a и присваиваем ей значение 3\n",
    "b = 0.2 \n",
    "\n",
    "# комментарий 1\n",
    "# комментарий 2\n",
    "\n",
    "print(a, b)  # выводим на экран значения переменных A и B"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<div style=\"text-indent:30px; text-align:justify\">По умолчанию тип ячейки <strong>Code</strong>, это можно увидеть на панели под меню. Чтобы изменить тип ячейки, нужно нажать на стрелочку вниз и выбрать нужный вариант. Всего вариантов три: <strong>Code</strong>, <strong>Markdown</strong>, <strong>Raw</strong>.</div>\n",
    "\n",
    "<div style=\" margin-left:50px\">\n",
    "<li style=\"text-align:justify\"> <strong>Code</strong> — ячейка с кодом Python;</li>\n",
    "<li style=\"text-align:justify\"> <strong>Markdown</strong> — ячейка с размеченным текстом (почитать про язык разметки Markdown можно <a href=\"https://jupyter-notebook.readthedocs.io/en/latest/examples/Notebook/Working%20With%20Markdown%20Cells.html\"><strong>здесь</strong></a> и <a href=\"http://nestacms.com/docs/creating-content/markdown-cheat-sheet\"><strong>здесь</strong></a>);</li>\n",
    "<li style=\"text-align:justify\"> <strong>Raw</strong> — неразмеченный «сырой» текст, без курсива/полужирного шрифта.</li>\n",
    "</div>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<h2 style=\"text-align:center\">Примеры ячеек с размеченным текстом</h2>\n",
    "\n",
    "<h3 style=\"text-align:center\">Заголовки разных уровней</h3>\n",
    "\n",
    "<div style=\"font-style:italic; text-decoration:underline\">На входе:</div>\n",
    "\n",
    "<span style=\"color:blue; font-weight:bold\"># Заголовок 1</span></br>\n",
    "<span style=\"color:blue; font-weight:bold\">## Заголовок 2</span></br>\n",
    "<span style=\"color:blue; font-weight:bold\">### Заголовок 3</span>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<div style=\"font-style:italic; text-decoration:underline; margin-bottom:-30px\">На выходе:</div>\n",
    "\n",
    "# Заголовок 1\n",
    "## Заголовок 2\n",
    "### Заголовок 3"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<h3 style=\"text-align:center\">Курсивный, полужирный, зачеркнутый текст</h3>\n",
    "\n",
    "<div style=\"font-style:italic; text-decoration:underline\">На входе:</div>\n",
    "\n",
    "<span style=\"color:blue; font-weight:bold\">&#10059;Курсивный&#10059;, &nbsp;&#10059;&#10059;полужирный&#10059;&#10059;, &nbsp;&lt;s&gt;зачеркнутый текст&lt;/s&gt;</span>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<div style=\"font-style:italic; text-decoration:underline\">На выходе:</div>\n",
    "\n",
    "*Курсивный*, **полужирный**, <s>зачеркнутый текст</s>  "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<h3 style=\"text-align:center\">Списки</h3>\n",
    "\n",
    "<h3 style=\"text-align:center\">Ненумерованный список</h3>\n",
    "\n",
    "<div style=\"font-style:italic; text-decoration:underline\">На входе:</div>\n",
    "\n",
    "<span style=\"color:blue; font-weight:bold\">* Пункт 1</span></br>\n",
    "<span style=\"color:blue; font-weight:bold\">* Пункт 2</span></br>\n",
    "<span style=\"color:blue; font-weight:bold\">* Пункт 3</span>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<div style=\"font-style:italic; text-decoration:underline\">На выходе:</div>\n",
    "\n",
    "* Пункт 1\n",
    "* Пункт 2\n",
    "* Пункт 3"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<h3 style=\"text-align:center\">Нумерованный список</h3>\n",
    "\n",
    "<div style=\"font-style:italic; text-decoration:underline\">На входе:</div>\n",
    "\n",
    "<span style=\"color:blue; font-weight:bold\">1. Во-первых, ...</span></br>\n",
    "<span style=\"color:blue; font-weight:bold\">2. Во-вторых, ...</span></br>\n",
    "<span style=\"color:blue; font-weight:bold\">3. В-третьих, ...</span>\n",
    "    \n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<div style=\"font-style:italic; text-decoration:underline\">На выходе:</div>\n",
    "\n",
    "1. Во-первых,...\n",
    "2. Во-вторых,...\n",
    "3. В-третьих,..."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<h3 style=\"text-align:center\">Формулы</h3>\n",
    "\n",
    "<div style=\"text-indent:30px; text-align:justify\">Те, кто знаком с <a href=\"https://ru.wikipedia.org/wiki/LaTeX\"><strong>LaTeX</strong></a>, могут красиво оформлять формулы, используя синтаксис, принятый в LaTeX (наличие установленного на компьютере LaTeX не требуется, текст компилируется в самом Jupyter Notebook):</div>\n",
    "\n",
    "<div style=\"font-style:italic; text-decoration:underline\">На входе:</div>\n",
    "\n",
    "<pre style=\"color:blue; font-weight:bold\">$$(x+y)^2 = x^2 + 2xy + y^2$$</pre>\n",
    "\n",
    "<pre style=\"color:blue; font-weight:bold\">$$\\Delta = I_{2018} - I_{2017}$$</pre>\n",
    "\n",
    "<pre style=\"color:blue; font-weight:bold\">$$P(A|B) = \\frac{P(A \\cap B)}{P(B)}$$</pre>\n",
    "\n",
    "<pre style=\"color:blue; font-weight:bold\">$$\\sin(\\alpha)^2 + cos(\\alpha)^2 = 1$$</pre>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<div style=\"font-style:italic; text-decoration:underline\">На выходе:</div>\n",
    "\n",
    "$$(x+y)^2 = x^2 + 2xy + y^2$$\n",
    "\n",
    "$$\\Delta = I_{2018} - I_{2017}$$\n",
    "\n",
    "$$P(A|B) = \\frac{P(A \\cap B)}{P(B)}$$\n",
    "\n",
    "$$\\sin(\\alpha)^2 + cos(\\alpha)^2 = 1$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<h3 style=\"text-align:center\">Гиперссылки</h3>\n",
    "\n",
    "<div style=\"font-style:italic; text-decoration:underline\">На входе:</div>\n",
    "\n",
    "<pre style=\"color:blue; font-weight:bold\">[Jupyter](http://jupyter.org)</pre>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<div style=\"font-style:italic; text-decoration:underline\">На выходе:</div>\n",
    "\n",
    "[Jupyter](http://jupyter.org)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<h3 style=\"text-align:center\">Картинки</h3>\n",
    "\n",
    "<h3 style=\"text-align:center\">Первый способ</h3>\n",
    "\n",
    "<pre style=\"color:blue; font-weight:bold\">![Название](Python.png)</pre>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "![Название](Python.png) "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<h3 style=\"text-align:center\">Второй способ</h3>\n",
    "\n",
    "Синтаксис, как в html, кто знаком:\n",
    "\n",
    "<pre style=\"color:blue; font-weight:bold\">&lt;img src =\"Python.png\" alt =\"Test picture\"&gt;</pre>\n",
    "    \n",
    "<img src =\"Python.png\" alt =\"Test picture\">"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<h3 style=\"text-align:center\">Горячие клавиши</h3>\n",
    "<div style=\"text-indent:30px; text-align:justify\">В Jupyter Notebook есть свои горячие клавиши, которые позволяют добавлять или удалять ячейки, менять их тип и так далее. Чтобы работать в режиме горячих клавиш, нужно выйти из редактирования ячейки (нажать на клавишу <strong>Esc</strong>), а потом набрать нужную комбинацию клавиш. Чтобы вернуться в режим редактирования ячейки, можно кликнуть на нее два раза или, выбрав ее, нажать клавишу <strong>Enter</strong>.</div>\n",
    "<div style=\"text-indent:30px; text-align:justify; margin-top:20px\">Все полезные комбинации клавиш можно найти в меню (<strong>Help &#9658; Show Keyboard Shortcuts...</strong>)."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<h3 style=\"text-align:center\">Если потерялись</h3>\n",
    "<div style=\"text-indent:30px; text-align:justify\">И, наконец, как найти, куда Jupyter сохраняет ноутбуки, то есть файлы с расширением <strong>.ipynb</strong>. Можно импортировать модуль <strong>os</strong> и узнать текущую рабочую папку (current working directory) — в ней будут лежать ноутбуки.</div>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'C:\\\\Users\\\\valer\\\\! ЛЕКЦИИ = 1 семестр\\\\01\\\\NEW'"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import os\n",
    "os.getcwd()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<div style=\"text-indent:30px; text-align:justify\">С помощью инструкции <strong>import</strong> мы будем импортировать любые модули или библиотеки Python, а также отдельные функции при необходимости. Кроме того, можем импортировать текст <a href=\"https://ru.wikipedia.org/wiki/%D0%94%D0%B7%D0%B5%D0%BD_%D0%9F%D0%B0%D0%B9%D1%82%D0%BE%D0%BD%D0%B0\"><strong>философии Python</strong></a>, которая имеет название <strong>\"The Zen of Python\"</strong>:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The Zen of Python, by Tim Peters\n",
      "\n",
      "Beautiful is better than ugly.\n",
      "Explicit is better than implicit.\n",
      "Simple is better than complex.\n",
      "Complex is better than complicated.\n",
      "Flat is better than nested.\n",
      "Sparse is better than dense.\n",
      "Readability counts.\n",
      "Special cases aren't special enough to break the rules.\n",
      "Although practicality beats purity.\n",
      "Errors should never pass silently.\n",
      "Unless explicitly silenced.\n",
      "In the face of ambiguity, refuse the temptation to guess.\n",
      "There should be one-- and preferably only one --obvious way to do it.\n",
      "Although that way may not be obvious at first unless you're Dutch.\n",
      "Now is better than never.\n",
      "Although never is often better than *right* now.\n",
      "If the implementation is hard to explain, it's a bad idea.\n",
      "If the implementation is easy to explain, it may be a good idea.\n",
      "Namespaces are one honking great idea -- let's do more of those!\n"
     ]
    }
   ],
   "source": [
    "import this"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
