{
 "cells": [
  {
   "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": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[('Russia', 'Moscow'), ('China', 'Beijing'), ('USA', 'Washington')]"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "list(zip([\"Russia\", \"China\", \"USA\"],\n",
    "                    [\"Moscow\", \"Beijing\", \"Washington\"]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Help on class zip in module builtins:\n",
      "\n",
      "class zip(object)\n",
      " |  zip(*iterables, strict=False) --> Yield tuples until an input is exhausted.\n",
      " |\n",
      " |     >>> list(zip('abcdefg', range(3), range(4)))\n",
      " |     [('a', 0, 0), ('b', 1, 1), ('c', 2, 2)]\n",
      " |\n",
      " |  The zip object yields n-length tuples, where n is the number of iterables\n",
      " |  passed as positional arguments to zip().  The i-th element in every tuple\n",
      " |  comes from the i-th iterable argument to zip().  This continues until the\n",
      " |  shortest argument is exhausted.\n",
      " |\n",
      " |  If strict is true and one of the arguments is exhausted before the others,\n",
      " |  raise a ValueError.\n",
      " |\n",
      " |  Methods defined here:\n",
      " |\n",
      " |  __getattribute__(self, name, /)\n",
      " |      Return getattr(self, name).\n",
      " |\n",
      " |  __iter__(self, /)\n",
      " |      Implement iter(self).\n",
      " |\n",
      " |  __next__(self, /)\n",
      " |      Implement next(self).\n",
      " |\n",
      " |  __reduce__(...)\n",
      " |      Return state information for pickling.\n",
      " |\n",
      " |  __setstate__(...)\n",
      " |      Set state information for unpickling.\n",
      " |\n",
      " |  ----------------------------------------------------------------------\n",
      " |  Static methods defined here:\n",
      " |\n",
      " |  __new__(*args, **kwargs)\n",
      " |      Create and return a new object.  See help(type) for accurate signature.\n",
      "\n"
     ]
    }
   ],
   "source": [
    "help(zip)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Автоматизация создания словарей "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "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": "markdown",
   "metadata": {},
   "source": [
    "### Работа с элементами словаря"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "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": 9,
   "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": 10,
   "metadata": {},
   "outputs": [
    {
     "ename": "KeyError",
     "evalue": "'Armenia'",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mKeyError\u001b[0m                                  Traceback (most recent call last)",
      "Cell \u001b[1;32mIn[10], line 3\u001b[0m\n\u001b[0;32m      1\u001b[0m \u001b[38;5;66;03m# Если в словаре нет такого ключа,\u001b[39;00m\n\u001b[0;32m      2\u001b[0m \u001b[38;5;66;03m# возникнет ошибка\u001b[39;00m\n\u001b[1;32m----> 3\u001b[0m what \u001b[38;5;241m=\u001b[39m \u001b[43mcapitals\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mArmenia\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m]\u001b[49m\n",
      "\u001b[1;31mKeyError\u001b[0m: 'Armenia'"
     ]
    }
   ],
   "source": [
    "# Если в словаре нет такого ключа,\n",
    "# возникнет ошибка\n",
    "what = capitals['Armenia']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "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": 12,
   "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": 13,
   "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": 14,
   "metadata": {},
   "outputs": [
    {
     "ename": "IndexError",
     "evalue": "list assignment index out of range",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mIndexError\u001b[0m                                Traceback (most recent call last)",
      "Cell \u001b[1;32mIn[14], line 3\u001b[0m\n\u001b[0;32m      1\u001b[0m \u001b[38;5;66;03m# Со списком так нельзя было поступать\u001b[39;00m\n\u001b[0;32m      2\u001b[0m a \u001b[38;5;241m=\u001b[39m [\u001b[38;5;241m1\u001b[39m,\u001b[38;5;241m2\u001b[39m,\u001b[38;5;241m3\u001b[39m]\n\u001b[1;32m----> 3\u001b[0m \u001b[43ma\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m3\u001b[39;49m\u001b[43m]\u001b[49m \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m5\u001b[39m\n",
      "\u001b[1;31mIndexError\u001b[0m: list assignment index out of range"
     ]
    }
   ],
   "source": [
    "# Со списком так нельзя было поступать\n",
    "a = [1,2,3]\n",
    "a[3] = 5"
   ]
  },
  {
   "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": 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 in d:\n",
    "#    print(key, d[key])\n",
    "for c in capitals:\n",
    "    print(c, capitals[c])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "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"
     ]
    },
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Представления элементов словаря\n",
    "# d.keys()\n",
    "# d.values()\n",
    "# d.items()\n",
    "# пример проверки: val in A.values()\n",
    "print(capitals.keys())\n",
    "print(capitals.items())\n",
    "'USA' in capitals.keys()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "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": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "добрый слово и пистолет возможность добивание горазд большой чем один добрый слово "
     ]
    }
   ],
   "source": [
    "# Текст программы, осуществляющей перевод\n",
    "tau = ['╟╚╘╩', '╧╬╩', '╛╦╙╨╧╩╠', '╟╚╫╛╬╠╚╞', '╞╚╫╛╙╘╚╠', '╒╤╔', '═╥╤═╬╦╔', '╥╧╨╪╞╧', '╠╧╤═', '╥╠╠╞', '╪╙╓', '╚╨╫╠╥', '╓╓╞╦╓╟╫', '╫╒╞╤', '═╞╙╫', '╥╒╬╦╫╠╒╪', '╓╫╟', '╚╬═╬╒', '╨╪═╞╪╞╬', '╙╫╠╓╙╧╒╞', '╫╤╦╤╔', '╓╧╘', '╔╫╫╨╟╪╓', '╛╙╞╟╤╙╔╟', '╙╪╟', '╛═╩╤╓╙', '╩╙╬╥╔╞╘╟', '╛╬╫', '╚╥╦', '╞═╟╧╧╧╓', '╞╓╦╩═╨', '═╞╛╠', '╟╞╒', '╙╪═╓╟╨╓', '╬╤╦╥╟', '╚╥╥╙╤╤╘╪', '╒╤═╓', '╔╙╔╫', '╟╪╒╛╒╤╨', '╬╧╫╠', '╬╦╙', '╦╥╧╞', '╠═╠═╪╓╒', '╘╞╧╥╥╟╟╬', '╨╨╞╓╘', '╞╙╟╞╚╤╘╚', '╠╫╪╞', '╧╔╙╛╥', '╫╥╚╚╥═', '╓╫╧╤', '╦╟╠╫', '╨╩╠╠', '╠╤╛╒╥╬╦╪', '╨╛╤╚╩╘╤', '╨╪╬╞', '╧╥╫', '╔╘╤╟╫╒', '╒╟╚╫╠╒╤', '╩╔╪', '╔╫╥╓╒╙╒', '═╪╧╔', '╪╤╔╪╘╫', '╩╛╒╛╟╬═', '╟╓╞═╟', '╦╬╚', '╨╥╦╨', '╞╪╨╟╠╙╪╦', '╚╚╓╟╘╠', '╠╟═╫═╤╩╬', '╙╛╧╨╟', '╤╟╠╓╨╬', '═╧╨╙═╦╤', '╧╥═╤', '╟╫╤', '╘╔═╦╓╨╔╚', '╘╬╒╦╧╠', '╠═╤╚╛╬', '╔╥╩╚╥╟', '╔╛╩╘╠╩╨╩', '╛╘╩╛╩', '╩╘╓╬╥', '╪╧╤╟╚', '╫╛╧╦╤╚╤', '╬╦╞╥╙╫╚', '═╩╙╛╞╪╫', '╘╤╙╔╦╙╓', '╬╬╤╨╛╬╪╧', '╧╨╬╒╠╓╓╚', '╓╟╠╒╬', '╓╥╛╛╨╛╪╙', '╔═╦╥╤═', '╦╓╦', '╤╟╫═╧╒╦╩', '╘╙╘', '╔╩╤╦╙╔', '╪╤╩', '╛╤╥╒╨╔╬', '╩╔╤╥╙╠╨╞', '╪╪╧═', '╨╪╙═╫╟╦╠', '╦╛╦╒╙╒╩', '╨╫╒╨╫╥╩', '╩╨╨╨╫╛', '╠╥═╪╒', '╪╧╥╞╔', '╛╒╩╨╔╔╙', '╛╞╚╘', '╬═╟╪╩╬╠', '╤╧╒╥╚╧╞╓', '╘╧╦╤╠', '╚╨═╘╤╬╚╪', '╒╛╫╒╙╒╧', '╘╓╙╟', '╪╟╬', '╫╦╓╪╚╓╘', '╒╔╦╫╛╙╠╫', '╫╟╩╞╒╩═╬', '╘╧╒╨╪╩╓', '╚╨╦╟╒╦', '╩╚╔╨╬╞╓', '╛╤╒', '╦╛╘╓╛╞╥', '╔╒╩', '╓╘╙╒╚╘═', '╟╓╚╫╠╧╠╩', '╤╬╤╫╞', '╠╔╚╦╙╛╔╓', '╥╦╔╬', '╦╓╤╓', '╧╘╤╛╫╥', '╞╔╘', '╫╩╦╙╥╥╪╬', '╒╟╒╬╒═╩╘', '╩╤╬╛╧╤╞', '╙╚╞╔╨╨╨╚', '═╩╤╤', '╨╪╦╤╤╛╔═', '╫╙╥╤', '╬╪╛╤╧╒╘', '╘╘╤╥╥╬╔', '╠╨╤╔╛', '═╟╠╩', '╥╚╚╬', '╟╨╛╚╙╥╘', '╧╦╘╧╙', '╘╥╟╞╨╚', '╪╠╧', '╤╒═', '╥╦═╧╘', '╘╩╔╘═╒╩', '╬╙╙╓╚╒', '╩╨╙╞╟╪╤╬', '╒╞╒╦╘╪', '╩╪╨╬╤╙', '╔╛╟╧', '╙╪╨╥', '╫╬═╩╔', '╤╤╔╙', '╪╞╚╒╩═╒', '╦╠╥', '═╛╤╔╒', '╒╛╛═╟═╞╘', '╓╬╩╞╙╞╞╦', '═╨╚╔╩╞', '╛╙╬', '╬╠╦╧╤╒╛', '╪╛╒╓╔╨', '╓╨╘╫', '╘╛╠╚╔╓', '╛╧╬╓╚', '╞╪╓', '╫╪╫╛╪╚╠╛', '╧╨╒╫╠', '╞╧╦╠╪╨╤', '╓╦╙╧╫', '╥╩╪╦╞╫╛', '╪╞╩╩╒╫╛', '╞╒╛╞╔═╪', '╟╞╨╬╬╬', '╞╔╩', '╦╞╬╤╔╩═', '╪╛╠', '╒╟╔', '╧╓╪', '╒═╘╠╩', '╤╞╥╨╪╓', '╘╠╓╓', '╓╩╦╔╟', '╦╤╧╬╘╤╙╙', '╤╧╧', '╧╠╔╞╩╞╔╙', '╫╬╦╒╤╘╨', '╟╒╠╔', '╥╥╘╓', '╘═╠╓╔╔╥', '╦╪╟', '╛╧╙╙╤╪', '╛╠╪╒', '╒╛╨╘', '╫╟╓╔' ]\n",
    "rus = ['усовершенствование', 'клапан', 'дрессировщик', 'марс', 'камера', 'фильм', 'размер', 'верба', 'зрение', 'обед', 'слух', 'волчок', 'еда', 'даль', 'помочь', 'мышка', 'ошибка', 'штаб', 'аккуратненький', 'пиво', 'тренировка', 'шкода', 'наглядный', 'честь', 'помеха', 'лесоповал', 'кошмарный', 'клевета', 'спешка', 'резец', 'приписка', 'артериальный', 'круговорот', 'высота', 'возможность', 'гурьба', 'вербовка', 'мальчишка', 'масса', 'идиллия', 'гель', 'застенок', 'линия', 'гимнастика', 'проволочный', 'конкуренция', 'сторожевой', 'мотивация', 'дезинформация', 'мозг', 'тенор', 'победа', 'моторный', 'экзотический', 'боец', 'приветствие', 'пистолет', 'фауна', 'отдел', 'состав', 'квалификация', 'галета', 'беспощадно', 'княжество', 'обстоятельство', 'лодка', 'слог', 'лира', 'фирма', 'вагон', 'сцена', 'дисплей', 'кошка', 'принцип', 'стебелек', 'неспособный', 'кинозвезда', 'добивание', 'агония', 'образование', 'зоопарк', 'разрез', 'иконостас', 'протяженность', 'запад', 'дрема', 'пакость', 'ключ', 'аттракцион', 'пристанище', 'человечество', 'акваланг', 'визитер', 'подачка', 'существо', 'наблюдение', 'бактериологический', 'погибель', 'сечение', 'организация', 'ботаника', 'капут', 'босяк', 'беда', 'слово', 'противник', 'табурет', 'империалист', 'спазм', 'вяз', 'сигарета', 'улучшение', 'страничка', 'труба', 'теневой', 'прием', 'сыск', 'кувырок', 'принуждение', 'председатель', 'большой', 'рытвина', 'символика', 'кормилица', 'завоевание', 'кочка', 'место', 'зверинец', 'биополе', 'одуванчик', 'черт', 'услужливый', 'и', 'годовщина', 'билет', 'боеголовка', 'значение', 'лицо', 'старание', 'тело', 'насильно', 'сухонький', 'лесенка', 'горазд', 'виновник', 'гипофиз', 'будни', 'игра', 'пчела', 'вождение', 'транспарант', 'пыль', 'оптимист', 'очевидность', 'бацилла', 'успех', 'чем', 'преобразователь', 'апельсиновый', 'исключительность', 'культура', 'совестный', 'острие', 'вода', 'заспанный', 'прикрытие', 'фраза', 'наводчик', 'разумно', 'правоохранительный', 'планетолет', 'гадание', 'один', 'полый', 'запасник', 'направление', 'романтика', 'сват', 'картонка', 'смех', 'путаница', 'нашивка', 'дно', 'минерал', 'житель', 'способ', 'кросс', 'персональный', 'выздоровление', 'всплеск', 'весна', 'провинциал', 'организм', 'осознание', 'веточка', 'добрый', 'корзинка', 'период', 'зигзаг', 'население']\n",
    "d = dict(zip(tau, rus))\n",
    "note = '╦╪╟ ╪╧╥╞╔ ╒╟╒╬╒═╩╘ ╔╘╤╟╫╒ ╬╤╦╥╟ ╔╥╩╚╥╟ ╟╨╛╚╙╥╘ ╛╤╒ ╫╬═╩╔ ╧╨╒╫╠ ╦╪╟ ╪╧╥╞╔'\n",
    "for tw in note.split():\n",
    "    print(d[tw], end = ' ')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'╟╚╘╩': 'усовершенствование',\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",
       " '╘╞╧╥╥╟╟╬': 'гимнастика',\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",
       " '╬╬╤╨╛╬╪╧': 'пакость',\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",
       " '╧╘╤╛╫╥': 'одуванчик',\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",
       " '╧╨╒╫╠': 'один',\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",
       " '╫╟╓╔': 'население'}"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "d"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**А теперь введите перевод!**\n",
    "\n",
    "*Учтите, что стиль мышления таукитян сильно отличается от земного; у них в языке совсем нет глаголов, почти нет предлогов и наречий, полностью отсутствуют падежи и склонения. К счастью, слова друг от друга они отделяют пробелами. Постарайтесь перевести зашифрованную фразу не механически: хорошо бы понять ее смысл и записать ее в виде связного русского предложения – и с наречиями, и с глаголами. А может быть, Вы ее уже слышали раньше? Судьба вселенной в Ваших руках!*"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# перевод:\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<div align=\"right\">\n",
    "    \n",
    "<font size=+2> <em> Задачи с сайта <a href=\"http://pythontutor.ru\">ПитонТьютор</a> </em></font>\n",
    "</div>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Задача 1. Словарь синонимов**  \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": 21,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdin",
     "output_type": "stream",
     "text": [
      "synonims: hi hello\n",
      "synonims: bye goodbye\n",
      "synonims: list array\n",
      "word =  array\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "synonim:  list\n"
     ]
    }
   ],
   "source": [
    "# Решение\n",
    "d = {}\n",
    "n = 3\n",
    "for _ in range(n):\n",
    "    w1, w2 = input('synonims:').split()\n",
    "    d[w1] = w2\n",
    "    d[w2] = w1\n",
    "w = input('word = ') \n",
    "print('synonim: ', d[w])\n",
    "    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'hi': 'hello',\n",
       " 'hello': 'hi',\n",
       " 'bye': 'goodbye',\n",
       " 'goodbye': 'bye',\n",
       " 'list': 'array',\n",
       " 'array': 'list'}"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "d"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Задача 2. Выборы в США**  \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": 24,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdin",
     "output_type": "stream",
     "text": [
      "n =  5\n",
      "name, votes :  biden 11\n",
      "name, votes :  biden 45\n",
      "name, votes :  trump 4\n",
      "name, votes :  trump 63\n",
      "name, votes :  obama 7\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'biden': 56, 'trump': 67, 'obama': 7}\n"
     ]
    }
   ],
   "source": [
    "# Решение\n",
    "d = {}\n",
    "n = int(input('n = '))\n",
    "for i in range(n):\n",
    "    name, votes = input(\"name, votes : \").split()\n",
    "    d[name] = d.get(name, 0) + int(votes)\n",
    "print(d)    \n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "biden 56\n",
      "obama 7\n",
      "trump 67\n"
     ]
    }
   ],
   "source": [
    "for name, votes in sorted(d.items()):\n",
    "    print(name, votes)\n",
    "    "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Задача 3. Самое частое слово**  \n",
    "Дан текст: в первой строке задано число строк, далее идут сами строки. Выведите слово, которое в этом тексте встречается чаще всего. Если таких слов несколько, выведите то, которое меньше в лексикографическом порядке.\n",
    "\n",
    "*В качестве теста попробуйте использовать первые 5-7 строк из Дзен Питона.*"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "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": [
    "# Дзен Питона\n",
    "import this\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "name": "stdin",
     "output_type": "stream",
     "text": [
      "n:  5\n",
      ">  Beautiful is better than ugly\n",
      ">  Explicit is better than implicit\n",
      ">  Simple is better than complex\n",
      ">  Simple is better than complex\n",
      ">  Simple is better than complex\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "better\n"
     ]
    }
   ],
   "source": [
    "# Решение\n",
    "d = {}\n",
    "n = int(input('n: '))\n",
    "for i in range(n):\n",
    "    s = input('> ')\n",
    "    for w in s.split():\n",
    "        d[w] = d.get(w, 0) + 1\n",
    "mx = max(d.values())        \n",
    "a = [word for word in d if d[word]==mx]\n",
    "print(min(a))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'Beautiful': 1,\n",
       " 'is': 5,\n",
       " 'better': 5,\n",
       " 'than': 5,\n",
       " 'ugly': 1,\n",
       " 'Explicit': 1,\n",
       " 'implicit': 1,\n",
       " 'Simple': 3,\n",
       " 'complex': 3}"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "d"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Задача 4. Частотный анализ**  \n",
    "Дан текст: в первой строке записано количество строк в тексте, а затем сами строки. Выведите все слова, встречающиеся в тексте, по одному на каждую строку. Слова должны быть отсортированы по убыванию их количества появления в тексте, а при одинаковой частоте появления — в лексикографическом порядке.  \n",
    "*Указание. После того, как вы создадите словарь всех слов, вам захочется отсортировать его по частоте встречаемости слова. Желаемого можно добиться, если создать список, элементами которого будут кортежи из двух элементов: частота встречаемости слова и само слово. Например,*\n",
    "```python\n",
    "[(2, 'hi'), (1, 'what'), (3, 'is')]\n",
    "```\n",
    "*Тогда стандартная сортировка будет сортировать список кортежей, при этом кортежи сравниваются по первому элементу, а если они равны — то по второму. Это почти то, что требуется в задаче.*\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [],
   "source": [
    "# немного поменяем данные -> Дан список строк\n",
    "d = dict()\n",
    "data = ['if the implementation is hard to explain it is a bad idea',\n",
    "        'if the implementation is easy to explain it may be a good idea',\n",
    "        'now is better than never',\n",
    "        'although never is often better than right now',\n",
    "        'beautiful is better than ugly'\n",
    "       ]\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "is\n",
      "better\n",
      "than\n",
      "a\n",
      "explain\n",
      "idea\n",
      "if\n",
      "implementation\n",
      "it\n",
      "never\n",
      "now\n",
      "the\n",
      "to\n",
      "although\n",
      "bad\n",
      "be\n",
      "beautiful\n",
      "easy\n",
      "good\n",
      "hard\n",
      "may\n",
      "often\n",
      "right\n",
      "ugly\n"
     ]
    }
   ],
   "source": [
    "for s in data:\n",
    "    for w in s.split():\n",
    "        d[w] = d.get(w, 0) - 1\n",
    "a = [(n, w) for w, n in d.items()]\n",
    "for n, w in sorted(a):    \n",
    "    print(w)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<div align=\"right\">\n",
    "    \n",
    "<font size=+2> <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": 40,
   "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": 41,
   "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": 42,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "4.1853485107421875\n"
     ]
    },
    {
     "ename": "AssertionError",
     "evalue": "Слишком долго",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mAssertionError\u001b[0m                            Traceback (most recent call last)",
      "Cell \u001b[1;32mIn[42], line 13\u001b[0m\n\u001b[0;32m     11\u001b[0m dt \u001b[38;5;241m=\u001b[39m time()\u001b[38;5;241m-\u001b[39mt\n\u001b[0;32m     12\u001b[0m \u001b[38;5;28mprint\u001b[39m(dt)\n\u001b[1;32m---> 13\u001b[0m \u001b[38;5;28;01massert\u001b[39;00m dt\u001b[38;5;241m<\u001b[39m\u001b[38;5;241m1\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mСлишком долго\u001b[39m\u001b[38;5;124m'\u001b[39m\n",
      "\u001b[1;31mAssertionError\u001b[0m: Слишком долго"
     ]
    }
   ],
   "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": null,
   "metadata": {},
   "outputs": [],
   "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": 43,
   "metadata": {},
   "outputs": [],
   "source": [
    "# правильное хорошее решение\n",
    "def sum_two_ok(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": 44,
   "metadata": {},
   "outputs": [],
   "source": [
    "nums = [2,7,11,15]\n",
    "target = 9\n",
    "assert sum_two_ok(nums, target)==[0, 1], 'Тест1 не удался'\n",
    "\n",
    "nums = [3,2,4]\n",
    "target = 6\n",
    "assert sum_two_ok(nums, target)==[1,2], 'Тест2 не удался'\n",
    "\n",
    "nums = [3,3]\n",
    "target = 6\n",
    "assert sum_two_ok(nums, target)==[0,1], 'Тест3 не удался'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.0030770301818847656\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_ok(nums, target)==[1000,n-1000], 'Тест4 не удался'\n",
    "dt_ok = time()-t\n",
    "print(dt_ok)\n",
    "assert dt_ok<1, 'Слишком долго'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1360.1909189524251"
      ]
     },
     "execution_count": 46,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dt/dt_ok\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Дополнительно!!!.   \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": null,
   "metadata": {},
   "outputs": [],
   "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": null,
   "metadata": {},
   "outputs": [],
   "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.12.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
