Задачи к занятию №3

Открыто с: Пятница, 18 февраля 2022, 00:00
Срок сдачи: Пятница, 25 февраля 2022, 00:00

Вам нужно помочь секретарю автоматизировать работу. Для этого нужно написать программу, которая будет на основе хранимых данных исполнять пользовательские команды.

Исходные данные имеют следующую структуру:

  1. перечень всех документов
    documents = [
     {'type': 'passport', 'number': '2207 876234', 'name': 'Василий Гупкин'},
     {'type': 'invoice', 'number': '11-2', 'name': 'Геннадий Покемонов'},
     {'type': 'insurance', 'number': '10006', 'name': 'Аристарх Павлов'}
    ]
  2. перечень полок, на которых хранятся документы (если документ есть в documents, то он обязательно должен быть и в directories)
    directories = {
     '1': ['2207 876234', '11-2'],
     '2': ['10006'],
     '3': []
    }

Общие требования к программе:

  • код должен быть грамотно декомпозирован (каждая функция отвечает за свою конкретную задачу, дублирующийся функционал переиспользуется, а его код не повторяется);
  • в коде отсутствуют глобальные переменные (за исключением documents и directories);
  • пользовательский ввод обрабатывается в цикле while до тех пор, пока пользователь явно не завершит программу (вводом команды "q").

Задание 1

Пункт 1. Пользователь по команде "p" может узнать владельца документа по его номеру

Примеры работы:

1.

Введите команду:
p

Введите номер документа:
10006

Результат:
Владелец документа: Аристарх Павлов

2.

Введите команду:
p

Введите номер документа:
12345

Результат:
Документ не найден в базе

Пункт 2. Пользователь по команде "s" может по номеру документа узнать на какой полке он хранится

Примеры работы:

1.

Введите команду:
s

Введите номер документа:
10006

Результат:
Документ хранится на полке: 2

2.

Введите команду:
s

Введите номер документа:
12345

Результат:
Документ не найден в базе

Пункт 3. Пользователь по команде "l" может увидеть полную информацию по всем документам

Пример работы:

Введите команду:
l

Результат:

№: 2207 876234, тип: passport, владелец: Василий Гупкин, полка хранения: 1
№: 11-2, тип: invoice, владелец: Геннадий Покемонов, полка хранения: 1
№: 10006, тип: insurance, владелец: Аристарх Павлов, полка хранения: 2

Пункт 4. Пользователь по команде "ads" может добавить новую полку

Примеры работы:

1.

Введите команду:
ads

Введите номер полки:
10

Результат:
Полка добавлена. Текущий перечень полок: 1, 2, 3, 10.

2.

Введите команду:
ads

Введите номер полки:
1

Результат:
Такая полка уже существует. Текущий перечень полок: 1, 2, 3.

Пункт 5. Пользователь по команде "ds" может удалить существующую полку из данных (только если она пустая)

Примеры работы:

1.

Введите команду:
ds

Введите номер полки:
3

Результат:
Полка удалена. Текущий перечень полок: 1, 2.

2.

Введите команду:
ds

Введите номер полки:
1

Результат:
На полке есть документа, удалите их перед удалением полки. Текущий перечень полок: 1, 2, 3.

3.

Введите команду:
ds

Введите номер полки:
4

Результат:
Такой полки не существует. Текущий перечень полок: 1, 2, 3.

Задание 2 (необязательное)

Вам необходимо дополнить программу из задания 1 более продвинутыми командами.

Пункт 1. Пользователь по команде "ad" может добавить новый документ в данные

Примеры работы:

1.

Введите команду:
ad

Введите номер документа:
42
Введите тип документа:
multipassport
Введите владельца документа:
R2D2
Введите полку для хранения:
3

Результат:

Документ добавлен. Текущий список документов:
№: 2207 876234, тип: passport, владелец: Василий Гупкин, полка хранения: 1
№: 11-2, тип: invoice, владелец: Геннадий Покемонов, полка хранения: 1
№: 10006, тип: insurance, владелец: Аристарх Павлов, полка хранения: 2
№: 42, тип: multipassport, владелец: R2D2, полка хранения: 3

2.

Введите команду:
ad

Введите номер документа:
42
Введите тип документа:
multipassport
Введите владельца документа:
R2D2
Введите полку для хранения:
4

Результат:

Такой полки не существует. Добавьте полку командой as. 
Текущий список документов:
№: 2207 876234, тип: passport, владелец: Василий Гупкин, полка хранения: 1
№: 11-2, тип: invoice, владелец: Геннадий Покемонов, полка хранения: 1
№: 10006, тип: insurance, владелец: Аристарх Павлов, полка хранения: 2

Пункт 2. Пользователь по команде "d" может удалить документ из данных

Примеры работы:

1.

Введите команду:
d

Введите номер документа:
10006

Результат:

Документ удален. 
Текущий список документов:
№: 2207 876234, тип: passport, владелец: Василий Гупкин, полка хранения: 1
№: 11-2, тип: invoice, владелец: Геннадий Покемонов, полка хранения: 1

2.

Введите команду:
d

Введите номер документа:
123456

Результат:

Документ не найден в базе. 
Текущий список документов:
№: 2207 876234, тип: passport, владелец: Василий Гупкин, полка хранения: 1
№: 11-2, тип: invoice, владелец: Геннадий Покемонов, полка хранения: 1
№: 10006, тип: insurance, владелец: Аристарх Павлов, полка хранения: 2

Пункт 3. Пользователь по команде "m" может переместить документ с полки на полку

Примеры работы:

1.

Введите команду:
m

Введите номер документа:
11-2
Введите номер полки:
3

Результат:

Документ перемещен. 
Текущий список документов:
№: 2207 876234, тип: passport, владелец: Василий Гупкин, полка хранения: 1
№: 11-2, тип: invoice, владелец: Геннадий Покемонов, полка хранения: 3
№: 10006, тип: insurance, владелец: Аристарх Павлов, полка хранения: 2

2.

Введите команду:
m

Введите номер документа:
11-2
Введите номер полки:
10

Результат:
Такой полки не существует. Текущий перечень полок: 1, 2, 3.

3.

Введите команду:
m

Введите номер документа:
42
Введите номер полки:
2

Результат:

Документ не найден в базе. 
Текущий список документов:
№: 2207 876234, тип: passport, владелец: Василий Гупкин, полка хранения: 1
№: 11-2, тип: invoice, владелец: Геннадий Покемонов, полка хранения: 1
№: 10006, тип: insurance, владелец: Аристарх Павлов, полка хранения: 2

ПРИМЕЧАНИЕ

Домашнее задание сдается ссылкой Google Colab. Не сможем проверить или помочь, если вы пришлете:

  • файлы;
  • архивы;
  • скриншоты кода.

Все обсуждения и консультации по выполнению домашнего задания ведутся только на соответствующем канале в slack.

Как правильно задавать вопросы аспирантам, преподавателям и коллегам

Прежде чем задать вопрос, попробуйте найти ответ в интернете. Навык самостоятельного поиска информации — один из важнейших. Каждый практикующий специалист любого уровня делает это ежедневно.

Сформулируйте вопрос по алгоритму:
1) Что я делаю?
2) Какого результата я ожидаю?
3) Как фактический результат отличается от ожидаемого?
4) Что я уже попробовал сделать, чтобы исправить проблему?

По возможности прикрепите к вопросу скриншоты либо ссылки на код. Не выкладывайте все решение, оставляйте только проблемный и воспроизводимый участок кода.