Программирование для всех (основы работы в Python)

Домашнее задание №6

За разные задачи можно получить разное число баллов. Максимум за ДЗ можно набрать 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