{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Введение в Python"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Работа с кодом\n",
    "\n",
    "### Запуск интерпретатора через консоль \n",
    "\n",
    "```python[3][.v]```\n",
    "\n",
    "### Запуск исполняемого скрипта через консоль \n",
    "\n",
    "\n",
    "```python3  my_first_script.py [-arg_1]```\n",
    "\n",
    "## IDE (Integrated Development Environment)\n",
    "* [PyCharm](https://www.jetbrains.com/ru-ru/pycharm/) \n",
    "\n",
    "\n",
    "## CE (Code Editor)\n",
    "* [VSCode](https://code.visualstudio.com) \n",
    "* [Atom](https://atom.io/)\n",
    "* [Sublime](https://www.sublimetext.com/)\n",
    "\n",
    "\n",
    "## Тетрадки с кодом\n",
    "* [Jupyter Notebook](https://jupyter.org/)\n",
    "* [Google Cloud Colaboratory](https://colab.research.google.com/)\n",
    "\n",
    "### Стиль оформления кода [pep8](https://peps.python.org/pep-0008/)*\n",
    "\n",
    "*Самое главное из PEP8:*  \n",
    "- отступ – 4 пробела\n",
    "- длина строки < 80 символов\n",
    "- переменные: var_recommended\n",
    "- константы: CONST_RECOMMENDED\n",
    "\n",
    "*(если Вы хороший человек)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [],
   "source": [
    "import this"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Стандартные типы данных\n",
    "https://docs.python.org/3/library/stdtypes.html"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Целое число integer -> int\n",
    "# a = int(7)\n",
    "a = 7\n",
    "\n",
    "# Число с плавающей запятой -- float -> float\n",
    "# b = float(3.14)\n",
    "b = 3.14\n",
    "\n",
    "# Текстовая последовательность -- string -> str\n",
    "# c = str(\"Текст 1\")\n",
    "с = \"Текст 1\"\n",
    "d = \"Текст 2\"\n",
    "e = \"\"\"Текст 3 может быть длинным и\n",
    "можно переносить его на новые строки\n",
    "можно переносить его на новые строки\n",
    "можно переносить его на новые строки\n",
    "можно переносить его на новые строки\"\"\"\n",
    "\n",
    "# Логичекая переменная -- boolean -> bool\n",
    "# f = bool(1)\n",
    "f = True\n",
    "\n",
    "\n",
    "# Списки list -> list\n",
    "# g = list(\"123456789\")\n",
    "g = [1, 2, 3, 4, 5, 6, 7, 8, 9]\n",
    "\n",
    "# Множества и словари -> set, dict\n",
    "# h = set([\"A\", \"B\", \"C\"])\n",
    "h = {\"A\", \"B\", \"C\"}\n",
    "\n",
    "# i = dict(((\"key1\", 1), (\"key2\", 2), (\"key3\", 3)))\n",
    "i = {\"key1\": 1, \"key2\": 2, \"key3\": 3}\n",
    "\n",
    "# И многие другие..."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Аннотации типов\n",
    "a: int = 1\n",
    "b: float = 3.14\n",
    "c: str = \"qwerty\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'0.30000000000000004 > 0.3, 0.7999999999999999 < 0.80'"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# строки форматирования\n",
    "# https://docs.python.org/3/library/string.html#formatstrings\n",
    "\n",
    "f\"{0.2 + 0.1} > {0.3}, {0.7+0.1} < {0.7+0.1:.2f}\""
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Задания\n",
    "\n",
    "\n",
    "### Задание 1. Таблица умножения\n",
    "Вывести на экран таблицу умножения. Обратите внимание, что первая строка и столбец - заголовки.\n",
    "```\n",
    "    1  2  3  4  5  6  7  8  9 10\n",
    " 1  1  2  3  4  5  6  7  8  9 10\n",
    " 2  2  4  6  8 10 12 14 16 18 20\n",
    " 3  3  6  9 12 15 18 21 24 27 30\n",
    " 4  4  8 12 16 20 24 28 32 36 40\n",
    " 5  5 10 15 20 25 30 35 40 45 50\n",
    " 6  6 12 18 24 30 36 42 48 54 60\n",
    " 7  7 14 21 28 35 42 49 56 63 70\n",
    " 8  8 16 24 32 40 48 56 64 72 80\n",
    " 9  9 18 27 36 45 54 63 72 81 90\n",
    "10 10 20 30 40 50 60 70 80 90 100\n",
    "```\n",
    "\n",
    "Отменить принудительный перевод каретки на новую строку можно, указав параметр `end=''`  \n",
    "`print(str, end='')`"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# code here"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Задание 2. \n",
    "Создать строку из 1000 символов `A`. Преобразовать эту строку по следующему правилу:\n",
    "* `AAA` заменить на `B`\n",
    "* `BBB` заменить на `C`\n",
    "* `CCC` заменить на `A`"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [],
   "source": [
    "# code here"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Задание 3. Генерация\n",
    "Сгенерировать списки из 1000 элементов:\n",
    "- **rnd**: список случайных целых чисел от -100 до 100\n",
    "- **uni**: список, состоящий из целых значение из равномерного распределения [50, 100] \n",
    "- **gauss_1**: список, заполненный значениями из нормальных распределений с параметрами $\\mu=0, \\sigma^2=1$\n",
    "- **gauss_2**: список, заполненный значениями из нормальных распределений с параметрами $\\mu=50, \\sigma^2=81$\n",
    "\n",
    "https://docs.python.org/3/library/random.html#module-random"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from random import gauss, uniform, random"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Задание 4. Удаляем выбросы\n",
    "Напишите функцию, создающую копию списка с исключенными из него n наибольшими и наименьшими значениями и возвращающую ее в качестве результата. Порядок следования элементов в измененном списке не обязательно должен в точности совпадать с источником.  \n",
    "Продемонстрируйте работу функции на созданных ранее списках.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Задание 5. Палиндром\n",
    "Напишите функцию для проверки, является ли фраза палиндромом."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Задание 6. Избавляемся от дубликатов\n",
    "Прочитать файл `double.txt`. Вывести его содержимое. Затем вывести все уникальные слова.\n",
    "\n",
    "https://docs.python.org/3/library/functions.html#open"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Задание 7. Мода \n",
    "Прочитать файл `mode.txt`. Удалить все знаки препинания. Найти самое \"модное\" слово. "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Задание 8. Мода-2 \n",
    "В том же файле найти топ-5 самых часто встречаемых слова, кроме предлогов и союзов. Вывести эти слова и их частоту."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Задание 9. CSV-файл\n",
    "Прочитайте \"data.csv\". Для каждой колонки выведите минимальное, максимальное, среднее значение и дисперсию.\n",
    "Должна получиться таблица типа следующей:\n",
    "```\n",
    "      col_1   col_2  ... col_n\n",
    "min       0      -3        100\n",
    "max       1      10        900\n",
    "avg     0.5       7        641\n",
    "sig    0.25       3        150\n",
    "```"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Задание 10. CSV-файл\n",
    "Создайте csv, содержащий заголовки `rnd`,`uni`,`gauss_1`,`gauss_2` и значения этих списков соответственно.\n",
    "\n",
    "https://docs.python.org/3/library/csv.html#csv.writer"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# ----------------------------"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\"apt-get\" �� ���� ����७��� ��� ���譥�\n",
      "��������, �ᯮ��塞�� �ணࠬ��� ��� ������ 䠩���.\n"
     ]
    }
   ],
   "source": [
    "!apt-get moo"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "Запускать команды можно как из терминала, так и из юпитера или колаба (Google Colab), поставив перед командой \"!\":"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\"Hello World\"\n"
     ]
    }
   ],
   "source": [
    "!echo \"Hello World\"\n",
    "# !pip install numpy<2.0.0"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Задание N. \n",
    "Создайте файл, содержащий заглавные буквы алфавита."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "aaa-ml",
   "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.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
