{"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"provenance":[],"authorship_tag":"ABX9TyNhBBIfuydJvPmVWUSN/5S1"},"kernelspec":{"name":"python3","display_name":"Python 3"},"language_info":{"name":"python"}},"cells":[{"cell_type":"markdown","source":["# Робота зі списками"],"metadata":{"id":"TiaQgVJn_Zk9"}},{"cell_type":"markdown","source":["## Перебір всього списку"],"metadata":{"id":"hJ4c5iNi_n5n"}},{"cell_type":"markdown","source":["Типове завдання з області програмування - перебрати всі елементи списку і виконати з кожним елементом одну й ту саму операцію. Наприклад, у комп'ютерній грі всі екранні об'єкти можуть зміщуватися на однакову величину, або в списку чисел до кожного елемента може застосовуватися та сама статистична операція. А можливо, вам потрібно вивести всі заголовки зі списку статей на сайті. У ситуаціях, які потребують застосування однієї дії до кожного елемента списку, можна скористатися циклами for."],"metadata":{"id":"1LTgQz85_uyu"}},{"cell_type":"markdown","source":["Допустимо, є список з іменами фокусників, і ви хочете вивести кожне ім'я зі списку. Звичайно, можна звернутися до кожного елемента окремо, але такий підхід створює низку проблем. По-перше, для дуже довгих списків все зведеться до одноманітних повторень. По-друге, за будь-якої зміни довжини списку в програму доведеться вносити зміни. Цикл for вирішує обидві проблеми: Python стежитиме за всіма технічними деталями у своїй внутрішній реалізації."],"metadata":{"id":"yBCbuOGk_v_k"}},{"cell_type":"code","source":["magicians = ['alice', 'david', 'carolina']\n","for car in magicians:\n"," print(car)"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"3ZgMkPSG_oVE","executionInfo":{"status":"ok","timestamp":1678443281811,"user_tz":-120,"elapsed":8,"user":{"displayName":"Іван Клопов","userId":"16257059839054245446"}},"outputId":"cca14ccf-03e4-4df9-c9d1-6cf70ec87070"},"execution_count":1,"outputs":[{"output_type":"stream","name":"stdout","text":["alice\n","david\n","carolina\n"]}]},{"cell_type":"markdown","source":["## Більш складні дії в циклах for"],"metadata":{"id":"QP7JXv--BYdz"}},{"cell_type":"markdown","source":["В цикле for с каждым элементом списка может выполняться практически любое действие. Дополним предыдущий пример, чтобы программа выводила для каждого фокусника отдельное сообщение:"],"metadata":{"id":"heBfLRV-Bozl"}},{"cell_type":"code","source":["magicians = ['alice', 'david', 'carolina']\n","for magician in magicians:\n"," print(magician.title() + \", that was a great trick!\")"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"CAUJpvOgBpLP","executionInfo":{"status":"ok","timestamp":1678443513579,"user_tz":-120,"elapsed":7,"user":{"displayName":"Іван Клопов","userId":"16257059839054245446"}},"outputId":"8fddb418-63d9-424b-f1c1-dd1b41a4ce65"},"execution_count":3,"outputs":[{"output_type":"stream","name":"stdout","text":["Alice, that was a great trick!\n","David, that was a great trick!\n","Carolina, that was a great trick!\n"]}]},{"cell_type":"code","source":["magicians = ['alice', 'david', 'carolina']\n","for magician in magicians:\n"," print(magician.title() + \", that was a great trick!\")\n"," print(\"I can't wait to see your next trick, \" + magician.title() + \".\\n\")"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"4mivjGNsB9ub","executionInfo":{"status":"ok","timestamp":1678443538714,"user_tz":-120,"elapsed":423,"user":{"displayName":"Іван Клопов","userId":"16257059839054245446"}},"outputId":"f1078df0-f250-4251-99ae-8df5f6456ac6"},"execution_count":4,"outputs":[{"output_type":"stream","name":"stdout","text":["Alice, that was a great trick!\n","I can't wait to see your next trick, Alice.\n","\n","David, that was a great trick!\n","I can't wait to see your next trick, David.\n","\n","Carolina, that was a great trick!\n","I can't wait to see your next trick, Carolina.\n","\n"]}]},{"cell_type":"markdown","source":["Тіло циклу for може містити скільки завгодно рядків коду. Насправді часто потрібно виконати у циклі for кілька різних операцій кожного елемента списку."],"metadata":{"id":"DFDB-39tCFuX"}},{"cell_type":"markdown","source":["## Виконання дій після циклу for"],"metadata":{"id":"R-Q7uLmcCK-S"}},{"cell_type":"markdown","source":["Що відбувається після завершення циклу for? Зазвичай програма виводить зведену інформацію або переходить до інших операцій. Кожен рядок коду після циклу for, що не має відступу, виконується без повторення. Допустимо, ви хочете вивести повідомлення для всієї групи фокусників і подякувати їм за чудове подання. Щоб вивести спільне повідомлення після всіх окремих повідомлень, розмістіть його після циклу for без відступу:"],"metadata":{"id":"j5Eh0de7CWcv"}},{"cell_type":"code","source":["magicians = ['alice', 'david', 'carolina']\n","for magician in magicians:\n"," print(magician.title() + \", that was a great trick!\")\n"," print(\"I can't wait to see your next trick, \" + magician.title())\n","print(\"Thank you, everyone. That was a great magic show!\")"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"3ql1uUM4CaBT","executionInfo":{"status":"ok","timestamp":1678443656965,"user_tz":-120,"elapsed":7,"user":{"displayName":"Іван Клопов","userId":"16257059839054245446"}},"outputId":"023453e4-d74c-415e-92eb-02d6d3038088"},"execution_count":5,"outputs":[{"output_type":"stream","name":"stdout","text":["Alice, that was a great trick!\n","I can't wait to see your next trick, Alice\n","David, that was a great trick!\n","I can't wait to see your next trick, David\n","Carolina, that was a great trick!\n","I can't wait to see your next trick, Carolina\n","Thank you, everyone. That was a great magic show!\n"]}]},{"cell_type":"markdown","source":["## Запобігання помилкам з відступами"],"metadata":{"id":"Yr3Cv5eWCh1T"}},{"cell_type":"markdown","source":["У Python зв'язок одного рядка коду з попереднім рядком позначається відступами. У наведених прикладах рядки, що виводили повідомлення для окремих фокусників, були частиною циклу, тому що вони мали відступи. Застосування відступів у Python дуже полегшує читання коду. Фактично відступи змушують розробника писати акуратно відформатований код із чіткою візуальною структурою. У більш довгих програмах Python можуть зустрічатися блоки коду зі ступнями декількох різних рівнів. Ці рівні сприяють розумінню загальної структури програми. Коли розробники лише починають писати код, робота якого залежить від правильності відступів, у тому коді нерідко зустрічаються поширені помилки. Наприклад, іноді вони розставляють відступи в коді, в якому ці відступи не потрібні, або навпаки — забувають ставити відступи в блоках, де це необхідно. Декілька прикладів допоможуть вам уникнути подібних помилок у майбутньому та успішно виправляти їх, коли вони зустрінуться у ваших програмах. Отже, розглянемо кілька типових помилок під час використання відступів."],"metadata":{"id":"XQnElfHjCnDJ"}},{"cell_type":"markdown","source":["### Пропущений відступ"],"metadata":{"id":"9q2yWgQSCtIv"}},{"cell_type":"markdown","source":["Рядок після команди for у циклі завжди повинен забезпечуватися відступом."],"metadata":{"id":"Sy4mDRvqC2Wk"}},{"cell_type":"code","source":["magicians = ['alice', 'david', 'carolina']for magician in magicians:print(magician)"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":133},"id":"_7b0eL0iCnco","executionInfo":{"status":"error","timestamp":1678443788350,"user_tz":-120,"elapsed":493,"user":{"displayName":"Іван Клопов","userId":"16257059839054245446"}},"outputId":"5012ba55-81a8-4ef1-bd64-4d4bd09c74d3"},"execution_count":6,"outputs":[{"output_type":"error","ename":"SyntaxError","evalue":"ignored","traceback":["\u001b[0;36m File \u001b[0;32m\"\"\u001b[0;36m, line \u001b[0;32m1\u001b[0m\n\u001b[0;31m magicians = ['alice', 'david', 'carolina']for magician in magicians:print(magician)\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax\n"]}]},{"cell_type":"markdown","source":["### Пропущені відступи в інших рядках"],"metadata":{"id":"EKhU_2sfDAJZ"}},{"cell_type":"markdown","source":["Іноді цикл виконується без помилок, але не видає очікуваних результатів. Таке часто відбувається, коли ви намагаєтеся виконати кілька операцій у циклі, але забуваєте забезпечити відступом деякі з рядків. Наприклад, ось що відбувається, якщо ви забудете забезпечити відступом другий рядок у циклі:"],"metadata":{"id":"mMyhivJRDFxS"}},{"cell_type":"code","source":["magicians = ['alice', 'david', 'carolina']\n","for magician in magicians:\n"," print(magician.title() + \", that was a great trick!\")\n","print(\"I can't wait to see your next trick, \" + magician.title() +\".\\n\")"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"vAD_kw_EDGO9","executionInfo":{"status":"ok","timestamp":1678443980297,"user_tz":-120,"elapsed":912,"user":{"displayName":"Іван Клопов","userId":"16257059839054245446"}},"outputId":"a03855be-c01c-4a43-cda3-87bcf6090d9e"},"execution_count":8,"outputs":[{"output_type":"stream","name":"stdout","text":["Alice, that was a great trick!\n","David, that was a great trick!\n","Carolina, that was a great trick!\n","I can't wait to see your next trick, Carolina.\n","\n"]}]},{"cell_type":"markdown","source":["### Зайві відступи"],"metadata":{"id":"xJtinfwIEZJf"}},{"cell_type":"code","source":["message = \"Hello Python world!\"\n"," print(message)"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":133},"id":"fks73LxcDKig","executionInfo":{"status":"error","timestamp":1678444200985,"user_tz":-120,"elapsed":670,"user":{"displayName":"Іван Клопов","userId":"16257059839054245446"}},"outputId":"c8c364e0-e7d0-4678-d58a-afc9cd3838b4"},"execution_count":9,"outputs":[{"output_type":"error","ename":"IndentationError","evalue":"ignored","traceback":["\u001b[0;36m File \u001b[0;32m\"\"\u001b[0;36m, line \u001b[0;32m2\u001b[0m\n\u001b[0;31m print(message)\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mIndentationError\u001b[0m\u001b[0;31m:\u001b[0m unexpected indent\n"]}]},{"cell_type":"markdown","source":["### Зайві відступи після циклу"],"metadata":{"id":"wRZNeUBqElb5"}},{"cell_type":"code","source":["magicians = ['alice', 'david', 'carolina']\n","for magician in magicians:\n"," print(magician.title() + \", that was a great trick!\")\n"," print(\"I can't wait to see your next trick, \" + magician.title() + \".\\n\")\n"," print(\"Thank you everyone, that was a great magic show!\")"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"-EyuIPUmElw1","executionInfo":{"status":"ok","timestamp":1678444250297,"user_tz":-120,"elapsed":632,"user":{"displayName":"Іван Клопов","userId":"16257059839054245446"}},"outputId":"ae9eb302-a0d0-408c-f5eb-2f0173180147"},"execution_count":10,"outputs":[{"output_type":"stream","name":"stdout","text":["Alice, that was a great trick!\n","I can't wait to see your next trick, Alice.\n","\n","Thank you everyone, that was a great magic show!\n","David, that was a great trick!\n","I can't wait to see your next trick, David.\n","\n","Thank you everyone, that was a great magic show!\n","Carolina, that was a great trick!\n","I can't wait to see your next trick, Carolina.\n","\n","Thank you everyone, that was a great magic show!\n"]}]},{"cell_type":"markdown","source":["### Пропущена двокрапка"],"metadata":{"id":"2xqKtYI6E0Ss"}},{"cell_type":"code","source":["magicians = ['alice', 'david', 'carolina']\n","for magician in magicians\n"," print(magician)"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":133},"id":"_RxfbBIIE0rv","executionInfo":{"status":"error","timestamp":1678444295342,"user_tz":-120,"elapsed":7,"user":{"displayName":"Іван Клопов","userId":"16257059839054245446"}},"outputId":"f6121a96-14b8-428f-f71f-0e63d403cdad"},"execution_count":11,"outputs":[{"output_type":"error","ename":"SyntaxError","evalue":"ignored","traceback":["\u001b[0;36m File \u001b[0;32m\"\"\u001b[0;36m, line \u001b[0;32m2\u001b[0m\n\u001b[0;31m for magician in magicians\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax\n"]}]},{"cell_type":"markdown","source":["⚡ ⚡ ⚡\n","### Challenge 1\n","3-1. Піца: згадайте принаймні троє ваших улюблених\n","різновиди піци. Збережіть їх у списку та використовуйте цикл for для\n","виведення всіх назв.\n","Змініть цикл for так, щоб замість простої назви піци\n","виводилося повідомлення, що включає цю назву. Таким чином, для\n","кожного елемента має виводитися рядок із простим текстом виду «I\n","like pepperoni pizza».\n","Додайте в кінець програми (після циклу for) рядок з\n","завершальним повідомленням. Таким чином, висновок повинен складатися з\n","трьох (і більше) рядків з назвами піци та додаткового повідомлення,\n","скажімо, \"I really love pizza!\"."],"metadata":{"id":"G8OrQ1YQFuLo"}},{"cell_type":"markdown","source":["⚡ ⚡ ⚡\n","### Challenge 2\n","Тварини: створіть список із трьох (і більше) тварин,\n","які мають загальну характеристику. Використовуйте цикл for для виведення\n","назв усіх тварин.\n","Змініть програму так, щоб замість простої назви виводилося\n","повідомлення, що включає цю назву, наприклад A dog would make a great\n","pet».\n","Додайте в кінець програми рядок із описом загальної властивості.\n","Наприклад, можна вивести повідомлення «Any of these animals would make a\n","great pet!»."],"metadata":{"id":"9uS3Ax-_FyWi"}},{"cell_type":"markdown","source":["## Створення числових списків"],"metadata":{"id":"z6FPIa77L8aM"}},{"cell_type":"markdown","source":["### Функція range()"],"metadata":{"id":"SiLaJpFEMx6X"}},{"cell_type":"markdown","source":["Функція **range()** спрощує побудову числових послідовностей. Наприклад, з її допомогою можна легко вивести серію чисел:"],"metadata":{"id":"UyTkQv-TL_4i"}},{"cell_type":"code","source":["for value in range(1,6):\n"," print(value)"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"LJG-RCgtG_Ym","executionInfo":{"status":"ok","timestamp":1678446388592,"user_tz":-120,"elapsed":436,"user":{"displayName":"Іван Клопов","userId":"16257059839054245446"}},"outputId":"304dc3b0-6b04-4dcb-cea2-02f0730f7c38"},"execution_count":12,"outputs":[{"output_type":"stream","name":"stdout","text":["1\n","2\n","3\n","4\n","5\n"]}]},{"cell_type":"markdown","source":["### Використання range() для створення числового списку"],"metadata":{"id":"rW3c5UfsNNJ1"}},{"cell_type":"markdown","source":["Якщо ви хочете створити числовий список, перетворіть результати range() на список за допомогою функції list(). Якщо укласти виклик range() в list(), то результат буде список з числовими елементами. У прикладі попереднього розділу числова послідовність просто виводилася на екран. Той самий набір чисел можна перетворити на список викликом list():"],"metadata":{"id":"hlFadFyeNStD"}},{"cell_type":"code","source":["numbers = list(range(1,6))\n","print(numbers)"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"327xdWbFNNp2","executionInfo":{"status":"ok","timestamp":1678446519503,"user_tz":-120,"elapsed":411,"user":{"displayName":"Іван Клопов","userId":"16257059839054245446"}},"outputId":"dbd2df0d-0140-4583-bf38-da3b3c5cd40d"},"execution_count":13,"outputs":[{"output_type":"stream","name":"stdout","text":["[1, 2, 3, 4, 5]\n"]}]},{"cell_type":"markdown","source":["Функція range() також може генерувати числові послідовності, пропускаючи числа заданому діапазоні. Наприклад, побудова списку парних чисел від 1 до 10 відбувається так:"],"metadata":{"id":"kJhP40jTNbia"}},{"cell_type":"code","source":["even_numbers = list(range(2,11,2))\n","print(even_numbers)"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"mFRYuQFYNb7Y","executionInfo":{"status":"ok","timestamp":1678446553640,"user_tz":-120,"elapsed":652,"user":{"displayName":"Іван Клопов","userId":"16257059839054245446"}},"outputId":"698d4aa7-82f5-48c3-b4ee-8243ab0880e6"},"execution_count":14,"outputs":[{"output_type":"stream","name":"stdout","text":["[2, 4, 6, 8, 10]\n"]}]},{"cell_type":"markdown","source":["У цьому прикладі функція range() починає зі значення 2, а потім збільшує його на 2. Приріст 2 послідовно застосовується до тих пір, поки не буде досягнуто або пройдено кінцеве значення 11, після чого виводиться результат:\n","*[2, 4, 6, 8, 10]*"],"metadata":{"id":"CSHWVg8LNkKx"}},{"cell_type":"markdown","source":["За допомогою функції range() можна створити практично будь-який діапазон чисел. Наприклад, як ви створили список квадратів всіх цілих чисел від 1 до 10? У мові Python операція зведення поступово позначається двома зірочками. Один із можливих варіантів виглядає так:"],"metadata":{"id":"S3q3-eXINpl5"}},{"cell_type":"code","source":["squares = []\n","for value in range(1,11):\n"," square = value**2\n"," squares.append(square)\n","print(squares)"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"HOpJlybUNkz9","executionInfo":{"status":"ok","timestamp":1678446612687,"user_tz":-120,"elapsed":402,"user":{"displayName":"Іван Клопов","userId":"16257059839054245446"}},"outputId":"9c944108-4f6b-4361-a0d5-d2d28af8e47c"},"execution_count":15,"outputs":[{"output_type":"stream","name":"stdout","text":["[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]\n"]}]},{"cell_type":"markdown","source":["## Проста статистика з числовими списками"],"metadata":{"id":"La5pzDS6Ov9C"}},{"cell_type":"code","source":["digits = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]\n","min(digits)"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"sGG-LG2cOwWT","executionInfo":{"status":"ok","timestamp":1678446902967,"user_tz":-120,"elapsed":448,"user":{"displayName":"Іван Клопов","userId":"16257059839054245446"}},"outputId":"9f9e490f-1ec0-429c-b0cb-ca21547b4dbd"},"execution_count":16,"outputs":[{"output_type":"execute_result","data":{"text/plain":["0"]},"metadata":{},"execution_count":16}]},{"cell_type":"code","source":["max(digits)"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"-2mUqPT0O1vD","executionInfo":{"status":"ok","timestamp":1678446912839,"user_tz":-120,"elapsed":792,"user":{"displayName":"Іван Клопов","userId":"16257059839054245446"}},"outputId":"12ccb383-5b9a-434f-f666-4e506bf3e61d"},"execution_count":17,"outputs":[{"output_type":"execute_result","data":{"text/plain":["9"]},"metadata":{},"execution_count":17}]},{"cell_type":"code","source":["sum(digits)"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"0xr86gxiO3we","executionInfo":{"status":"ok","timestamp":1678446921841,"user_tz":-120,"elapsed":1207,"user":{"displayName":"Іван Клопов","userId":"16257059839054245446"}},"outputId":"19baa8c4-1b24-47ea-d442-d0b2316f5b0f"},"execution_count":18,"outputs":[{"output_type":"execute_result","data":{"text/plain":["45"]},"metadata":{},"execution_count":18}]},{"cell_type":"markdown","source":["## Генератори списків"],"metadata":{"id":"rx_0spY7QkME"}},{"cell_type":"markdown","source":["Описаний вище спосіб генерування списку squares складався із трьох або чотирьох рядків коду. Генератор списку (list comprehension) дозволяє згенерувати той же список всього водного рядка. Генератор списку об'єднує цикл for та створення нових елементів в один рядок і автоматично приєднує до списку нові елементи."],"metadata":{"id":"3qKp5T3zQ2_K"}},{"cell_type":"markdown","source":["У цьому прикладі список квадратів, знайомий вам за попередніми прикладами, будується з використанням генератора списку:"],"metadata":{"id":"mbE5MhOMQ89M"}},{"cell_type":"code","source":["squares = [value**2 for value in range(1,11)]\n","print(squares)"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"n9r6mWx_Q-UL","executionInfo":{"status":"ok","timestamp":1678447480242,"user_tz":-120,"elapsed":896,"user":{"displayName":"Іван Клопов","userId":"16257059839054245446"}},"outputId":"4fcd07a2-c14d-4089-ba26-870d5093ed90"},"execution_count":19,"outputs":[{"output_type":"stream","name":"stdout","text":["[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]\n"]}]},{"cell_type":"markdown","source":["Щоб використовувати цей синтаксис, почніть зі змістовним ім'ям списку, наприклад, squares. Потім відкрийте квадратні дужки і визначте вираз для значень, які мають бути збережені в новому списку. В даному прикладі це вираз value2, яке зводить значення на другий ступінь. Потім напишіть цикл for для генерування чисел, які мають передаватися виразу, та закрийте квадратні дужки. Цикл for у цьому прикладі — for valuein range(1,11) — передає значення з 1 до 10 виразу value**2. Зверніть увагу на відсутність двокрапки в кінці команди for."],"metadata":{"id":"RIYGpHO2RBT2"}},{"cell_type":"markdown","source":["⚡ ⚡ ⚡\n","### Challenge 3\n","Рахуємо до 20: використовуйте цикл for для виведення чисел від 1 до 20\n","включно."],"metadata":{"id":"RUq-9NSvPB_9"}},{"cell_type":"markdown","source":["⚡ ⚡ ⚡\n","### Challenge 4\n","Мільйон: створіть список чисел від 1 до 1 000 000, потім\n","скористайтесь циклом for для виведення чисел. (Якщо висновок займає\n","занадто багато часу, зупиніть його натисканням Ctrl+C або закрийте\n","вікно виведення.)"],"metadata":{"id":"wj6WmTeNPERx"}},{"cell_type":"markdown","source":["⚡ ⚡ ⚡\n","### Challenge 5\n","Підсумовування мільйона чисел: створіть список чисел від 1 до 1\n","000 000, потім скористайтеся функціями min() і max() і переконайтеся, що список дійсно починається з 1 і закінчується 1 000 000.\n","Викличте функцію sum() і подивіться, наскільки швидко Python\n","зможе підсумувати мільйон чисел."],"metadata":{"id":"us5PNtQ6PH_y"}},{"cell_type":"markdown","source":["⚡ ⚡ ⚡\n","### Challenge 6\n","Непарні числа: скористайтесь третім аргументом функції\n","range() для створення списку непарних чисел від 1 до 20. Виведіть все\n","числа у циклі for."],"metadata":{"id":"8Orqto9zPJTI"}},{"cell_type":"markdown","source":["⚡ ⚡ ⚡\n","### Challenge 7\n","Трійки: створіть список чисел, кратних 3, у діапазоні від 3 до 30. Виведіть усі числа свого списку у циклі for."],"metadata":{"id":"v-6lbeuCPLMw"}},{"cell_type":"markdown","source":["⚡ ⚡ ⚡\n","### Challenge 8\n","Куби: результат зведення числа в третій ступінь називається\n","кубом.Наприклад, куб 2 записується в мові Python у вигляді 2**3.\n","список перших 10 кубів (тобто кубів усіх цілих чисел від 1 до 10) та\n","виведіть значення всіх кубів у циклі for."],"metadata":{"id":"tO118pidPMT2"}},{"cell_type":"markdown","source":["⚡ ⚡ ⚡\n","### Challenge 9\n","Генератор кубів: використовуйте конструкцію генератора списку для\n","створення списку перших 10 кубів."],"metadata":{"id":"FjB4rJM0PNbN"}},{"cell_type":"markdown","source":["## Робота з частиною списку"],"metadata":{"id":"0tTqUzW2RPog"}},{"cell_type":"markdown","source":["## Створення зрізу"],"metadata":{"id":"PASpBhjxRYQW"}},{"cell_type":"markdown","source":["Щоб створити зріз списку, слід задати індекси першого та останнього елементів, з якими ви маєте намір працювати. Як і у випадку з функцією range(), Python зупиняється на елементі, що передує другому індексу. Скажімо, щоб вивести перші три елементи списку, запитайте індекси з 0 по 3, і ви отримаєте елементи 0, 1 і 2."],"metadata":{"id":"RTh6NGpBRcgM"}},{"cell_type":"code","source":["players = ['charles', 'martina', 'michael', 'florence', 'eli']\n","print(players[1:5])"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"Pt6aVRlFRUhg","executionInfo":{"status":"ok","timestamp":1678447608774,"user_tz":-120,"elapsed":533,"user":{"displayName":"Іван Клопов","userId":"16257059839054245446"}},"outputId":"6dab29af-1e95-4bc6-f402-e33d14ccf4d0"},"execution_count":20,"outputs":[{"output_type":"stream","name":"stdout","text":["['martina', 'michael', 'florence', 'eli']\n"]}]},{"cell_type":"code","source":["players = ['charles', 'martina', 'michael', 'florence', 'eli']\n","print(players[1:4])"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"ZePWvMdIRhIC","executionInfo":{"status":"ok","timestamp":1678447620316,"user_tz":-120,"elapsed":728,"user":{"displayName":"Іван Клопов","userId":"16257059839054245446"}},"outputId":"e2e73884-3d4d-4db1-b7bc-649ffef1eb92"},"execution_count":21,"outputs":[{"output_type":"stream","name":"stdout","text":["['martina', 'michael', 'florence']\n"]}]},{"cell_type":"markdown","source":["Якщо перший індекс зрізу не вказано, Python автоматично починає зріз спочатку списку:"],"metadata":{"id":"cmXk-EoMRnbr"}},{"cell_type":"code","source":["players = ['charles', 'martina', 'michael', 'florence', 'eli']\n","print(players[:4])"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"eJD2VwWfRn7k","executionInfo":{"status":"ok","timestamp":1678447843690,"user_tz":-120,"elapsed":449,"user":{"displayName":"Іван Клопов","userId":"16257059839054245446"}},"outputId":"cf46295a-feb0-47e8-b2ea-717df24c8340"},"execution_count":22,"outputs":[{"output_type":"stream","name":"stdout","text":["['charles', 'martina', 'michael', 'florence']\n"]}]},{"cell_type":"markdown","source":["Аналогічний синтаксис працює для зрізів, що включають кінець списку. Наприклад, якщо вам потрібні всі елементи з третього до останнього, почніть синдекс 2 і не вказуйте другий індекс:"],"metadata":{"id":"seT42Sa5Sdib"}},{"cell_type":"code","source":["players = ['charles', 'martina', 'michael', 'florence', 'eli']\n","print(players[2:])"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"ENTJfD4nSePz","executionInfo":{"status":"ok","timestamp":1678447875403,"user_tz":-120,"elapsed":620,"user":{"displayName":"Іван Клопов","userId":"16257059839054245446"}},"outputId":"ada38641-36ab-4ed6-f411-45a02a2c1136"},"execution_count":23,"outputs":[{"output_type":"stream","name":"stdout","text":["['michael', 'florence', 'eli']\n"]}]},{"cell_type":"markdown","source":["Згадайте, що негативний індекс повертає елемент, що знаходиться на заданій відстані від кінця списку; отже, ви можете отримати будь-який зріз від кінця списку. Наприклад, щоб відібрати останніх трьох гравців, використовуйте зріз players [-3:]:"],"metadata":{"id":"09XKdBXYSmPO"}},{"cell_type":"code","source":["players = ['charles', 'martina', 'michael', 'florence', 'eli']\n","print(players[-3:])\n","print (players[2:])\n","print (players[2:5])"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"NYzrNnL7SnAL","executionInfo":{"status":"ok","timestamp":1678447910424,"user_tz":-120,"elapsed":447,"user":{"displayName":"Іван Клопов","userId":"16257059839054245446"}},"outputId":"9aeec9a9-bf7f-479a-96fc-bcf8087f8d04"},"execution_count":24,"outputs":[{"output_type":"stream","name":"stdout","text":["['michael', 'florence', 'eli']\n","['michael', 'florence', 'eli']\n","['michael', 'florence', 'eli']\n"]}]},{"cell_type":"markdown","source":["## Перебір вмісту зрізу"],"metadata":{"id":"4u2L36bIS9kA"}},{"cell_type":"markdown","source":["Якщо ви бажаєте перебрати елементи, що входять до підмножини елементів, використовуйте зріз у циклі for. У наступному прикладі програма перебирає перших трьох гравців та виводить їх імена:"],"metadata":{"id":"-9HmJu-4TCd9"}},{"cell_type":"code","source":["players = ['charles', 'martina', 'michael', 'florence', 'eli']\n","print(\"Here are the first three players on my team:\")\n","for player in players[:4]:\n"," print(player.title())"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"oHCvMLU1S-B4","executionInfo":{"status":"ok","timestamp":1678448031799,"user_tz":-120,"elapsed":710,"user":{"displayName":"Іван Клопов","userId":"16257059839054245446"}},"outputId":"731a3766-f12b-4cda-9f68-dd66e4d426ae"},"execution_count":25,"outputs":[{"output_type":"stream","name":"stdout","text":["Here are the first three players on my team:\n","Charles\n","Martina\n","Michael\n","Florence\n"]}]},{"cell_type":"markdown","source":["Зрізи приносять величезну користь у багатьох ситуаціях. Наприклад, при створенні комп'ютерної гри підсумковий рахунок гравця може додаватися до списку після закінчення поточної партії. Після цього програма може отримати три найкращі результати гравця, відсортувавши список зі зменшення та отримавши зріз, що включає лише три елементи. Працюючи з даними зрізи можуть використовуватися обробки даних блоками заданого розміру. Або при побудові веб-програми зрізи можуть використовуватися для посторінкового виведення інформації так, щоб на кожній сторінці виводився відповідний обсяг інформації."],"metadata":{"id":"H5wer1R4TNvX"}},{"cell_type":"markdown","source":["## Копіювання списку"],"metadata":{"id":"sdqgTYhiTWRu"}},{"cell_type":"markdown","source":["Часто розробник бере існуючий список і створює на його основі повноновий. Подивимося, як працює копіювання списків і розглянемо одну ситуацію, в якій копіювання списку може принести користь.\n","Щоб скопіювати список, створіть зріз, що включає весь вихідний список без вказівки першого та другого індексу ([:]). Ця конструкція створює зріз, який починається з першого елемента та завершується останнім; у результаті створюється копія всього списку. Уявіть, що ви створили список улюблених страв і тепер хочете створити окремий список страв, які подобаються вашому другу. Поки вашому другу подобаються всі страви нашого списку, тому ви можете створити інший список простим копіюванням нашого:"],"metadata":{"id":"ibLcBFZlTc95"}},{"cell_type":"code","source":["my_foods = ['pizza', 'falafel', 'carrot cake']\n","friend_foods = my_foods[0:2]\n","print(\"My favorite foods are:\")\n","print(my_foods)\n","print(\"\\nMy friend's favorite foods are:\")\n","print(friend_foods)"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"rYIHB-2CTWrk","executionInfo":{"status":"ok","timestamp":1678448131013,"user_tz":-120,"elapsed":456,"user":{"displayName":"Іван Клопов","userId":"16257059839054245446"}},"outputId":"373bacbc-97b4-46f8-96ed-efc14e0ca0f2"},"execution_count":26,"outputs":[{"output_type":"stream","name":"stdout","text":["My favorite foods are:\n","['pizza', 'falafel', 'carrot cake']\n","\n","My friend's favorite foods are:\n","['pizza', 'falafel']\n"]}]},{"cell_type":"code","source":["my_foods = ['pizza', 'falafel', 'carrot cake']\n","friend_foods = my_foods[:]\n","my_foods.append('cannoli')\n","friend_foods.append('ice cream')\n","print(\"My favorite foods are:\")\n","print(my_foods)\n","print(\"\\nMy friend's favorite foods are:\")\n","print(friend_foods)"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"8zzTWsH_TikJ","executionInfo":{"status":"ok","timestamp":1678448146804,"user_tz":-120,"elapsed":1255,"user":{"displayName":"Іван Клопов","userId":"16257059839054245446"}},"outputId":"d764aa10-6806-41bd-ac14-9588caffab37"},"execution_count":27,"outputs":[{"output_type":"stream","name":"stdout","text":["My favorite foods are:\n","['pizza', 'falafel', 'carrot cake', 'cannoli']\n","\n","My friend's favorite foods are:\n","['pizza', 'falafel', 'carrot cake', 'ice cream']\n"]}]},{"cell_type":"markdown","source":["⚡ ⚡ ⚡\n","### Challenge 10\n","Зрізи: додайте в кінець однієї з програм, написаних у цій\n","розділ, фрагмент, який робить наступне.\n","* Виводить повідомлення \"The first three items in the list are:\", потім\n","використовує зріз для виведення перших трьох елементів зі списку.\n","* Виводить повідомлення \"Three items from the middle of the list are:\", а потім використовує зріз для виведення перших трьох елементів із середини списку.\n","* Виводить повідомлення \"The last three items in the list are:\", а потім використовує зріз для виведення останніх трьох елементів зі списку."],"metadata":{"id":"-kR6HQM0Ug2n"}},{"cell_type":"markdown","source":["⚡ ⚡ ⚡\n","### Challenge 11\n","Моя піца, твоя піца: почніть із програми з вправи 3-1. Створіть копію списку з видами піци, надайте йому ім'я friend_pizzas. Потім зробіть таке.\n","* Додайте нову піцу до вихідного списку.\n","* Додайте іншу піцу до списку friend_pizzas.\n","* Доведіть, що у програмі існують два різні списки.\n","повідомлення «My favorite pizzas are:», а потім перший список у циклі\n","for. Виведіть повідомлення My friend's favorite pizzas are:, а потім другий\n","список у циклі for. Переконайтеся, що кожна нова піца знаходиться в\n","відповідному списку."],"metadata":{"id":"MUks6CO5UiHn"}},{"cell_type":"markdown","source":["## Кортежі"],"metadata":{"id":"8d0ZfAbjW65Q"}},{"cell_type":"markdown","source":["Списки добре підходять для зберігання наборів елементів, які можуть бути змінені протягом життєвого циклу програми. Наприклад, можливість модифікації списків життєво необхідна під час роботи зі списками користувачів сайту чи списками персонажів гри. Однак у деяких ситуаціях потрібно створити список елементів, які не можуть змінюватися. *Корстяні(tuples)* надають саме таку можливість. У мові Python значення, які не можуть змінюватися, називаються незмінними (immutable), а не список, що змінюється, називається **кортежем**."],"metadata":{"id":"keOErgQ3XAHH"}},{"cell_type":"markdown","source":["### Визначення кортежу"],"metadata":{"id":"1GTQdJoYXFoU"}},{"cell_type":"markdown","source":["Кортеж виглядає як список, крім того, замість квадратних дужок використовуються круглі дужки. Після визначення кортежу ви можете звертатися до його окремих елементів за індексами так само, як це робиться при роботі зі списком."],"metadata":{"id":"nPhUpCILXJrw"}},{"cell_type":"code","source":["dimensions = (200, 50)\n","cars = [\"bmw\", \"audi\"]\n","print(dimensions[0])\n","print(dimensions[1])\n","print(cars[0])\n","print(cars[1])\n","cars[1]=\"mersedes\"\n","print(cars)\n","#dimensions[0]=300\n","#print(dimensions)"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"CcVDCAtoW7Kk","executionInfo":{"status":"ok","timestamp":1678449142542,"user_tz":-120,"elapsed":899,"user":{"displayName":"Іван Клопов","userId":"16257059839054245446"}},"outputId":"d9d1b99a-37ca-42c7-b41e-b8c057b0f6e0"},"execution_count":29,"outputs":[{"output_type":"stream","name":"stdout","text":["200\n","50\n","bmw\n","audi\n","['bmw', 'mersedes']\n"]}]},{"cell_type":"markdown","source":["Подивимося, що станеться при спробі зміни одного з елементів у кортежі dimensions:"],"metadata":{"id":"vwtUpQZmXfoE"}},{"cell_type":"code","source":["dimensions = (200, 50)\n","dimensions[0] = 250"],"metadata":{"id":"Jb_TumyTXf_U"},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":["### Перебір усіх значень у кортежі"],"metadata":{"id":"qmm2PaSDXmRi"}},{"cell_type":"markdown","source":["Для перебору всіх значень у кортежі використовується цикл for, як і під час роботи зі списками:"],"metadata":{"id":"a1j11pFPXrLC"}},{"cell_type":"code","source":["dimensions = (200, 50)\n","for dimension in dimensions:\n"," print(dimension)"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"tYb53ZEqXsH-","executionInfo":{"status":"ok","timestamp":1678449388331,"user_tz":-120,"elapsed":3,"user":{"displayName":"Іван Клопов","userId":"16257059839054245446"}},"outputId":"15539dba-33a8-440d-ed41-aff5de61eb34"},"execution_count":30,"outputs":[{"output_type":"stream","name":"stdout","text":["200\n","50\n"]}]},{"cell_type":"markdown","source":["### Заміна кортежу"],"metadata":{"id":"ZvEraILWYZRl"}},{"cell_type":"markdown","source":["Елементи кортежу не можуть змінюватися, але ви можете надати нове значення змінної, в якій зберігається кортеж. Таким чином, для зміни розмірів прямокутника слід перевизначити весь кортеж:"],"metadata":{"id":"uqP4k63uYrAv"}},{"cell_type":"code","source":["dimensions = (200, 50)\n","print(\"Original dimensions:\")\n","for dimension in dimensions:\n"," print(dimension)\n","dimensions = (400, 100)\n","print(\"\\nModified dimensions:\")\n","for dimension in dimensions:\n"," print(dimension)"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"6Vy5GiPyYZkX","executionInfo":{"status":"ok","timestamp":1678449509401,"user_tz":-120,"elapsed":449,"user":{"displayName":"Іван Клопов","userId":"16257059839054245446"}},"outputId":"9e6f51d6-4c98-4eab-f0e2-658ad7f72c12"},"execution_count":31,"outputs":[{"output_type":"stream","name":"stdout","text":["Original dimensions:\n","200\n","50\n","\n","Modified dimensions:\n","400\n","100\n"]}]},{"cell_type":"markdown","source":["⚡ ⚡ ⚡\n","### Challenge 12\n","Шведський стіл: меню «шведського столу» у ресторані складається\n","всього із п'яти пунктів. Придумайте п'ять простих страв і збережіть їх у\n","кортежі.\n","* Використовуйте цикл for для виведення всіх страв, які пропонують ресторан.\n","* Спробуйте змінити один з елементів і переконайтеся, що Python\n","відмовляється вносити зміни.\n","* Ресторан змінює меню, замінюючи два елементи на інші страви.\n","Додайте блок коду, який замінює кортеж, та використовуйте цикл for для\n","виведення кожного елемента оновленого меню."],"metadata":{"id":"qHPqnoDPYy9G"}}]}