Задачи к занятию №3
Исходные данные имеют следующую структуру:
- перечень всех документов
documents = [ {'type': 'passport', 'number': '2207 876234', 'name': 'Василий Гупкин'}, {'type': 'invoice', 'number': '11-2', 'name': 'Геннадий Покемонов'}, {'type': 'insurance', 'number': '10006', 'name': 'Аристарх Павлов'} ]
- перечень полок, на которых хранятся документы (если документ есть в 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) Что я уже попробовал сделать, чтобы исправить проблему?
По возможности прикрепите к вопросу скриншоты либо ссылки на код. Не выкладывайте все решение, оставляйте только проблемный и воспроизводимый участок кода.