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