{"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"provenance":[],"authorship_tag":"ABX9TyNVbTYfNxAn83J87dBFoma6"},"kernelspec":{"name":"python3","display_name":"Python 3"},"language_info":{"name":"python"}},"cells":[{"cell_type":"markdown","source":["# Словники"],"metadata":{"id":"ucMR2Ri0R8LP"}},{"cell_type":"markdown","source":["## Простий словник"],"metadata":{"id":"9OlI5-p2SB9R"}},{"cell_type":"markdown","source":["Візьмемо гру з інопланетними прибульцями, які мають різні кольори та приносять різну кількість очок гравцю. У наступному простому словнику зберігається інформація про одного конкретного прибульця:"],"metadata":{"id":"-I4Kv5nFSKVL"}},{"cell_type":"code","source":["{}\n","alien_0 = {'color': 'green', 'points': 5, \"7\": 8, 'name': 'Ivan'}\n","alien_1 = ['green', 5]\n"],"metadata":{"id":"TBvZxE7USPaN"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["## Робота зі словниками"],"metadata":{"id":"V1SJc_IUSXHr"}},{"cell_type":"markdown","source":["Словник у мові Python є сукупністю пар «ключ-значення». Кожен ключ зв'язується з деяким значенням, і програма може отримати значення, пов'язане із заданим ключем. Значення може бути число, рядок, список і навіть інший словник. Власне, будь-який об'єкт, що створюється у програмі Python, може стати значенням у словнику.\n","У Python словник полягає у фігурні дужки {}, в яких наводиться послідовність пар * \"ключ-значення\" *, як у попередньому прикладі:\n","* alien_0 = {'color': 'green', 'points': 5}"],"metadata":{"id":"r4shRGdmScIh"}},{"cell_type":"markdown","source":["## Звернення до значень у словнику"],"metadata":{"id":"A3cKsc-4SsqT"}},{"cell_type":"markdown","source":["Щоб отримати значення, пов'язане з ключем, вкажіть ім'я словника, а потім ключ у квадратних дужках:"],"metadata":{"id":"8B9VHU0DSyCj"}},{"cell_type":"code","source":["alien_0 = {'color': 'green', 'name': 'Ivan'}\n","alien_1 = ['green', 5]\n","print(alien_1[1])\n","print(alien_0['color'])\n","print(alien_0['name'])"],"metadata":{"id":"v6t09pGESya9","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1696934880442,"user_tz":-180,"elapsed":11,"user":{"displayName":"Іван Клопов","userId":"16257059839054245446"}},"outputId":"5ed25b4a-3a3c-4f72-a0f5-a2220c151fba"},"execution_count":1,"outputs":[{"output_type":"stream","name":"stdout","text":["5\n","green\n","Ivan\n"]}]},{"cell_type":"markdown","source":["Додавання нових пар «ключ-значення»"],"metadata":{"id":"xHL7qFqWS5Pe"}},{"cell_type":"markdown","source":["Словники відносяться до динамічних структур даних: у словник можна будь-якої миті додавати нові пари «ключ-значення». Для цього вказується ім'я словника, за яким у квадратних дужках слідує новий ключ з новим значенням. Додамо до словника alien_0 ще два атрибути: координати *x* та *y* для виведення зображення прибульця у певній позиції екрана. Припустимо, прибулець повинен відображатися біля лівого краю екрана, за 25 пікселів від верхнього краю. Оскільки система екранних координат зазвичай розташовується в лівому верхньому кутку, для розміщення прибульця біля лівого краю координата *x* повинна дорівнювати 0, а координата *y* - 25:"],"metadata":{"id":"skrObZerS-hx"}},{"cell_type":"code","source":["alien_0 = {'color': 'green', 'points': 5}\n","print(alien_0)\n","alien_0['x_position'] = 0\n","alien_0['y_position'] = 25\n","alien_0['name'] = 'Ivan'\n","print(alien_0)"],"metadata":{"id":"Obz4YRjfS_ee"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["## Створення порожнього словника"],"metadata":{"id":"ia-PZ0FlTF5p"}},{"cell_type":"markdown","source":["У деяких ситуаціях буває зручно (або навіть необхідно) почати з порожнього словника, а потім додавати нові елементи. Щоб почати заповнення порожнього словника, визначте словник з устою парою фігурних дужок, а потім додавайте нові пари «ключ-значення» (кожна пара на окремому рядку). Наприклад, ось як будується словник alien_0:"],"metadata":{"id":"rxr1llMoTOhv"}},{"cell_type":"code","source":["alien_0 = {}\n","print(alien_0)\n","alien_0['color'] = 'green'\n","alien_0['points'] = 5\n","print(alien_0)"],"metadata":{"id":"_a1DRYY-TXnw","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1696935116318,"user_tz":-180,"elapsed":256,"user":{"displayName":"Іван Клопов","userId":"16257059839054245446"}},"outputId":"1f8c4368-5b56-43b5-c9d0-2da281497173"},"execution_count":2,"outputs":[{"output_type":"stream","name":"stdout","text":["{}\n","{'color': 'green', 'points': 5}\n"]}]},{"cell_type":"markdown","source":["Зазвичай порожні словники використовуються при зберіганні даних, введених користувачем, або при написанні коду, що автоматично генерує велику кількість пар ключ-значення."],"metadata":{"id":"4el2xDwZTcLd"}},{"cell_type":"markdown","source":["## Зміна значень у словнику"],"metadata":{"id":"gXQaVyJNTgjX"}},{"cell_type":"markdown","source":["Чтобы изменить значение в словаре, укажите имя словаря с ключом в квадратных скобках, а затем новое значение, которое должно быть связано с этим ключом. Допустим, в процессе игры цвет пришельца меняется с зеленого на желтый:"],"metadata":{"id":"oFlc5ZgSTlR-"}},{"cell_type":"code","source":["alien_0 = {'color': 'green'}\n","print(\"The alien is \" + alien_0['color'] + \".\")\n","alien_0['color'] = 'yellow'\n","print(\"The alien is now \" + alien_0['color'] + \".\")"],"metadata":{"id":"aCw94xwlTg9L","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1696935216689,"user_tz":-180,"elapsed":263,"user":{"displayName":"Іван Клопов","userId":"16257059839054245446"}},"outputId":"5b5a14b3-6943-4ca1-889e-51d030a3f8bc"},"execution_count":3,"outputs":[{"output_type":"stream","name":"stdout","text":["The alien is green.\n","The alien is now yellow.\n"]}]},{"cell_type":"markdown","source":["Розглянемо цікавіший приклад: відстеження позиції прибульця, який може рухатися з різною швидкістю. Ми збережемо значення, що становить поточну швидкість прибульця, і використовуємо його для визначення величини горизонтального усунення:"],"metadata":{"id":"gQDQ-JY2Tur0"}},{"cell_type":"code","source":["alien_0 = {'x_position': 0, 'y_position': 25, 'speed': 'medium'}\n","print(\"Original x-position: \" + str(alien_0['x_position']))\n","# Прибулець переміщається вправо. # Обчислюємо величину зміщення виходячи з поточної швидкості.\n","if alien_0['speed'] == 'slow':\n"," x_increment = 1\n","elif alien_0['speed'] == 'medium':\n"," x_increment = 2\n","else:\n"," # Прибулець рухається швидко.\n"," x_increment = 3 # Нова позиція дорівнює сумі старої позиції та прирощення.\n","alien_0['x_position'] = alien_0['x_position'] + x_increment # 0 + 2\n","print(\"New x-position: \" + str(alien_0['x_position']))"],"metadata":{"id":"6mm_Tn5AT1xx","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1696935594995,"user_tz":-180,"elapsed":311,"user":{"displayName":"Іван Клопов","userId":"16257059839054245446"}},"outputId":"c4108e00-ea6f-4782-a9bc-bc893353df8d"},"execution_count":4,"outputs":[{"output_type":"stream","name":"stdout","text":["Original x-position: 0\n","New x-position: 2\n"]}]},{"cell_type":"markdown","source":["## Видалення пар «ключ-значення»"],"metadata":{"id":"F9UcUtGMURbz"}},{"cell_type":"markdown","source":["Когда информация, хранящаяся в словаре, перестает быть ненужной, пару «ключ—значение» можно полностью удалить при помощи команды *del*. При вызове достаточно передать имя словаря и удаляемый ключ. Например, в следующем примере из словаряa lien_0 удаляется ключ'points'вместе со значением:"],"metadata":{"id":"mBQwAUfWUUoh"}},{"cell_type":"code","source":["alien_0 = {'color': 'green', 'points': 5}\n","print(alien_0)\n","del alien_0['points']\n","print(alien_0)\n","del alien_0['color']\n","print(alien_0)"],"metadata":{"id":"r7l06h54UVSw","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1696935783138,"user_tz":-180,"elapsed":297,"user":{"displayName":"Іван Клопов","userId":"16257059839054245446"}},"outputId":"a1572d9c-4338-4fd1-f620-d7025f403ef7"},"execution_count":5,"outputs":[{"output_type":"stream","name":"stdout","text":["{'color': 'green', 'points': 5}\n","{'color': 'green'}\n","{}\n"]}]},{"cell_type":"markdown","source":["## Словарь с однотипными объектами"],"metadata":{"id":"r3rGJOMRUbkf"}},{"cell_type":"markdown","source":["У попередньому прикладі в словнику зберігалася різноманітна інформація про один об'єкт (прибульце з комп'ютерної гри). Словник також може використовуватися для зберігання одного виду інформації про багато об'єктів. Припустимо, ви хочете провести опитування серед колег і дізнатися про їх улюблену мову програмування. Результати простого опитування зручно зберегти всловнику:"],"metadata":{"id":"aPq-Pv0pUkgH"}},{"cell_type":"code","source":["favorite_languages = {'jen': 'python',\n"," 'sarah': 'c',\n"," 'edward': 'ruby',\n"," 'phil': 'python',}"],"metadata":{"id":"2Cab4tnrUk3W"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["Пари в словнику цього запису розбиті по рядках. Ключами є імена учасників опитування, а значення – обрані ними мови. Якщо ви знаєте, що для визначення словника потрібно більше одного рядка, натисніть клавішу Enter після введення фігурної дужки, що відкриває. Забезпечте наступний рядок відступом на один рівень (чотири пробіли) і запишіть першу пару «ключ-значення», поставивши за нею кому. Після цього при натисканні Enter ваш текстовий редактор автоматично постачатиме всі наступні пари таким же відступом, як у першої. Завершивши визначення словника, додайте фігурну дужку, що закриває, в новому рядку після останньої пари «ключ-значення» і забезпечте її відступом на один рівень, щоб вона була вирівняна по ключах. За останньою парою також рекомендується включити кому, щоб при необхідності все було готове до додавання нової пари «ключ-значення» у наступному рядку."],"metadata":{"id":"ZCVGA8DiUoVb"}},{"cell_type":"markdown","source":["### Challenge 1\n","Людина: використовуйте словник для збереження інформації про\n","відомому вам людині. Збережіть ім'я, прізвище, вік та місто,\n","якому живе ця людина. Словник повинен містити ключі з такими\n","іменами, як first_name, last_name, age та city. Виведіть кожний фрагмент\n","інформації, що зберігається у словнику."],"metadata":{"id":"GsrOfhY3xm69"}},{"cell_type":"markdown","source":["### Challenge 2\n","Улюблені числа: використовуйте словник для зберігання коханих\n","чисел. Візьміть п'ять імен та використовуйте їх як ключі словника.\n","Придумайте улюблене число для кожної людини та збережіть її як\n","значення у словнику. Виведіть ім'я кожної людини та її улюблене число.\n","Щоб завдання стало більш цікавим, опитайте кількох друзів і\n","Зберіть реальні дані для своєї програми."],"metadata":{"id":"111Hdv8pxsGb"}},{"cell_type":"markdown","source":["### Challenge 3\n","\n","Глосарій: словники Python можуть використовуватись для\n","моделювання «справжнього» словника (щоб не створювати плутанини,\n","назвемо його «глосарієм»).\n","Згадайте п'ять термінів із області програмування, які ви\n","дізналися у попередніх темах. Використовуйте ці слова як ключі глосарію, а\n","їх визначення – як значення.\n","Виведіть кожне слово та його визначення акуратно\n","відформатованому вигляді. Наприклад, ви можете вивести слово, потім\n","двокрапка та визначення; або ж слово в одному рядку, а його визначення\n","– з відступом у наступному рядку. Використовуйте символ нового рядка (\\n)\n","для вставки порожніх рядків між парами «слово-визначення» у вихідні\n","даних."],"metadata":{"id":"V0T1WvLmx0r9"}},{"cell_type":"markdown","source":["## Перебір словника"],"metadata":{"id":"2lascfjGUy4O"}},{"cell_type":"markdown","source":["Словник Python може містити кілька пар «ключ-значення», і мільйони таких пар. Оскільки у словнику може зберігатися великий обсяг даних, Python надає засоби для перебору елементів словника. Інформація може зберігатися у словниках по-різному, тому передбачено різні способи перебору. Програма може перебрати всі пари \"ключ-значення\" у словнику, тільки ключі або тільки значення."],"metadata":{"id":"v8D8mc7aU4rx"}},{"cell_type":"markdown","source":["### Перебір всіх пар «ключ-значення»"],"metadata":{"id":"5gXy4gIzU9HG"}},{"cell_type":"code","source":["user_0 = {\n"," 'username': 'efermi',\n"," 'first': 'enrico',\n"," 'last': 'fermi',\n","}\n","for key, value in user_0.items():\n"," print(\"\\nKey: \" + key)\n"," print(\"Value: \" + value)"],"metadata":{"id":"ZP50Zb9HVDU0","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1696936087673,"user_tz":-180,"elapsed":244,"user":{"displayName":"Іван Клопов","userId":"16257059839054245446"}},"outputId":"868230e2-5506-425c-9887-35576677086e"},"execution_count":6,"outputs":[{"output_type":"stream","name":"stdout","text":["\n","Key: username\n","Value: efermi\n","\n","Key: first\n","Value: enrico\n","\n","Key: last\n","Value: fermi\n"]}]},{"cell_type":"code","source":["favorite_languages = {\n"," 'jen': 'python',\n"," 'sarah': 'c',\n"," 'edward': 'ruby',\n"," 'phil': 'python',\n","}\n","for keys, value in favorite_languages.items():\n"," print(keys.title() + \"'s favorite language is \" +value.title() + \".\")"],"metadata":{"id":"sWvt6hG-VGsL"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["### Перебір усіх ключів у словнику"],"metadata":{"id":"7IaK43gZVNeg"}},{"cell_type":"markdown","source":["Метод keys() зручний у тих випадках, коли ви не збираєтеся працювати з усіма значеннями у словнику. Переберемо словник favorite_languages і виведемо імена всіх людей, які брали участь в опитуванні:"],"metadata":{"id":"ckXa4HJgVSVf"}},{"cell_type":"code","source":["favorite_languages = {\n"," 'jen': 'python',\n"," 'sarah': 'c',\n"," 'edward': 'ruby',\n"," 'phil': 'python',\n","}\n","for name in favorite_languages.keys():\n"," print(name.title())"],"metadata":{"id":"22ADHM4EVTKJ"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["Щоб звернутися в циклі до значення, пов'язаного з ключем, що вас цікавить, використовуйте поточний ключ. Наприклад виведемо для пари друзів повідомлення про обрану ними мову. Ми переберемо імена у словнику, як це робилося раніше, але коли ім'я збігається з ім'ям одного з друзів, програма виводитиме спеціальне повідомлення про їх улюблену мову:"],"metadata":{"id":"XOHC_IHlVcNe"}},{"cell_type":"code","source":["favorite_languages = {\n"," 'jen': 'python',\n"," 'sarah': 'c',\n"," 'edward': 'ruby',\n"," 'phil': 'python',\n","}\n","friends = ['phil', 'sarah']\n","for name in favorite_languages.keys():\n"," print(name.title())\n"," if name in friends:\n"," print(\" Hi \" + name.title() +\", I see your favorite language is \" + favorite_languages[name].title() + \"!\")"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"PvfVm3RWVcpO","executionInfo":{"status":"ok","timestamp":1695611745055,"user_tz":-180,"elapsed":6,"user":{"displayName":"Іван Клопов","userId":"16257059839054245446"}},"outputId":"a30bbd38-c1a7-432c-ad65-be7aee0f7412"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["Jen\n","Sarah\n"," Hi Sarah, I see your favorite language is C!\n","Edward\n","Phil\n"," Hi Phil, I see your favorite language is Python!\n"]}]},{"cell_type":"markdown","source":["Метод keys() також може використовуватися для перевірки того, чи брала участь конкретна людина в опитуванні:"],"metadata":{"id":"NdtqyS64VjxF"}},{"cell_type":"code","source":["favorite_languages = {\n"," 'jen': 'python',\n"," 'sarah': 'c',\n"," 'edward': 'ruby',\n"," 'phil': 'python',}\n","if 'erin' not in favorite_languages.keys():\n"," print(\"Erin, please take our poll!\")"],"metadata":{"id":"nmuICL3_VkUq"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["## Упорядкований перебір ключів словника"],"metadata":{"id":"XJwy4EUDVqSz"}},{"cell_type":"markdown","source":["Словник завжди підтримує зв'язок між ключем та пов'язаним із ним значенням,\n","Проте порядок отримання елементів зі словника непередбачуваний. Втім, це не створює проблем, тому що зазвичай потрібно лише отримати правильне значення, пов'язане з кожним ключем. Один із способів отримання елементів у певному порядку заснований на сортуванні ключів, що повертаються циклом for. Для отримання впорядкованої копії ключів можна скористатися функцією *sorted()*:"],"metadata":{"id":"9JaLzSFGWCSh"}},{"cell_type":"code","source":["favorite_languages = {\n"," 'jen': 'python',\n"," 'sarah': 'c',\n"," 'edward': 'ruby',\n"," 'phil': 'python',\n","}\n","for name in sorted(favorite_languages.keys()):\n"," print(name.title() + \", thank you for taking the poll.\")"],"metadata":{"id":"75O3crrcWCxC","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1696936391781,"user_tz":-180,"elapsed":243,"user":{"displayName":"Іван Клопов","userId":"16257059839054245446"}},"outputId":"279261f4-8ad5-4d26-db4b-ba9fc3fd5e54"},"execution_count":7,"outputs":[{"output_type":"stream","name":"stdout","text":["Edward, thank you for taking the poll.\n","Jen, thank you for taking the poll.\n","Phil, thank you for taking the poll.\n","Sarah, thank you for taking the poll.\n"]}]},{"cell_type":"markdown","source":["## Перебір усіх значень у словнику"],"metadata":{"id":"_7dVuyvYWMrV"}},{"cell_type":"markdown","source":["Якщо вас насамперед цікавлять значення, що містяться у словнику, використовуйте метод values() для отримання списку значень без ключів. Допустимо, ви хочете просто отримати список усіх мов, обраних в опитуванні, і вас не цікавлять імена людей, які вибрали кожну мову:"],"metadata":{"id":"bkbjb54UWSsi"}},{"cell_type":"code","source":["favorite_languages = {\n"," 'jen': 'python',\n"," 'sarah': 'c',\n"," 'edward': 'ruby',\n"," 'phil': 'python',\n","}\n","print(\"The following languages have been mentioned:\")\n","for language in favorite_languages.values():\n"," print(language.title())"],"metadata":{"id":"KgXJW71GWTKE"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["Значення витягуються зі словника без перевірки можливі повторення. Для невеликих словників це може бути прийнятним, але в опитуваннях з великою кількістю респондентів список буде містити занадто багато дублікатів. Щоб отримати список вибраних мов без повторень, можна скористатися множиною *(set)*."],"metadata":{"id":"YJ_imjGkWa_O"}},{"cell_type":"code","source":["favorite_languages = {\n"," 'jen': 'python',\n"," 'sarah': 'c',\n"," 'edward': 'ruby',\n"," 'phil': 'python',\n","}\n","print(\"The following languages have been mentioned:\")\n","for language in set(favorite_languages.values()):\n"," print(language.title())"],"metadata":{"id":"26NNJjnzWbX_"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["### Challenge 4\n","Глосарій 2: тепер, коли ви знаєте, як перебрати елементи\n","словника, спростіть код із вправи 6-3, замінивши серію команд print\n","циклом, що перебирає ключі та значення словника. Коли ви будете\n","впевнені в тому, що цикл працює, додайте до глосарію ще п'ять термінів Python. При повторному запуску програми нові слова та значення\n","повинні бути автоматично включені у висновок."],"metadata":{"id":"1q36VPDdx71w"}},{"cell_type":"markdown","source":["### Challenge 5\n","\n","Ріки: створіть словник з трьома великими річками та країнами,\n","яким протікає кожна річка. Одна з можливих пар «ключ –\n","значення» - 'nile': 'egypt'.\n","Використовуйте цикл для виведення повідомлення зі згадкою річки та країни - наприклад, \"The Nile runs through Egypt.\"\n","Використовуйте цикл для виведення назви кожної річки, включеної до\n","словник.\n","Використовуйте цикл для виведення назви кожної країни, включеної до\n","словник."],"metadata":{"id":"SHe9SHv_yBgP"}},{"cell_type":"markdown","source":["### Challenge 6\n","Опитування.\n","Створіть список людей, які повинні брати участь в опитуванні\n","щодо улюбленої мови програмування. Увімкніть деякі імена,\n","які вже присутні у списку, та деякі імена, яких у списку\n","ще немає.\n","Переберіть список людей, які мають брати участь у опитуванні. Якщо\n","вони вже пройшли опитування, виведіть повідомлення із вдячністю за участь.\n","Якщо вони ще не проходили опитування, виведіть повідомлення із пропозицією\n","взяти участь."],"metadata":{"id":"LwZ3mENxyEcx"}},{"cell_type":"markdown","source":["## Вкладення"],"metadata":{"id":"pepYUl73WiNw"}},{"cell_type":"markdown","source":["Іноді потрібно зберегти множину словників у списку або зберегти список як значення елемента словника. Створення складних структур такого роду називається вкладенням. Ви можете вкласти багато словників у список, список елементів у словник або навіть словник у середину іншого словника. Як показують такі приклади, вкладення — надзвичайно потужний механізм."],"metadata":{"id":"aMjKzOjZWnZS"}},{"cell_type":"markdown","source":["### Список словників"],"metadata":{"id":"ajBRZF4CWtMG"}},{"cell_type":"markdown","source":["Словник lien_0 містить різноманітну інформацію про одного прибульця, але в ньому немає місця для зберігання інформації про другого прибульця, не кажучи вже про весь екран, забитий прибульцями. Як змоделювати флот вторгнення? Наприклад, можна створити список прибульців, в якому кожен елемент є словником з інформацією про прибульця. Наступний код будує список із трьох прибульців:"],"metadata":{"id":"GFrrnIMAWzXp"}},{"cell_type":"code","source":["alien_0 = {'color': 'green', 'points': 5}\n","alien_1 = {'color': 'yellow', 'points': 10}\n","alien_2 = {'color': 'red', 'points': 15}\n","aliens = [alien_0, alien_1, alien_2]\n","for alien in aliens:\n"," print(alien)"],"metadata":{"id":"3LZROuvtW0BK"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["Звичайно, в реалістичному прикладі будуть використовуватися більше трьох прибульців, які генеруватимуться автоматично. У наступному прикладі функція *range()* створює флот із 30 прибульців:"],"metadata":{"id":"LMnKQ2qZW7_v"}},{"cell_type":"code","source":["# Створення порожнього списку для зберігання прибульців.\n","aliens = []\n","# Створення 30 зелених прибульців.\n","for alien_number in range(30):\n"," new_alien = {\n"," 'color': 'green',\n"," 'points': 5,\n"," 'speed': 'slow'}\n"," aliens.append(new_alien)\n","# Виведення перших 5 прибульців:\n","for alien in aliens[:5]:\n"," print(alien)\n","print(\"...\")\n","# Виведення кількості створених прибульців\n","print(\"Total number of aliens: \" + str(len(aliens)))"],"metadata":{"id":"8mPicJn0W8pc"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["Всі прибульці мають однакові характеристики, але Python розглядає кожного прибульця як окремий об'єкт, що дозволяє змінювати атрибути кожного власника окремо. Як працювати з таким безліччю? Уявіть, що в цій грі деякі прибульці змінюють колір і починають рухатися швидше. Коли час зміни кольорів, ми можемо скористатися циклом for і командою if зміни кольору. Наприклад, щоб перетворити перших трьох прибульців у жовтих, які рухаються із середньою швидкістю та приносять гравцю по 10 очок, можна діяти так:"],"metadata":{"id":"6YmffeZqXYgQ"}},{"cell_type":"code","source":["# Створення порожнього списку для зберігання пришельцев.aliens = []\n","# Створення 30 зелених прибульців.for alien_number in range (0,30):\n","new_alien = {\n"," 'color': 'green',\n"," 'points': 5,\n"," 'speed': 'slow'}\n","aliens.append(new_alien)\n","for alien in aliens[0:3]:\n"," if alien['color'] == 'green':\n"," alien['color'] = 'yellow'\n"," alien['speed'] = 'medium'\n"," alien['points'] = 10\n","# Виведення перших 5 прибульців:\n","for alien in aliens[0:5]:\n"," print(alien)\n","print(\"...\")"],"metadata":{"id":"x6y6eYc5XY21","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1695805374486,"user_tz":-180,"elapsed":373,"user":{"displayName":"Іван Клопов","userId":"16257059839054245446"}},"outputId":"a529059b-de68-4bde-da4a-d581dc9dc460"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["{'color': 'yellow', 'points': 10, 'speed': 'medium'}\n","{'color': 'yellow', 'points': 10, 'speed': 'medium'}\n","{'color': 'yellow', 'points': 10, 'speed': 'medium'}\n","{'color': 'green', 'points': 5, 'speed': 'slow'}\n","{'color': 'green', 'points': 5, 'speed': 'slow'}\n","...\n"]}]},{"cell_type":"markdown","source":["Щоб змінити перших трьох прибульців, ми перебираємо елементи зрізу, що включає лише перших трьох прибульців. В даний момент всі прибульці зелені ('green'), але так буде не завжди, тому ми пишемо команду if, яка гарантує, що будуть змінюватися тільки зелені прибульці. Якщо прибулець зелений, його колір змінюється на жовтий ('yellow'), швидкість на середню ('medium'), а нагорода збільшується до 10 очок."],"metadata":{"id":"RkHo_fYMXbe3"}},{"cell_type":"markdown","source":["Цикл можна розширити, додавши блок elif для перетворення жовтих прибульців на червоних-швидких і гравців, що приносять, по 15 очок. Ми не станемо наводити весь код, а цикл виглядає так:"],"metadata":{"id":"QxThHpDYYvjV"}},{"cell_type":"code","source":["for alien in aliens[0:3]:\n"," if alien['color'] == 'green':\n"," alien['color'] = 'yellow'\n"," alien['speed'] = 'medium'\n"," alien['points'] = 10\n"," elif alien['color'] == 'yellow':\n"," alien['color'] = 'red'\n"," alien['speed'] = 'fast'\n"," alien['points'] = 15"],"metadata":{"id":"QMgbwBFbYwFh"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["## Список у словнику"],"metadata":{"id":"oREa7PuDaIMs"}},{"cell_type":"markdown","source":["Іноді буває зручно помістити список у словник замість того, щоб поміщати словник у список. Уявіть, як би ви описали у програмі замовлену піцу. Якщо обмежитись лише списком, зберегти вдасться хіба що список доповнень до піци. При використанні словника список доповнень може бути лише одним аспектом опису піци.\n","У наступному прикладі для кожної піци зберігаються два види інформації: тип тесту і список доповнень. Список додатків є значення, пов'язане з ключем 'toppings'. Щоб використовувати елементи у списку, потрібно вказати ім'я словника та ключ 'toppings', як і будь-якого іншого значення у словнику. Замість одного значення буде отримано список додатків:"],"metadata":{"id":"sXWlCIjpaGvf"}},{"cell_type":"code","source":["# Збереження інформації про замовлену піцу.\n","pizza = {\n"," 'crust': 'thick',\n"," 'toppings': ['mushrooms', 'extra cheese'],\n"," }\n","# Опис замовлення.\n","print(\"You ordered a \" + pizza['crust'] + \"-crust pizza \" +\n"," \"with the following toppings:\")\n","for topping in pizza['toppings']: print(\"\\t\" + topping)"],"metadata":{"id":"JbAsPHxLaHDo"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["Вкладення списку в словник може застосовуватися щоразу, коли з одним ключем словника має бути пов'язане більше значення. Якби у попередньому прикладі з мовами програмування відповіді зберігалися у списку, один учасник опитування міг би вибрати одразу кілька улюблених мов. При переборі словника значення, пов'язане з кожною людиною, являло собою список мов (замість однієї мови.) У циклі for словника створюється інший цикл для перебору\n","списку мов, пов'язаних із кожним учасником:"],"metadata":{"id":"SZZDONJDb5N2"}},{"cell_type":"code","source":["favorite_languages = {\n","'jen': ['python', 'ruby'],\n"," 'sarah': ['c'],\n"," 'edward': ['ruby', 'go'],\n"," 'phil': ['python', 'haskell'],\n"," }\n","for name, languages in favorite_languages.items():\n"," print(\"\\n\" + name.title() + \"'s favorite languages are:\")\n","for language in languages: print(\"\\t\" + language.title())"],"metadata":{"id":"Ca3-inNHb5iT"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["## Словник у словнику"],"metadata":{"id":"Xrr8mMKOcNJ7"}},{"cell_type":"markdown","source":["Словник також можна вкласти в інший словник, але код код швидко ускладнюється. Наприклад, якщо на сайті є кілька користувачів з унікальними іменами, ви можете використовувати імена користувачів як ключі у словнику. Інформація про кожного користувача зберігається у словнику, який використовується як значення, пов'язане з ім'ям. У наступному прикладі про кожного користувача зберігаються три види інформації: ім'я, прізвище та місце проживання. Щоб отримати доступ до цієї інформації, переберіть імена користувачів та словник з інформацією, пов'язаною з кожним ім'ям:"],"metadata":{"id":"D5zrN6ROcWSg"}},{"cell_type":"code","source":["users = {\n"," 'aeinstein': {\n"," 'first': 'albert',\n"," 'last': 'einstein',\n"," 'location': 'princeton',\n"," },\n"," 'mcurie': {\n"," 'first': 'marie',\n"," 'last': 'curie',\n"," 'location': 'paris',\n"," },\n","}\n","for username, user_info in users.items():\n"," print(\"\\nUsername: \" + username)\n"," full_name = user_info['first'] + \" \" + user_info['last']\n"," location = user_info['location']\n"," print(\"\\tFull name: \" + full_name.title())\n"," print(\"\\tLocation: \" + location.title())"],"metadata":{"id":"NuwZR0P7cYWs"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["### Challenge 7\n","Люди: почніть із програми, написаної для вправи 5-1.\n","Створіть два нових словники, які представляють різних людей, і збережіть усі\n","три словники у списку з ім'ям людей. Переберіть елементи у списку людей. У\n","процесі перебору виведіть всю наявну інформацію про кожного\n","людині."],"metadata":{"id":"kUurtTakyJZM"}},{"cell_type":"markdown","source":["### Challenge 8\n","Домашні тварини: створіть кілька словників, імена яких\n","представляють прізвиська свійських тварин. У кожному словнику збережіть\n","інформацію про вид тварини та ім'я власника. Збережіть словники у списку з ім'ям pets. Перейдіть до списку. У процесі перебору\n","виведіть всю наявну інформацію про кожну тварину."],"metadata":{"id":"pGNjpiZtySBf"}},{"cell_type":"markdown","source":["### Challenge 9\n","Улюблені місця: створіть словник з іменем favorite_places.\n","Придумайте назви трьох місць, які стануть ключами словника, та\n","Збережіть для кожної людини від одного до трьох улюблених місць. Щоб\n","завдання стало цікавішим, опитайте кількох друзів і зберіть\n","реальні дані своєї програми. Переберіть дані у словнику,\n","виведіть ім'я кожної людини та її улюблені місця."],"metadata":{"id":"d6o-CJ0XyTEu"}},{"cell_type":"markdown","source":["### Challenge 10\n","Улюблені числа: змініть програму з вправи 5-2 ,\n","щоб для кожної людини можна було зберігати більше одного коханого\n","числа. Виведіть ім'я кожної людини у списку та її улюблені числа."],"metadata":{"id":"gFNZSIBKyWX5"}},{"cell_type":"markdown","source":["### Challenge 11\n","Міста: створіть словник з ім'ям cities. Використовуйте назви\n","трьох міст як ключі словника. Створіть словник з інформацією про\n","кожному місті; увімкніть до нього країну, в якій розташоване місто,\n","приблизну чисельність населення та один примітний факт,\n","що відноситься до цього міста. Ключі словника кожного міста мають називатися country, population та fact. Виведіть назву кожного міста та всю\n","збережену інформацію про нього."],"metadata":{"id":"bg0IC11jybHT"}},{"cell_type":"markdown","source":["### Challenge 12\n","Розширення: приклади, з якими ми працюємо, стали достатньо\n","складними, і в них можна вносити різноманітні удосконалення.\n","Скористайтеся одним із прикладів цього розділу та розширте його: додайте\n","нові ключі та значення, змініть контекст програми або покращіть\n","форматування виводу."],"metadata":{"id":"DVavFmq8yekK"}}]}