{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<table align=right>\n",
    "    <tr>\n",
    "        <td align=center>\n",
    "            <font size=6><b>Программирование $-$ 2026.</b></font>  \n",
    "        </td>\n",
    "        <td align=right>\n",
    "<img src=\"logoMM.png\" align=right width=120>\n",
    "        </td>\n",
    "    </tr>\n",
    "    </table>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Словари*"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<img src=\"dict.jpg\" width=\"200\" align=\"right\"/>\n",
    "\n",
    "Обычные списки представляют собой набор пронумерованных элементов, то есть для обращения к какому-либо элементу списка необходимо указать его номер. Номер элемента в списке однозначно идентифицирует сам элемент.            \n",
    "            \n",
    "Структура данных, позволяющая идентифицировать ее элементы не по числовому индексу, а по произвольному, называется ***словарем*** или ***ассоциативным массивом***. Соответствующая структура данных в языке Питон называется `dict`.          "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<font size=1>\n",
    "* Все изображения загружены с сайта  <a href=\"https://pixabay.com\">Pixabay</a> (Stunning free images & royalty free stock)    \n",
    "</font>                          "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Словарь — неупорядоченная структура данных, которая позволяет хранить пары «ключ — значение». Доступ к значению осуществляется по ключу. В качестве ключа может выступать объект любого **неизменяемого** типа.\n",
    "\n",
    "Примеры словарей (из жизни):\n",
    "- собственно словарь. Орфографический, англо-русский, словарь синонимов и пр. Ключ - слово (строка), значение - толкование, варианты перевода, список синонимов.\n",
    "- база ИНН или СНИЛС. Ключ - уникальный номер или комбинация символов\n",
    "- база номеров бронирования авиабилетов. Ключ - шестисимвольный код, типа `I6YV3F`. Значение - список различных данных о пассажире, рейсе и т.п. \n",
    "- база номеров автомобилей"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Демонстрация"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Столица страны Russia: Moscow\n",
      "В базе нет страны c названием France\n",
      "Столица страны USA: Washington\n",
      "Столица страны China: Beijing\n"
     ]
    }
   ],
   "source": [
    "# Создадим пустой словарь capitals\n",
    "capitals = dict()   # {}\n",
    "\n",
    "# Заполним его несколькими значениями\n",
    "capitals['Russia'] = 'Moscow'\n",
    "capitals['China'] = 'Beijing'\n",
    "capitals['USA'] = 'Washington'\n",
    "\n",
    "countries = ['Russia', 'France', 'USA', 'China']\n",
    "\n",
    "for country in countries:\n",
    "    # Для каждой страны из списка проверим, \n",
    "    # есть ли она в словаре столиц\n",
    "    if country in capitals:\n",
    "        print(f'Столица страны {country}: {capitals[country]}')\n",
    "    else:\n",
    "        print(f'В базе нет страны c названием {country}')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'Russia': 'Moscow', 'China': 'Beijing', 'USA': 'Washington'}"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "capitals"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Способы создания словаря \"вручную\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'Russia': 'Moscow', 'China': 'Beijing', 'USA': 'Washington'}\n",
      "{'Russia': 'Moscow', 'China': 'Beijing', 'USA': 'Washington'}\n",
      "{'Russia': 'Moscow', 'China': 'Beijing', 'USA': 'Washington'}\n",
      "{'Russia': 'Moscow', 'China': 'Beijing', 'USA': 'Washington'}\n"
     ]
    }
   ],
   "source": [
    "# 1 множество пар вида ключ:значение\n",
    "сapitals1 = {'Russia': 'Moscow', 'China': 'Beijing', \n",
    "             'USA': 'Washington'}\n",
    "print(сapitals1)\n",
    "\n",
    "# 2 список элементов вида имя = значение\n",
    "сapitals2 = dict(Russia = 'Moscow', China = 'Beijing', \n",
    "                 USA = 'Washington')\n",
    "print(сapitals2)\n",
    "\n",
    "# 3 список кортежей \n",
    "сapitals3 = dict([(\"Russia\", \"Moscow\"), (\"China\", \"Beijing\"), \n",
    "                  (\"USA\", \"Washington\")])\n",
    "print(сapitals3)\n",
    "\n",
    "# 4 из двух списков\n",
    "сapitals4 = dict(zip([\"Russia\", \"China\", \"USA\"],\n",
    "                    [\"Moscow\", \"Beijing\", \"Washington\"]))\n",
    "print(сapitals4)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<table align=left>\n",
    "    <tr>\n",
    "        <td>\n",
    "<img src=\"zip.png\" width=\"150\">\n",
    "       </td>\n",
    "        <td> \n",
    "            <font size=4>zip</font> &ndash; один из самых популярных вариантов<br>\n",
    "            <font size=1>😉 не путать с архиватором!</font>\n",
    "        </td>\n",
    "    </tr>\n",
    "</table>   \n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[('Russia', 'Moscow'), ('China', 'Beijing'), ('USA', 'Washington')]"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "list(zip([\"Russia\", \"China\", \"USA\"],\n",
    "                    [\"Moscow\", \"Beijing\", \"Washington\"]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "help(zip)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Автоматизация создания словарей "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{1: 1, 2: 8, 3: 27, 4: 64, 5: 125}\n"
     ]
    }
   ],
   "source": [
    "# словарь на основе генератора\n",
    "cubes =  {x: x**3 for x in range(1, 6)}\n",
    "print(cubes)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{10: 15, 11: 15, 12: 15, 13: 15, 14: 15, 15: 15}\n"
     ]
    }
   ],
   "source": [
    "# fromkeys\n",
    "d = dict.fromkeys(range(10, 16), 15)\n",
    "print(d)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Работа с элементами словаря"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "# дальше будем использовать этот словарь\n",
    "capitals = {'Russia': 'Moscow', \n",
    "            'China': 'Beijing', \n",
    "            'USA': 'Washington',\n",
    "            'France':'Paris'}"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Получение значения элемента по ключу"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Moscow Paris\n"
     ]
    }
   ],
   "source": [
    "# Способ 1.\n",
    "# x = d[key]\n",
    "town = capitals['Russia']\n",
    "\n",
    "# Способ 2.\n",
    "# x = d.get(key)\n",
    "# или\n",
    "# x = d.get(key, value)\n",
    "city = capitals.get('France')\n",
    "\n",
    "print(town, city)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "ename": "KeyError",
     "evalue": "'Armenia'",
     "output_type": "error",
     "traceback": [
      "\u001b[31m---------------------------------------------------------------------------\u001b[39m",
      "\u001b[31mKeyError\u001b[39m                                  Traceback (most recent call last)",
      "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[9]\u001b[39m\u001b[32m, line 3\u001b[39m\n\u001b[32m      1\u001b[39m \u001b[38;5;66;03m# Если в словаре нет такого ключа,\u001b[39;00m\n\u001b[32m      2\u001b[39m \u001b[38;5;66;03m# возникнет ошибка\u001b[39;00m\n\u001b[32m----> \u001b[39m\u001b[32m3\u001b[39m what = \u001b[43mcapitals\u001b[49m\u001b[43m[\u001b[49m\u001b[33;43m'\u001b[39;49m\u001b[33;43mArmenia\u001b[39;49m\u001b[33;43m'\u001b[39;49m\u001b[43m]\u001b[49m\n",
      "\u001b[31mKeyError\u001b[39m: 'Armenia'"
     ]
    }
   ],
   "source": [
    "# Если в словаре нет такого ключа,\n",
    "# возникнет ошибка\n",
    "what = capitals['Armenia']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "ой, не знаю\n"
     ]
    }
   ],
   "source": [
    "# Метод get позволяет избегать этой ошибки\n",
    "# второй параметр метода -  \n",
    "#   то значение,которое возвратится при отсутствии ключа\n",
    "what = capitals.get('Armenia', 'ой, не знаю')\n",
    "print(what)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "True\n",
      "False\n"
     ]
    }
   ],
   "source": [
    "# Проверка принадлежности ключа словарю:\n",
    "# x in d\n",
    "print('France' in capitals)\n",
    "print('Armenia' in capitals)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Добавление и удаление элемента"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'Russia': 'Moscow', 'China': 'Beijing', 'USA': 'Washington', 'France': 'Paris', 'Armenia': 'Yerevan'}\n"
     ]
    }
   ],
   "source": [
    "# Добавление нового элемента в словарь: \n",
    "# - обычное присваивание\n",
    "# d[key] = value\n",
    "capitals['Armenia'] = 'Yerevan'\n",
    "print(capitals)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Удаление элемента из словаря\n",
    "# Способ 1\n",
    "# del d[key]\n",
    "\n",
    "# Способ 2\n",
    "# x = d.pop(key)\n",
    "# или\n",
    "# x = d.pop(key, value)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Перебор элементов словаря"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Russia Moscow\n",
      "China Beijing\n",
      "USA Washington\n",
      "France Paris\n",
      "Armenia Yerevan\n"
     ]
    }
   ],
   "source": [
    "# Перебор элементов словаря\n",
    "# for key in d:\n",
    "#    print(key, d[key])\n",
    "for c in capitals:\n",
    "    print(c, capitals[c])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "dict_keys(['Russia', 'China', 'USA', 'France', 'Armenia'])\n",
      "dict_items([('Russia', 'Moscow'), ('China', 'Beijing'), ('USA', 'Washington'), ('France', 'Paris'), ('Armenia', 'Yerevan')])\n"
     ]
    }
   ],
   "source": [
    "# Представления элементов словаря\n",
    "# d.keys()\n",
    "# d.values()\n",
    "# d.items()\n",
    "# пример проверки: val in A.values()\n",
    "print(capitals.keys())\n",
    "print(capitals.items())\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Russia, столица: Moscow\n",
      "China, столица: Beijing\n",
      "USA, столица: Washington\n",
      "France, столица: Paris\n",
      "Armenia, столица: Yerevan\n"
     ]
    }
   ],
   "source": [
    "# Второй способ перебора элементов\n",
    "# for key, val in d.items():\n",
    "#     print(key, val)\n",
    "for country, capital in capitals.items():\n",
    "    print(f'{country}, столица: {capital}')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Задачи по теме \"Словари\""
   ]
  },
  {
   "attachments": {
    "4-6.jpg": {
     "image/jpeg": "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"
    }
   },
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Задача (из контрольной ?)\n",
    "\n",
    "![4-6.jpg](attachment:4-6.jpg)\n",
    "\n",
    "Знаменитый межгалактический преступник Джим де Гриз встал на путь исправления и хочет украсть из сейфа одного из криминальных авторитетов звездной системы Тау Кита план покорения Вселенной. Чтобы открыть сейф нужно ввести пароль – фразу из дюжины слов на русском языке (узнав об этом, Джим сразу догадался, из какой части планеты Земля происходят предки этого преступного авторитета). У криминального авторитета плохая память, и чтобы не забыть пароль, он написал его прямо на сейфе – только на таукитянском языке. \n",
    "Джим не знает ни русского, ни таукитянского (он даже букв таких не знает!), зато прекрасно умеет пользоваться галактик-нетом, в котором он сумел найти два файла: в одном - небольшой список русских слов, в другом - список их переводов на язык Тау Кита. Поскольку времени на взлом сейфа будет очень мало, нужно подготовиться к операции заранее. Разработайте программу, которая из заданных списков создает таукитянско-русский словарь, и потренируйтесь взламывать код – объясните Джиму, какое русское предложение он должен набрать, если на двери сейфа нацарапано\n",
    "\n",
    "╦╪╟ ╪╧╥╞╔ ╒╟╒╬╒═╩╘ ╔╘╤╟╫╒ ╬╤╦╥╟ ╔╥╩╚╥╟ ╟╨╛╚╙╥╘ ╛╤╒ ╫╬═╩╔ ╧╨╒╫╠ ╦╪╟ ╪╧╥╞╔\n",
    "\n",
    "\n",
    "**Список тау-китянских слов:**  \n",
    "'╟╚╘╩', '╧╬╩', '╛╦╙╨╧╩╠', '╟╚╫╛╬╠╚╞', '╞╚╫╛╙╘╚╠', '╒╤╔', '═╥╤═╬╦╔', \n",
    "'╥╧╨╪╞╧', '╠╧╤═', '╥╠╠╞', '╪╙╓', '╚╨╫╠╥', '╓╓╞╦╓╟╫', '╫╒╞╤', '═╞╙╫', \n",
    "'╥╒╬╦╫╠╒╪', '╓╫╟', '╚╬═╬╒', '╨╪═╞╪╞╬', '╙╫╠╓╙╧╒╞', '╫╤╦╤╔', '╓╧╘', \n",
    "'╔╫╫╨╟╪╓', '╛╙╞╟╤╙╔╟', '╙╪╟', '╛═╩╤╓╙', '╩╙╬╥╔╞╘╟', '╛╬╫', '╚╥╦', \n",
    "'╞═╟╧╧╧╓', '╞╓╦╩═╨', '═╞╛╠', '╟╞╒', '╙╪═╓╟╨╓', '╬╤╦╥╟', '╚╥╥╙╤╤╘╪', \n",
    "'╒╤═╓', '╔╙╔╫', '╟╪╒╛╒╤╨', '╬╧╫╠', '╬╦╙', '╦╥╧╞', '╠═╠═╪╓╒', '╘╞╧╥╥╟╟╬', \n",
    "'╨╨╞╓╘', '╞╙╟╞╚╤╘╚', '╠╫╪╞', '╧╔╙╛╥', '╫╥╚╚╥═', '╓╫╧╤', '╦╟╠╫', '╨╩╠╠', \n",
    "'╠╤╛╒╥╬╦╪', '╨╛╤╚╩╘╤', '╨╪╬╞', '╧╥╫', '╔╘╤╟╫╒', '╒╟╚╫╠╒╤', '╩╔╪', \n",
    "'╔╫╥╓╒╙╒', '═╪╧╔', '╪╤╔╪╘╫', '╩╛╒╛╟╬═', '╟╓╞═╟', '╦╬╚', '╨╥╦╨', \n",
    "'╞╪╨╟╠╙╪╦', '╚╚╓╟╘╠', '╠╟═╫═╤╩╬', '╙╛╧╨╟', '╤╟╠╓╨╬', '═╧╨╙═╦╤', '╧╥═╤', \n",
    "'╟╫╤', '╘╔═╦╓╨╔╚', '╘╬╒╦╧╠', '╠═╤╚╛╬', '╔╥╩╚╥╟', '╔╛╩╘╠╩╨╩', '╛╘╩╛╩', \n",
    "'╩╘╓╬╥', '╪╧╤╟╚', '╫╛╧╦╤╚╤', '╬╦╞╥╙╫╚', '═╩╙╛╞╪╫', '╘╤╙╔╦╙╓', \n",
    "'╬╬╤╨╛╬╪╧', '╧╨╬╒╠╓╓╚', '╓╟╠╒╬', '╓╥╛╛╨╛╪╙', '╔═╦╥╤═', '╦╓╦', \n",
    "'╤╟╫═╧╒╦╩', '╘╙╘', '╔╩╤╦╙╔', '╪╤╩', '╛╤╥╒╨╔╬', '╩╔╤╥╙╠╨╞', '╪╪╧═', \n",
    "'╨╪╙═╫╟╦╠', '╦╛╦╒╙╒╩', '╨╫╒╨╫╥╩', '╩╨╨╨╫╛', '╠╥═╪╒', '╪╧╥╞╔', \n",
    "'╛╒╩╨╔╔╙', '╛╞╚╘', '╬═╟╪╩╬╠', '╤╧╒╥╚╧╞╓', '╘╧╦╤╠', '╚╨═╘╤╬╚╪', \n",
    "'╒╛╫╒╙╒╧', '╘╓╙╟', '╪╟╬', '╫╦╓╪╚╓╘', '╒╔╦╫╛╙╠╫', '╫╟╩╞╒╩═╬', '╘╧╒╨╪╩╓', \n",
    "'╚╨╦╟╒╦', '╩╚╔╨╬╞╓', '╛╤╒', '╦╛╘╓╛╞╥', '╔╒╩', '╓╘╙╒╚╘═', '╟╓╚╫╠╧╠╩', \n",
    "'╤╬╤╫╞', '╠╔╚╦╙╛╔╓', '╥╦╔╬', '╦╓╤╓', '╧╘╤╛╫╥', '╞╔╘', '╫╩╦╙╥╥╪╬', \n",
    "'╒╟╒╬╒═╩╘', '╩╤╬╛╧╤╞', '╙╚╞╔╨╨╨╚', '═╩╤╤', '╨╪╦╤╤╛╔═', '╫╙╥╤', \n",
    "'╬╪╛╤╧╒╘', '╘╘╤╥╥╬╔', '╠╨╤╔╛', '═╟╠╩', '╥╚╚╬', '╟╨╛╚╙╥╘', '╧╦╘╧╙', \n",
    "'╘╥╟╞╨╚', '╪╠╧', '╤╒═', '╥╦═╧╘', '╘╩╔╘═╒╩', '╬╙╙╓╚╒', '╩╨╙╞╟╪╤╬', \n",
    "'╒╞╒╦╘╪', '╩╪╨╬╤╙', '╔╛╟╧', '╙╪╨╥', '╫╬═╩╔', '╤╤╔╙', '╪╞╚╒╩═╒', '╦╠╥', \n",
    "'═╛╤╔╒', '╒╛╛═╟═╞╘', '╓╬╩╞╙╞╞╦', '═╨╚╔╩╞', '╛╙╬', '╬╠╦╧╤╒╛', '╪╛╒╓╔╨', \n",
    "'╓╨╘╫', '╘╛╠╚╔╓', '╛╧╬╓╚', '╞╪╓', '╫╪╫╛╪╚╠╛', '╧╨╒╫╠', '╞╧╦╠╪╨╤', '╓╦╙╧╫', \n",
    "'╥╩╪╦╞╫╛', '╪╞╩╩╒╫╛', '╞╒╛╞╔═╪', '╟╞╨╬╬╬', '╞╔╩', '╦╞╬╤╔╩═', '╪╛╠', '╒╟╔', \n",
    "'╧╓╪', '╒═╘╠╩', '╤╞╥╨╪╓', '╘╠╓╓', '╓╩╦╔╟', '╦╤╧╬╘╤╙╙', '╤╧╧', '╧╠╔╞╩╞╔╙', \n",
    "'╫╬╦╒╤╘╨', '╟╒╠╔', '╥╥╘╓', '╘═╠╓╔╔╥', '╦╪╟', '╛╧╙╙╤╪', '╛╠╪╒', '╒╛╨╘', \n",
    "'╫╟╓╔' \n",
    "\n",
    "\n",
    "**Список их переводов на русский:**  \n",
    "'усовершенствование', 'клапан', 'дрессировщик', 'марс', 'камера', 'фильм',  'размер', 'верба', 'зрение', 'обед', 'слух', 'волчок', 'еда', 'даль', 'помочь', 'мышка',  'ошибка', 'штаб', 'аккуратненький', 'пиво', 'тренировка', 'шкода', 'наглядный',  'честь', 'помеха', 'лесоповал', 'кошмарный', 'клевета', 'спешка', 'резец', 'приписка',  'артериальный', 'круговорот', 'высота', 'возможность', 'гурьба', 'вербовка',  'мальчишка', 'масса', 'идиллия', 'гель', 'застенок', 'линия', 'гимнастика',  'проволочный', 'конкуренция', 'сторожевой', 'мотивация', 'дезинформация', 'мозг',  'тенор', 'победа', 'моторный', 'экзотический', 'боец', 'приветствие', 'пистолет',  'фауна', 'отдел', 'состав', 'квалификация', 'галета', 'беспощадно', 'княжество',  'обстоятельство', 'лодка', 'слог', 'лира', 'фирма', 'вагон', 'сцена', 'дисплей', 'кошка',  'принцип', 'стебелек', 'неспособный', 'кинозвезда', 'добивание', 'агония',  'образование', 'зоопарк', 'разрез', 'иконостас', 'протяженность', 'запад', 'дрема',  'пакость', 'ключ', 'аттракцион', 'пристанище', 'человечество', 'акваланг', 'визитер',  'подачка', 'существо', 'наблюдение', 'бактериологический', 'погибель', 'сечение',  'организация', 'ботаника', 'капут', 'босяк', 'беда', 'слово', 'противник', 'табурет',  'империалист', 'спазм', 'вяз', 'сигарета', 'улучшение', 'страничка', 'труба', 'теневой',  'прием', 'сыск', 'кувырок', 'принуждение', 'председатель', 'большой', 'рытвина',  'символика', 'кормилица', 'завоевание', 'кочка', 'место', 'зверинец', 'биополе',  'одуванчик', 'черт', 'услужливый', 'и', 'годовщина', 'билет', 'боеголовка', 'значение',  'лицо', 'старание', 'тело', 'насильно', 'сухонький', 'лесенка', 'горазд', 'виновник',  'гипофиз', 'будни', 'игра', 'пчела', 'вождение', 'транспарант', 'пыль', 'оптимист',  'очевидность', 'бацилла', 'успех', 'чем', 'преобразователь', 'апельсиновый',  'исключительность', 'культура', 'совестный', 'острие', 'вода', 'заспанный',  'прикрытие', 'фраза', 'наводчик', 'разумно', 'правоохранительный', 'планетолет',  'гадание', 'один', 'полый', 'запасник', 'направление', 'романтика', 'сват', 'картонка',  'смех', 'путаница', 'нашивка', 'дно', 'минерал', 'житель', 'способ', 'кросс',  'персональный', 'выздоровление', 'всплеск', 'весна', 'провинциал', 'организм',  'осознание', 'веточка', 'добрый', 'корзинка', 'период', 'зигзаг', 'население'\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "добрый слово и пистолет возможность добивание горазд большой чем один добрый слово "
     ]
    }
   ],
   "source": [
    "# Текст программы, осуществляющей перевод\n",
    "tau = ['╟╚╘╩', '╧╬╩', '╛╦╙╨╧╩╠', '╟╚╫╛╬╠╚╞', '╞╚╫╛╙╘╚╠', '╒╤╔', '═╥╤═╬╦╔', \n",
    "'╥╧╨╪╞╧', '╠╧╤═', '╥╠╠╞', '╪╙╓', '╚╨╫╠╥', '╓╓╞╦╓╟╫', '╫╒╞╤', '═╞╙╫', \n",
    "'╥╒╬╦╫╠╒╪', '╓╫╟', '╚╬═╬╒', '╨╪═╞╪╞╬', '╙╫╠╓╙╧╒╞', '╫╤╦╤╔', '╓╧╘', \n",
    "'╔╫╫╨╟╪╓', '╛╙╞╟╤╙╔╟', '╙╪╟', '╛═╩╤╓╙', '╩╙╬╥╔╞╘╟', '╛╬╫', '╚╥╦', \n",
    "'╞═╟╧╧╧╓', '╞╓╦╩═╨', '═╞╛╠', '╟╞╒', '╙╪═╓╟╨╓', '╬╤╦╥╟', '╚╥╥╙╤╤╘╪', \n",
    "'╒╤═╓', '╔╙╔╫', '╟╪╒╛╒╤╨', '╬╧╫╠', '╬╦╙', '╦╥╧╞', '╠═╠═╪╓╒', '╘╞╧╥╥╟╟╬', \n",
    "'╨╨╞╓╘', '╞╙╟╞╚╤╘╚', '╠╫╪╞', '╧╔╙╛╥', '╫╥╚╚╥═', '╓╫╧╤', '╦╟╠╫', '╨╩╠╠', \n",
    "'╠╤╛╒╥╬╦╪', '╨╛╤╚╩╘╤', '╨╪╬╞', '╧╥╫', '╔╘╤╟╫╒', '╒╟╚╫╠╒╤', '╩╔╪', \n",
    "'╔╫╥╓╒╙╒', '═╪╧╔', '╪╤╔╪╘╫', '╩╛╒╛╟╬═', '╟╓╞═╟', '╦╬╚', '╨╥╦╨', \n",
    "'╞╪╨╟╠╙╪╦', '╚╚╓╟╘╠', '╠╟═╫═╤╩╬', '╙╛╧╨╟', '╤╟╠╓╨╬', '═╧╨╙═╦╤', '╧╥═╤', \n",
    "'╟╫╤', '╘╔═╦╓╨╔╚', '╘╬╒╦╧╠', '╠═╤╚╛╬', '╔╥╩╚╥╟', '╔╛╩╘╠╩╨╩', '╛╘╩╛╩', \n",
    "'╩╘╓╬╥', '╪╧╤╟╚', '╫╛╧╦╤╚╤', '╬╦╞╥╙╫╚', '═╩╙╛╞╪╫', '╘╤╙╔╦╙╓', \n",
    "'╬╬╤╨╛╬╪╧', '╧╨╬╒╠╓╓╚', '╓╟╠╒╬', '╓╥╛╛╨╛╪╙', '╔═╦╥╤═', '╦╓╦', \n",
    "'╤╟╫═╧╒╦╩', '╘╙╘', '╔╩╤╦╙╔', '╪╤╩', '╛╤╥╒╨╔╬', '╩╔╤╥╙╠╨╞', '╪╪╧═', \n",
    "'╨╪╙═╫╟╦╠', '╦╛╦╒╙╒╩', '╨╫╒╨╫╥╩', '╩╨╨╨╫╛', '╠╥═╪╒', '╪╧╥╞╔', \n",
    "'╛╒╩╨╔╔╙', '╛╞╚╘', '╬═╟╪╩╬╠', '╤╧╒╥╚╧╞╓', '╘╧╦╤╠', '╚╨═╘╤╬╚╪', \n",
    "'╒╛╫╒╙╒╧', '╘╓╙╟', '╪╟╬', '╫╦╓╪╚╓╘', '╒╔╦╫╛╙╠╫', '╫╟╩╞╒╩═╬', '╘╧╒╨╪╩╓', \n",
    "'╚╨╦╟╒╦', '╩╚╔╨╬╞╓', '╛╤╒', '╦╛╘╓╛╞╥', '╔╒╩', '╓╘╙╒╚╘═', '╟╓╚╫╠╧╠╩', \n",
    "'╤╬╤╫╞', '╠╔╚╦╙╛╔╓', '╥╦╔╬', '╦╓╤╓', '╧╘╤╛╫╥', '╞╔╘', '╫╩╦╙╥╥╪╬', \n",
    "'╒╟╒╬╒═╩╘', '╩╤╬╛╧╤╞', '╙╚╞╔╨╨╨╚', '═╩╤╤', '╨╪╦╤╤╛╔═', '╫╙╥╤', \n",
    "'╬╪╛╤╧╒╘', '╘╘╤╥╥╬╔', '╠╨╤╔╛', '═╟╠╩', '╥╚╚╬', '╟╨╛╚╙╥╘', '╧╦╘╧╙', \n",
    "'╘╥╟╞╨╚', '╪╠╧', '╤╒═', '╥╦═╧╘', '╘╩╔╘═╒╩', '╬╙╙╓╚╒', '╩╨╙╞╟╪╤╬', \n",
    "'╒╞╒╦╘╪', '╩╪╨╬╤╙', '╔╛╟╧', '╙╪╨╥', '╫╬═╩╔', '╤╤╔╙', '╪╞╚╒╩═╒', '╦╠╥', \n",
    "'═╛╤╔╒', '╒╛╛═╟═╞╘', '╓╬╩╞╙╞╞╦', '═╨╚╔╩╞', '╛╙╬', '╬╠╦╧╤╒╛', '╪╛╒╓╔╨', \n",
    "'╓╨╘╫', '╘╛╠╚╔╓', '╛╧╬╓╚', '╞╪╓', '╫╪╫╛╪╚╠╛', '╧╨╒╫╠', '╞╧╦╠╪╨╤', '╓╦╙╧╫', \n",
    "'╥╩╪╦╞╫╛', '╪╞╩╩╒╫╛', '╞╒╛╞╔═╪', '╟╞╨╬╬╬', '╞╔╩', '╦╞╬╤╔╩═', '╪╛╠', '╒╟╔', \n",
    "'╧╓╪', '╒═╘╠╩', '╤╞╥╨╪╓', '╘╠╓╓', '╓╩╦╔╟', '╦╤╧╬╘╤╙╙', '╤╧╧', '╧╠╔╞╩╞╔╙', \n",
    "'╫╬╦╒╤╘╨', '╟╒╠╔', '╥╥╘╓', '╘═╠╓╔╔╥', '╦╪╟', '╛╧╙╙╤╪', '╛╠╪╒', '╒╛╨╘', \n",
    "'╫╟╓╔']\n",
    "rus = ['усовершенствование', 'клапан', 'дрессировщик', 'марс', 'камера', 'фильм',  'размер', 'верба', 'зрение', 'обед', 'слух', 'волчок', 'еда', 'даль', 'помочь', 'мышка',  'ошибка', 'штаб', 'аккуратненький', 'пиво', 'тренировка', 'шкода', 'наглядный',  'честь', 'помеха', 'лесоповал', 'кошмарный', 'клевета', 'спешка', 'резец', 'приписка',  'артериальный', 'круговорот', 'высота', 'возможность', 'гурьба', 'вербовка',  'мальчишка', 'масса', 'идиллия', 'гель', 'застенок', 'линия', 'гимнастика',  'проволочный', 'конкуренция', 'сторожевой', 'мотивация', 'дезинформация', 'мозг',  'тенор', 'победа', 'моторный', 'экзотический', 'боец', 'приветствие', 'пистолет',  'фауна', 'отдел', 'состав', 'квалификация', 'галета', 'беспощадно', 'княжество',  'обстоятельство', 'лодка', 'слог', 'лира', 'фирма', 'вагон', 'сцена', 'дисплей', 'кошка',  'принцип', 'стебелек', 'неспособный', 'кинозвезда', 'добивание', 'агония',  'образование', 'зоопарк', 'разрез', 'иконостас', 'протяженность', 'запад', 'дрема',  'пакость', 'ключ', 'аттракцион', 'пристанище', 'человечество', 'акваланг', 'визитер',  'подачка', 'существо', 'наблюдение', 'бактериологический', 'погибель', 'сечение',  'организация', 'ботаника', 'капут', 'босяк', 'беда', 'слово', 'противник', 'табурет',  'империалист', 'спазм', 'вяз', 'сигарета', 'улучшение', 'страничка', 'труба', 'теневой',  'прием', 'сыск', 'кувырок', 'принуждение', 'председатель', 'большой', 'рытвина',  'символика', 'кормилица', 'завоевание', 'кочка', 'место', 'зверинец', 'биополе',  'одуванчик', 'черт', 'услужливый', 'и', 'годовщина', 'билет', 'боеголовка', 'значение',  'лицо', 'старание', 'тело', 'насильно', 'сухонький', 'лесенка', 'горазд', 'виновник',  'гипофиз', 'будни', 'игра', 'пчела', 'вождение', 'транспарант', 'пыль', 'оптимист',  'очевидность', 'бацилла', 'успех', 'чем', 'преобразователь', 'апельсиновый',  'исключительность', 'культура', 'совестный', 'острие', 'вода', 'заспанный',  'прикрытие', 'фраза', 'наводчик', 'разумно', 'правоохранительный', 'планетолет',  'гадание', 'один', 'полый', 'запасник', 'направление', 'романтика', 'сват', 'картонка',  'смех', 'путаница', 'нашивка', 'дно', 'минерал', 'житель', 'способ', 'кросс',  'персональный', 'выздоровление', 'всплеск', 'весна', 'провинциал', 'организм',  'осознание', 'веточка', 'добрый', 'корзинка', 'период', 'зигзаг', 'население']\n",
    "d = dict(zip(tau, rus))\n",
    "note = '╦╪╟ ╪╧╥╞╔ ╒╟╒╬╒═╩╘ ╔╘╤╟╫╒ ╬╤╦╥╟ ╔╥╩╚╥╟ ╟╨╛╚╙╥╘ ╛╤╒ ╫╬═╩╔ ╧╨╒╫╠ ╦╪╟ ╪╧╥╞╔'\n",
    "for tw in note.split():\n",
    "    print(d[tw], end = ' ')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**А теперь введите перевод!**\n",
    "\n",
    "*Учтите, что стиль мышления таукитян сильно отличается от земного; у них в языке совсем нет глаголов, почти нет предлогов и наречий, полностью отсутствуют падежи и склонения. К счастью, слова друг от друга они отделяют пробелами. Постарайтесь перевести зашифрованную фразу не механически: хорошо бы понять ее смысл и записать ее в виде связного русского предложения – и с наречиями, и с глаголами. А может быть, Вы ее уже слышали раньше? Судьба вселенной в Ваших руках!*"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# перевод:\n",
    "\n",
    "Добрым словом и пистолетом вы можете добиться гораздо большего, чем одним только добрым словом."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<div align=\"right\">\n",
    "    <font size=+1> <em> Задачи с сайта <a href=\"http://pythontutor.ru\">ПитонТьютор</a> </em></font>\n",
    "    </div>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Задача 1. Номер появления слова**  \n",
    "В единственной строке записан текст. Для каждого слова из данного текста подсчитайте, сколько раз оно встречалось в этом тексте ранее.  \n",
    "*Словом считается последовательность непробельных символов идущих подряд, слова разделены одним или большим числом пробелов или символами конца строки.*\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0 0 0 1 2 1 \n",
      "0 0 0 0 0 0 1 0 0 1 1 1 0 0 2 0 2 0 0 "
     ]
    }
   ],
   "source": [
    "# Дано\n",
    "simple_text = \"one two three two two one\"\n",
    "patterer = \"макака коалу в какао макала, \\n\\\n",
    "коала какао лениво лакала, \\n\\\n",
    "макака макала, коала икала, \\n\\\n",
    "устала макака - какао не стало.\"\n",
    "#print(patterer)\n",
    "# Решение 1\n",
    "d = {}\n",
    "for word in simple_text.split():\n",
    "    if word in d:\n",
    "        print(d[word], end = ' ')\n",
    "        d[word] += 1\n",
    "    else:\n",
    "        print(0, end = ' ')\n",
    "        d[word] = 1       \n",
    "print()\n",
    "\n",
    "# Решение 2\n",
    "d = dict()\n",
    "for word in patterer.split():\n",
    "    print(d.get(word, 0), end = ' ')\n",
    "    d[word] = d.get(word, 0) + 1\n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'макака': 3,\n",
       " 'коалу': 1,\n",
       " 'в': 1,\n",
       " 'какао': 3,\n",
       " 'макала,': 2,\n",
       " 'коала': 2,\n",
       " 'лениво': 1,\n",
       " 'лакала,': 1,\n",
       " 'икала,': 1,\n",
       " 'устала': 1,\n",
       " '-': 1,\n",
       " 'не': 1,\n",
       " 'стало.': 1}"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "d"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Задача 2. Словарь синонимов**  \n",
    "Дан словарь, состоящий из пар слов. Каждое слово является синонимом к парному ему слову. Все слова в словаре различны.  Для слова из словаря, записанного в последней строке, определите его синоним.\n",
    "\n",
    "| Пример ввода|Образец вывода|\n",
    "|:--|--:|\n",
    "|`3`| |\n",
    "|`Hello Hi`| |\n",
    "|`Bye Goodbye`| |\n",
    "|`List Array`| |\n",
    "|`Goodbye`|`Bye`|\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdin",
     "output_type": "stream",
     "text": [
      "n =  3\n",
      "2 synonims:  hello hi\n",
      "2 synonims:  goodbye bye\n",
      "2 synonims:  list array\n",
      "word =  array\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "synonim:  list\n"
     ]
    }
   ],
   "source": [
    "# Решение\n",
    "d = {}\n",
    "n = int(input('n = '))\n",
    "for i in range(n):\n",
    "    words = input('2 synonims: ')\n",
    "    w1, w2 = words.split()\n",
    "    d[w1] = w2\n",
    "    d[w2] = w1\n",
    "w = input('word = ') \n",
    "print('synonim: ', d[w])\n",
    "    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "d"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Задача 3. Выборы в США**  \n",
    "*Как известно, в США президент выбирается не прямым голосованием, а путем двухуровневого голосования. Сначала проводятся выборы в каждом штате, и определяется победитель выборов в данном штате. Затем проводятся государственные выборы: на этих выборах каждый штат имеет определенное число голосов — число выборщиков от этого штата. На практике, все выборщики от штата голосуют в соответствии с результатами голосования внутри штата, то есть на заключительной стадии выборов в голосовании участвуют штаты, имеющие различное число голосов.*  \n",
    "В первой строке дано количество записей. Далее, каждая запись содержит фамилию кандидата и число голосов, отданных за него в одном из штатов. Подведите итоги выборов: для каждого из участника голосования определите число отданных за него голосов. Участников нужно выводить в алфавитном порядке.\n",
    "\n",
    "| Пример ввода|Образец вывода|\n",
    "|:--|:--|\n",
    "|`5`| |\n",
    "|`Trump 14`|`Biden 35`|\n",
    "|`Biden 26`|`Jorgensen 1` |\n",
    "|`Jorgensen 1`| `Trump 34`|\n",
    "|`Biden 9`|  |\n",
    "|`Trump 20`|  |\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdin",
     "output_type": "stream",
     "text": [
      "n =  5\n",
      "data:  trump 12\n",
      "data:  biden 34\n",
      "data:  trump 40\n",
      "data:  biden 27\n",
      "data:  biden 8\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'trump': 52, 'biden': 69}\n"
     ]
    }
   ],
   "source": [
    "# Решение\n",
    "d = {}\n",
    "n = int(input('n = '))\n",
    "for i in range(n):\n",
    "    s = input('data: ')\n",
    "    name, votes = s.split()\n",
    "    d[name] = d.get(name, 0) + int(votes)\n",
    "print(d)    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "biden 69\n",
      "trump 52\n"
     ]
    }
   ],
   "source": [
    "for key in sorted(d.keys()):\n",
    "    print(key, d[key])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "d"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Задача 4. Частотный анализ**  \n",
    "Дан список строк - предложений. Выведите все слова, встречающиеся в тексте, по одному на каждую строку. Слова должны быть отсортированы по убыванию их количества появления в тексте, а при одинаковой частоте появления — в лексикографическом порядке.  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'beautiful': 1, 'is': 4, 'better': 4, 'than': 4, 'ugly': 1, 'explicit': 1, 'implicit': 1, 'simple': 1, 'complex': 2, 'complicated': 1}\n"
     ]
    }
   ],
   "source": [
    "zen = ['beautiful is better than ugly',  \n",
    "       'explicit is better than implicit',\n",
    "       'simple is better than complex',\n",
    "       'complex is better than complicated']\n",
    "\n",
    "d = dict()\n",
    "for s in zen:\n",
    "    for w in s.split():\n",
    "        d[w] = d.get(w, 0) + 1\n",
    "print(d)\n",
    "# А дальше?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "is 4\n",
      "better 4\n",
      "than 4\n",
      "complex 2\n",
      "beautiful 1\n",
      "ugly 1\n",
      "explicit 1\n",
      "implicit 1\n",
      "simple 1\n",
      "complicated 1\n"
     ]
    }
   ],
   "source": [
    "for key, val in sorted(d.items(), key=lambda x:x[1], reverse=True):\n",
    "    print(key, val)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[(-4, 'better'),\n",
       " (-4, 'is'),\n",
       " (-4, 'than'),\n",
       " (-2, 'complex'),\n",
       " (-1, 'beautiful'),\n",
       " (-1, 'complicated'),\n",
       " (-1, 'explicit'),\n",
       " (-1, 'implicit'),\n",
       " (-1, 'simple'),\n",
       " (-1, 'ugly')]"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a = [(-val, key) for key, val in d.items()]\n",
    "sorted(a)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<div align=\"right\">\n",
    "<font size=+1> <em>Задачи с сайта <a href=\"https://leetcode.com\">LeetCode</a> </em></font>\n",
    "</div> "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Задача 1. Сумма двух**.  \n",
    "Дан список целых чисел `nums` и целое число `target` $-$ целевое значение. Нужно вычислить индексы двух элементов списка, сумма которых равна этому целевому значению.\n",
    "\n",
    "Еще раз:  \n",
    "найти индексы `i` и `j`, такие что `i!=j` и `nums[i] + nums[j] == target`.\n",
    "\n",
    "При решении нужно считать, что в списке есть только одна такая пара элементов."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "# очевидное плохое правильное решение\n",
    "def sum_two(nums, target):\n",
    "    n = len(nums)\n",
    "    for i in range(n-1):\n",
    "        for j in range(i+1, n):\n",
    "            if nums[i]+nums[j]==target:\n",
    "                return [i, j]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "nums = [2,7,11,15]\n",
    "target = 9\n",
    "assert sum_two(nums, target)==[0, 1], 'Тест1 не удался'\n",
    "\n",
    "nums = [3,2,4]\n",
    "target = 6\n",
    "assert sum_two(nums, target)==[1,2], 'Тест2 не удался'\n",
    "\n",
    "nums = [3,3]\n",
    "target = 6\n",
    "assert sum_two(nums, target)==[0,1], 'Тест3 не удался'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "3.0090980529785156\n"
     ]
    },
    {
     "ename": "AssertionError",
     "evalue": "Слишком долго",
     "output_type": "error",
     "traceback": [
      "\u001b[31m---------------------------------------------------------------------------\u001b[39m",
      "\u001b[31mAssertionError\u001b[39m                            Traceback (most recent call last)",
      "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[3]\u001b[39m\u001b[32m, line 13\u001b[39m\n\u001b[32m     11\u001b[39m dt = time()-t\n\u001b[32m     12\u001b[39m \u001b[38;5;28mprint\u001b[39m(dt)\n\u001b[32m---> \u001b[39m\u001b[32m13\u001b[39m \u001b[38;5;28;01massert\u001b[39;00m dt<\u001b[32m1\u001b[39m, \u001b[33m'\u001b[39m\u001b[33mСлишком долго\u001b[39m\u001b[33m'\u001b[39m\n",
      "\u001b[31mAssertionError\u001b[39m: Слишком долго"
     ]
    }
   ],
   "source": [
    "# тест проверки на скорость работы алгоритма\n",
    "from random import randint\n",
    "from time import time\n",
    "n = 5*10**4\n",
    "nums = [randint(1, n) for _ in range(n)]\n",
    "nums[1000] = -5\n",
    "nums[n - 1000] = -5\n",
    "target = -10\n",
    "t = time()\n",
    "assert sum_two(nums, target)==[1000,n-1000], 'Тест4 не удался'\n",
    "dt = time()-t\n",
    "print(dt)\n",
    "assert dt<1, 'Слишком долго'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0 - 3 1 - 5 2 - 7 3 - 11 4 - 0 5 - 5 0 - 3 1 - 5 2 - 7 3 - 11 4 - 0 5 - 5 "
     ]
    }
   ],
   "source": [
    "# сначала поговорим про enumerate\n",
    "a = [3, 5, 7, 11, 0, 5]\n",
    "\n",
    "for i in range(len(a)):\n",
    "    print(i, '-', a[i], end = ' ')\n",
    "    \n",
    "for i, x in enumerate(a):\n",
    "    print(i, '-', x, end=' ')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "# правильное хорошее решение\n",
    "def sum_two(nums, target):\n",
    "    d = {}\n",
    "    for i, x in enumerate(nums):\n",
    "        if x in d:            \n",
    "            return [d[x], i]\n",
    "        else:\n",
    "            d[target-x] = i\n",
    "    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "nums = [2,7,11,15]\n",
    "target = 9\n",
    "assert sum_two(nums, target)==[0, 1], 'Тест1 не удался'\n",
    "\n",
    "nums = [3,2,4]\n",
    "target = 6\n",
    "assert sum_two(nums, target)==[1,2], 'Тест2 не удался'\n",
    "\n",
    "nums = [3,3]\n",
    "target = 6\n",
    "assert sum_two(nums, target)==[0,1], 'Тест3 не удался'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.02653193473815918\n"
     ]
    }
   ],
   "source": [
    "# тест проверки на скорость работы алгоритма\n",
    "from random import randint\n",
    "from time import time\n",
    "n = 5*10**4\n",
    "nums = [randint(1, n) for _ in range(n)]\n",
    "nums[1000] = -5\n",
    "nums[n - 1000] = -5\n",
    "target = -10\n",
    "t = time()\n",
    "assert sum_two(nums, target)==[1000,n-1000], 'Тест4 не удался'\n",
    "dt2 = time()-t\n",
    "print(dt2)\n",
    "assert dt2<1, 'Слишком долго'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<font color=\"#0000FF\">\n",
    "\n",
    "\n",
    "# Дополнительно!!!.   \n",
    "## На экзамене этого не будет.  \n",
    "### Тем, кому не нужно $-$ не нужно. \n",
    "\n",
    "\n",
    "<div align=\"right\">\n",
    "    <font size=+1><em>Найдено на форумах</em></font>\n",
    "    </div>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Задача А.** В тексте программы несколько переменных получили значения. Например,\n",
    "\n",
    "```python\n",
    "n = 1\n",
    "pi = 3.14\n",
    "s = 'hello'\n",
    "```\n",
    "Требуется создать словарь, ключами которого были бы имена переменных, а значениями &ndash;  значения этих переменных. В приведенном примере должен получиться словарь\n",
    "\n",
    "```python\n",
    "{'n': 1, 's': 'hello', 'pi': 3.14}\n",
    "```\n",
    "\n",
    "Решение должно быть универсальным, т.е. не зависеть от имен использованных переменных и присвоенных им значений.\n",
    "\n",
    "**Задача Б.** (Не хочу пользоваться списками). Можно ли автоматически (в цикле) присвоить переменным `x1`, `x2`, `x3`, `x4`, `x5` значения 10, 20, 30, 40 и 50?"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Идея для решения**\n",
    "\n",
    "Функция `globals()` выдает словарь глобальных переменных (ключ – имя переменной). Функция `locals()` возвращает словарь только локальных переменных. \n",
    "Пример ниже. \n",
    "\n",
    "<font size = 1>\n",
    "    \n",
    "<b>Предупреждение:</b> В Ipython Notebook получится слишком много вывода. Лучше выполнить в Python Shell. Или хотя бы перезагрузить ядро.\n",
    "    \n",
    "С другой стороны, если выполнить прямо здесь, станет понятнее, что такое `In[1]` и т.д.\n",
    "</font>    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "x, y = 5, 10\n",
    "def test():\n",
    "    y, z = 33, 44\n",
    "    print('globals:', globals())\n",
    "    print('locals:', locals())\n",
    "test()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "10 20 30 40 50\n"
     ]
    }
   ],
   "source": [
    "# Решение задачи Б\n",
    "for i in range(1,6):\n",
    "    globals()[\"x\"+str(i)] = 10*i\n",
    "print(x1, x2, x3, x4, x5)    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'ss': 'hello', 'nnn': 1, 'ppi': 3.14, 'qq': 234455}\n"
     ]
    }
   ],
   "source": [
    "# Решение задачи А\n",
    "main_dict = set(locals().keys())\n",
    "#------------------------------------\n",
    "nnn = 1\n",
    "ppi = 3.14\n",
    "qq = 234455\n",
    "ss = 'hello'\n",
    "#------------------------------------\n",
    "cur_dict = set(locals().keys())\n",
    "d = {}\n",
    "for key in cur_dict - main_dict - {'main_dict'}:\n",
    "    d[key]=locals()[key]\n",
    "print(d)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "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.14.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
