{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Программирование для всех (основы работы в Python)\n", "\n", "## Домашнее задание №4\n", "\n", "За разные задачи можно получить разное число баллов. Максимум за ДЗ можно набрать 8 баллов. Вы можете решить больше задач, чем требуется, чтобы потренироваться.\n", "\n", "Чтобы сдать ДЗ, его надо загрузить на Dropbox в виде `ipynb`-файла. Получить `ipynb`-файл можно, выбрав в Jupyter пункт меню *File → Download as... → Notebook (.ipynb)*.\n", "\n", "Алгоритм работы:\n", "\n", "1. Скачать `ipynb`-файл с домашним заданием.\n", "2. Загрузить скачанный файл в Jupyter Notebook через *Upload*.\n", "3. Вписать решения задач в ячейки с комментарием `# YOUR CODE HERE`.\n", "4. Сохранить изменения и загрузить файл с решениями на Dropbox.\n", "\n", "**Обратите внимание:** выводимый на экран результат должен полностью совпадать с условием. Если, например, код технически работает правильно, но выводит сообщение вида `следующее число 6` вместо `Следующее число: 6.`, такое решение будет считаться частично верным и оцениваться на неполный балл (например, 0.5 из 1)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Задача 1 (1 балл)\n", "\n", "Напишите программу, которая запрашивает у пользователя любой адрес в одну строку в формате: город,улица,дом и выводит на экран список из отдельных элементов адреса. Обратите внимание на отстутствие пробела после запятых во входных данных, это важно!\n", "\n", "**Пример.**\n", "\n", "*Входные данные:*\n", "\n", " Москва,Мясницкая,20\n", "\n", "*Выходные данные:*\n", "\n", " ['Москва', 'Мясницкая', '20']" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# YOUR CODE HERE" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Задача 2 (1 балл)\n", "\n", "Дан список станций желтой ветки московского метро (упорядочены как на карте):" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "line = [\"Третьяковская\", \"Марксистская\", \"Площадь Ильича\", \"Авиамоторная\", \n", " \"Шоссе Энтузиастов\", \"Перово\", \"Новогиреево\", \"Новокосино\"]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Давайте считать, что движение происходит от Третьяковской до Новокосино.\n", "\n", "Напишите программу, которая запрашивает у пользователя название текущей станции метро (без лишнего пробела на конце) и выводит на экран сообщение вида\n", "\n", " Следующая станция: станция\n", "\n", "Считайте, что пользователь знает, какая станция конечная, и не будет запрашивать станцию, следующую после Новокосино.\n", "\n", "**Пример.**\n", "\n", "*Входные данные:*\n", "\n", " Введите текущую станцию: Площадь Ильича\n", "\n", "*Выходные данные:*\n", "\n", " Следующая станция: Авиамоторная\n", "\n", "**Подсказка.** Чтобы вернуть индекс определенного элемента в списке, нужно воспользоваться методом `.index()`." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# YOUR CODE HERE" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Задача 3 (1 балл)\n", "\n", "Напишите программу, которая запрашивает целое число `n` с клавиатуры, затем `n` целых чисел, после чего выводит произведение всех этих чисел.\n", "\n", "**Пример.**\n", "\n", "*Входные данные:*\n", "\n", " 3\n", " 9\n", " 2\n", " 5\n", "\n", "*Выходные данные:*\n", "\n", " 90" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# YOUR CODE HERE" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Задача 4 (1 балл)\n", "\n", "Дан словарь с записями, ключами которых являются числовые id, а значениями – города." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "cities = {100: 'Москва', 101: 'Санкт-Петербург', 103: 'Екатеринбург', 104: 'Пермь', \n", " 107: 'Красноярск', 111 : 'Киров'}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Напишите программу, которая просит пользователя ввести с клавиатуры сначала ключ, потом значение, а затем:\n", "\n", "* если в словаре `cities` есть запись с таким ключом, на экран выводится сообщение \"Запись с таким ключом существует. Введите другой ключ.\"\n", "\n", "* если в словаре `cities` нет записи с таким ключом, в этот словарь добавляется запись с введенным ключом и значением + обновленный словарь `cities` выводится на экран.\n", "\n", "Обратите внимание, id должны быть целочисленными!\n", "\n", "**Пример.**\n", "\n", "*Входные данные:*\n", "\n", " Введите ключ: 101\n", " Введите значение: Мурманск\n", "\n", "*Выходные данные:*\n", "\n", " Запись с таким ключом существует. Введите другой ключ.\n", "\n", "*Входные данные:*\n", "\n", " Введите ключ: 117\n", " Введите значение: Омск\n", "\n", "*Выходные данные (порядок записей может быть другим):*\n", "\n", " {100: 'Москва', 101: 'Санкт-Петербург', 103: 'Екатеринбург', 104: 'Пермь', \n", " 107: 'Красноярск', 111 : 'Киров', 117 : 'Омск'}\n", "\n", "**Подсказка.** используйте оператор `in`." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# YOUR CODE HERE" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Задача 5 (1 балл)\n", "\n", "Напишите функцию `int_list()`, которая принимает на вход список строк, представляющих собой целые числа, и возвращает новый список из целых чисел. Функция не должна ничего печатать (выводить на экран).\n", "\n", "**Пример работы функции.**\n", "\n", "*Применение:*\n", "\n", " int_list(['1', '3', '5', '18'])\n", "\n", "*Результат:*\n", "\n", " [1, 3, 5, 18]" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# YOUR CODE HERE" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Задача 6 (1 балл)\n", "\n", "Напишите функцию `dummy()`, которая принимает на вход список значений индекса *Freedom House* в старой шкале от 1 до 8, и возвращает список из 0 и 1, где 1 соответствует свободным странам, то есть странам со статусом *Free* со значениями индекса от 1.0 до 2.5 включительно. Функция не должна ничего печатать (выводить на экран).\n", "\n", "**Примеры работы функции.**\n", "\n", "*Применение:*\n", "\n", " dummy([2.5, 3.0, 2.7, 3.6, 4.8, 6.5, 1.0, 1.5, 7.0])\n", "\n", "*Результат:*\n", "\n", " [1, 0, 0, 0, 0, 0, 1, 1, 0]\n", "\n", "*Применение:*\n", "\n", " dummy([3.5, 3.0, 2.7, 3.6])\n", "\n", "*Результат:*\n", "\n", " [0, 0, 0, 0]" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# YOUR CODE HERE" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Задача 7 (2 балла)\n", "\n", "Дан словарь, содержащий информацию по станциям метро в Новосибирске (станции в списке указаны последовательно, с севера на юг в случае Ленинской ветки, и с запада на восток в случае Дзержинской ветки)." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "nmetro = {\"Ленинская\" : [\"Заельцовская\", \"Гагаринская\", \"Красный проспект\", \"Площадь Ленина\", \n", " \"Октябрьская\", \"Речной Вокзал\", \"Студенческая\", \"Площадь Маркса\"], \n", " \"Дзержинская\" : [\"Площадь Гарина-Михайловского\",\"Сибирская\",\"Маршала Покрышкина\",\n", " \"Березовая Роща\", \"Золотая Нива\"]}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Напишите программу, которая запрашивает у пользователя сначала название текущей станции без пробела на конце, затем направление движения ('1' – с севера на юг или с запада на восток, '2' – с юга на север или с востока на запад) и выводит на экран название следующей станции.\n", "\n", "Считайте, что пользователь знает, какие станции являются конечными, и не будет запрашивать станцию, следующую после конечной.\n", "\n", "**Пример.**\n", "\n", "*Входные данные:*\n", "\n", " Введите название текущей станции: Гагаринская\n", " Выберите направление движения (1 - с севера на юг или с запада на восток, 2 - с юга на север или с востока на запад): 2\n", "\n", "*Выходные данные:*\n", "\n", " Следующая станция: Заельцовская\n", "\n", "\n", "*Входные данные:*\n", "\n", " Введите название текущей станции: Сибирская\n", " Выберите направление движения (1 - с севера на юг или с запада на восток, 2 - с юга на север или с востока на запад): 1\n", "\n", "*Выходные данные:*\n", "\n", " Следующая станция: Маршала Покрышкина" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# YOUR CODE HERE" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Задача 8 (2 балла)\n", "\n", "Напишите программу, которая просит пользователя ввести текст без знаков препинания (просто слова через пробел) и выводит на экран словарь, где ключами являются буквы, а значениями ‒ их частота. Обратите внимание, одна и та же буква в разных регистрах (заглавная или строчная) должна считаться как одна и та же буква.\n", "\n", "Пользоваться можно только базовыми средствами Python: циклы и условные конструкции, методы для строк, списков, словарей.\n", "\n", "**Пример.**\n", "\n", "*Входные данные:*\n", "\n", " Введите текст: Люблю грозу в начале мая\n", "\n", "*Выходные данные:*\n", "\n", " {'м': 1, 'я': 1, 'е': 1, 'а': 3, 'н': 1, 'з': 1, 'в': 1, 'ю': 2, 'ч': 1, 'у': 1, 'р': 1, 'б': 1, 'л': 3, 'г': 1, 'о': 1}\n", "\n", "*Входные данные:*\n", "\n", " Введите текст: ABBA Brilliant concert\n", "\n", "*Выходные данные:*\n", "\n", " {'l': 2, 't': 2, 'o': 1, 'r': 2, 'e': 1, 'b': 3, 'c': 2, 'i': 2, 'n': 2, 'a': 3}" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# YOUR CODE HERE" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Задача 9 (2 балла)\n", "\n", "Дан словарь `cols` с соответствиями цветов при переводе изображения в негатив (очень примерно):" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "cols = {'white': 'black', 'red' : 'green', 'yellow': 'blue'}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Напишите функцию `RevertCol()`, которая принимает на вход список цветов, используемых в изображении, и возвращает список цветов этого изображения, переведенного в негатив. Словарь `cols` менять нельзя! Функция не должна ничего печатать (выводить на экран).\n", "\n", "**Пример работы функции.**\n", "\n", "*Применение:*\n", "\n", " RevertCol(['white', 'red', 'black', 'green', 'yellow', 'blue'])\n", "\n", "*Результат:*\n", "\n", " ['black', 'green', 'white', 'red', 'blue', 'yellow']" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# YOUR CODE HERE" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Задача 10 (4 балла)\n", "\n", "Напишите функцию `eq_solve()`, которая принимает на вход строку с квадратным уравнением (без пробелов между знаками и со всеми коэффициентами, записанными явно, включая 1 и -1) и решает квадратное уравнение:\n", "\n", "* если дискриминант отрицательный, печатает строку с предупреждением Уравнение имеет комплексные корни и возвращает пустой список;\n", "* если дискриминант равен нулю, печатает строку Уравнение имеет одно решение и возвращает список из одного решения;\n", "* если дискриминант больше нуля, печатает строку Уравнение имеет два решения и возвращает список из двух решений.\n", "\n", "Считайте, что квадратное уравнение уже приведено к стандартному виду:\n", "\n", "$$ax^2+bx+c=0$$\n", "\n", "Нельзя: использовать библиотечные функции (кроме `sqrt()` из модуля `math`), регулярные выражения.\n", "\n", "Можно: создавать вспомогательные функции внутри основной функции `eq_solve()`, использовать условия, циклы, методы для строк, списков и прочие объекты, обсуждаемые на лекциях.\n", "\n", "**Примеры работы функции.**\n", "\n", "*Применение:*\n", "\n", " eq_solve('1x^2+6x+9=0')\n", "\n", "*Вывод на экран:*\n", "\n", " Уравнение имеет одно решение\n", "\n", "*Возвращаемый результат:*\n", "\n", " [-3.0]\n", "\n", "*Применение:*\n", "\n", " eq_solve('-2x^2-6x+9=0')\n", "\n", "*Вывод на экран:*\n", "\n", " Уравнение имеет два решения\n", "\n", "*Возвращаемый результат:*\n", "\n", " [-4.098076211353316, 1.098076211353316]\n", "\n", "*Применение:*\n", "\n", " eq_solve('3x^2-1x+10=0')\n", "\n", "*Вывод на экран:*\n", "\n", " Уравнение имеет только комплексные корни\n", "\n", "*Возвращаемый результат:*\n", "\n", " []" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# YOUR CODE HERE" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "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.7.4" } }, "nbformat": 4, "nbformat_minor": 2 }