{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Словари"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "\n",
    "Обычные списки представляют собой набор пронумерованных элементов, то есть для обращения к какому-либо элементу списка необходимо указать его номер. Номер элемента в списке однозначно идентифицирует сам элемент.            \n",
    "            \n",
    "Структура данных, позволяющая идентифицировать ее элементы не по числовому индексу, а по произвольному, называется ***словарем*** или ***ассоциативным массивом***. Соответствующая структура данных в языке Питон называется `dict`.          "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Словарь — неупорядоченная структура данных, которая позволяет хранить пары «ключ — значение». Доступ к значению осуществляется по ключу. В качестве ключа может выступать объект любого **неизменяемого** типа.\n",
    "\n",
    "Примеры словарей (из жизни):\n",
    "- собственно словарь. Орфографический, англо-русский, словарь синонимов и пр. Ключ - слово (строка), значение - толкование, варианты перевода, список синонимов.\n",
    "- база ИНН или СНИЛС. Ключ - уникальный номер или комбинация символов\n",
    "- база номеров бронирования авиабилетов. Ключ - шестисимвольный код, типа `I6YV3F`. Значение - список различных данных о пассажире, рейсе и т.п. \n",
    "- база номеров автомобилей"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Демонстрация"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "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": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "capitals"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Способы создания словаря \"вручную\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "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",
    "        </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": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[('Russia', 'Moscow'), ('China', 'Beijing'), ('USA', 'Washington')]"
      ]
     },
     "execution_count": 2,
     "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": 3,
   "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": 4,
   "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": 5,
   "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": 6,
   "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)",
      "\u001b[1;32m<ipython-input-6-68c7959b5c9a>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[0;32m      1\u001b[0m \u001b[1;31m# Если в словаре нет такого ключа,\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m      2\u001b[0m \u001b[1;31m# возникнет ошибка\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 3\u001b[1;33m \u001b[0mwhat\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mcapitals\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m'Armenia'\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[1;31mKeyError\u001b[0m: 'Armenia'"
     ]
    }
   ],
   "source": [
    "# Если в словаре нет такого ключа,\n",
    "# возникнет ошибка\n",
    "what = capitals['Armenia']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "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": 8,
   "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": 9,
   "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": 10,
   "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": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "dict_keys(['Russia', 'China', 'USA', 'France', 'Armenia'])\n",
      "dict_values(['Moscow', 'Beijing', 'Washington', 'Paris', 'Yerevan'])\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.values())\n",
    "print(capitals.items())\n"
   ]
  },
  {
   "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, 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": 14,
   "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": "markdown",
   "metadata": {},
   "source": [
    "**А теперь введите перевод!**\n",
    "\n",
    "*Учтите, что стиль мышления таукитян сильно отличается от земного; у них в языке совсем нет глаголов, почти нет предлогов и наречий, полностью отсутствуют падежи и склонения. К счастью, слова друг от друга они отделяют пробелами. Постарайтесь перевести зашифрованную фразу не механически: хорошо бы понять ее смысл и записать ее в виде связного русского предложения – и с наречиями, и с глаголами. А может быть, Вы ее уже слышали раньше? Судьба вселенной в Ваших руках!*"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# перевод:\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": [
    "<div style=\"color:blue\">\n",
    "\n",
    "**Задача 1. Номер появления слова**  \n",
    "В единственной строке записан текст. Для каждого слова из данного текста подсчитайте, сколько раз оно встречалось в этом тексте ранее.  \n",
    "*Словом считается последовательность непробельных символов идущих подряд, слова разделены одним или большим числом пробелов или символами конца строки.*\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "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",
    "\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": "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": 15,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "n:3\n",
      "2 synonims: hi hello\n",
      "2 synonims: bye goodbye\n",
      "2 synonims: list array\n"
     ]
    }
   ],
   "source": [
    "# Решение\n",
    "n = int(input(\"n:\"))\n",
    "d = {}\n",
    "for i in range(n):\n",
    "    s1, s2 = input('2 synonims: ').split()\n",
    "    d[s1] = s2\n",
    "    d[s2] = s1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "word:goodbye\n",
      "bye\n"
     ]
    }
   ],
   "source": [
    "word = input('word:')\n",
    "print(d[word])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<div style=\"color:blue\">\n",
    "    \n",
    "**Задача 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": null,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "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)    \n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "for key in sorted(d.keys()):\n",
    "    print(key, d[key])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Задача 4. Самое частое слово**  \n",
    "Дан текст: в первой строке задано число строк, далее идут сами строки. Выведите слово, которое в этом тексте встречается чаще всего. Если таких слов несколько, выведите то, которое меньше в лексикографическом порядке.\n",
    "\n",
    "*В качестве теста попробуйте использовать первые 5-7 строк из Дзен Питона.*"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "scrolled": true
   },
   "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"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "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",
      "> Complex is better than complicated\n",
      "> Flat is better than nested\n",
      "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": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "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"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['is', 'better', 'than']"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<div style=\"color:blue\">\n",
    "\n",
    "**Задача 5. Частотный анализ**  \n",
    "Дан текст: в первой строке записано количество строк в тексте, а затем сами строки. Выведите все слова, встречающиеся в тексте, по одному на каждую строку. Слова должны быть отсортированы по убыванию их количества появления в тексте, а при одинаковой частоте появления — в лексикографическом порядке.  \n",
    "*Указание. После того, как вы создадите словарь всех слов, вам захочется отсортировать его по частоте встречаемости слова. Желаемого можно добиться, если создать список, элементами которого будут кортежи из двух элементов: частота встречаемости слова и само слово. Например,*\n",
    "```python\n",
    "[(2, 'hi'), (1, 'what'), (3, 'is')]\n",
    "```\n",
    "*Тогда стандартная сортировка будет сортировать список кортежей, при этом кортежи сравниваются по первому элементу, а если они равны — то по второму. Это почти то, что требуется в задаче.*\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "d = dict()\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",
    "a = [(-d[w], w) for w in d]   # обратите внимание на минус!\n",
    "a.sort()\n",
    "\n",
    "for n, word in a:\n",
    "    print(word)\n",
    "\n",
    "# for w in a:\n",
    "#     print(w[1])\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "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": 22,
   "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": 23,
   "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": 31,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "16.280023097991943\n"
     ]
    },
    {
     "ename": "AssertionError",
     "evalue": "Слишком долго",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mAssertionError\u001b[0m                            Traceback (most recent call last)",
      "\u001b[1;32m<ipython-input-31-8119a6295071>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[0;32m     11\u001b[0m \u001b[0mdt\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mtime\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m-\u001b[0m\u001b[0mt\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m     12\u001b[0m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mdt\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 13\u001b[1;33m \u001b[1;32massert\u001b[0m \u001b[0mdt\u001b[0m\u001b[1;33m<\u001b[0m\u001b[1;36m0.1\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m'Слишком долго'\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[1;31mAssertionError\u001b[0m: Слишком долго"
     ]
    }
   ],
   "source": [
    "# тест проверки на скорость работы алгоритма\n",
    "from random import randint\n",
    "from time import time\n",
    "n = 10**5\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<0.1, 'Слишком долго'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0 - 3 1 - 5 2 - 7 3 - 11 4 - 0 5 - 5 \n",
      "--------------\n",
      "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",
    "print('\\n--------------')    \n",
    "for i, x in enumerate(a):\n",
    "    print(i, '-', x, end=' ')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [],
   "source": [
    "# правильное хорошее решение\n",
    "def sum_two_good(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": 27,
   "metadata": {},
   "outputs": [],
   "source": [
    "nums = [2,7,11,15]\n",
    "target = 9\n",
    "assert sum_two_good(nums, target)==[0, 1], 'Тест1 не удался'\n",
    "\n",
    "nums = [3,2,4]\n",
    "target = 6\n",
    "assert sum_two_good(nums, target)==[1,2], 'Тест2 не удался'\n",
    "\n",
    "nums = [3,3]\n",
    "target = 6\n",
    "assert sum_two_good(nums, target)==[0,1], 'Тест3 не удался'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.05000019073486328\n"
     ]
    }
   ],
   "source": [
    "# тест проверки на скорость работы алгоритма\n",
    "from random import randint\n",
    "from time import time\n",
    "n = 10**5\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_good(nums, target)==[1000,n-1000], 'Тест4 не удался'\n",
    "dt1 = time()-t\n",
    "print(dt1)\n",
    "assert dt1<1, 'Слишком долго'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "325.599219897385"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dt/dt1\n"
   ]
  },
  {
   "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.11.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
