/
s10n
/
python-basics-homework
Обзор
Документация
Войти
/
s10n
/
python-basics-homework
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
homework_3.py
197 строк
8 KB
s10n
Домашнее задание к лекции «Функции»
28 янв 2025, 16:44
28 янв 2025, 16:44
48f3c83
Код
Авторство
О чём код?
documents = [ {"type": "passport", "number": "2207 876234", "name": "Василий Гупкин"}, {"type": "invoice", "number": "11-2", "name": "Геннадий Покемонов"}, {"type": "insurance", "number": "10006", "name": "Аристарх Павлов"}, ] directories = {"1": ["2207 876234", "11-2"], "2": ["10006"], "3": []} def find_document(number): """Находит документ по номеру и возвращает его данные.""" return next((doc for doc in documents if doc["number"] == number), None) def find_shelf(number): """Находит полку по номеру документа и возвращает её номер.""" return next((shelf for shelf, docs in directories.items() if number in docs), None) def get_owner_by_number(): """Возвращает владельца документа по его номеру и выводит результат в консоль.""" number = input("Введите номер документа: ").strip() document = find_document(number) if document: print(f"Владелец документа: {document['name']}") else: print("Документ не найден в базе.") def find_shelf_by_number(): """Находит полку по номеру документа и выводит результат в консоль.""" number = input("Введите номер документа: ").strip() shelf = find_shelf(number) if shelf: print(f"Документ хранится на полке: {shelf}") else: print("Документ не найден в базе.") def print_documents(): """Выводит текущий список документов.""" if not documents: print("Документы отсутствуют.") return for doc in documents: shelf = find_shelf(doc["number"]) print( f"№: {doc['number']}, тип: {doc['type']}, владелец: {doc['name']}, полка хранения: {shelf if shelf else 'не указана'}" ) def add_shelf(): """Добавляет новую полку в хранилище.""" new_shelf = input("Введите номер полки: ").strip() if new_shelf in directories: print( f"Такая полка уже существует. Текущий перечень полок: {', '.join(directories.keys())}." ) else: directories[new_shelf] = [] # Добавляем новую полку print( f"Полка добавлена. Текущий перечень полок: {', '.join(directories.keys())}." ) def delete_shelf(): """Удаляет существующую полку, если она пустая.""" shelf_to_delete = input("Введите номер полки: ").strip() if shelf_to_delete not in directories: print( f"Такой полки не существует. Текущий перечень полок: {', '.join(directories.keys())}." ) elif directories[shelf_to_delete]: # Проверяем, есть ли документы на полке print( f"На полке есть документа, удалите их перед удалением полки. Текущий перечень полок: {', '.join(directories.keys())}." ) else: del directories[shelf_to_delete] # Удаляем полку print( f"Полка удалена. Текущий перечень полок: {', '.join(directories.keys())}." ) def add_document(): """Добавляет новый документ в хранилище.""" number = input("Введите номер документа: ").strip() if find_document(number): print("Документ с таким номером уже существует.") print("Текущий список документов:") print_documents() return doc_type = input("Введите тип документа: ").strip() owner = input("Введите владельца документа: ").strip() shelf = input("Введите полку для хранения: ").strip() if shelf not in directories: print(f"Такой полки не существует. Добавьте полку командой ads.") print("Текущий список документов:") print_documents() else: documents.append({"type": doc_type, "number": number, "name": owner}) directories[shelf].append(number) # Добавляем документ на полку print("Документ добавлен. Текущий список документов:") print_documents() def delete_document(): """Удаляет документ из хранилища.""" number = input("Введите номер документа: ").strip() document = find_document(number) if document: documents.remove(document) # Удаляем документ из списка documents # Удаляем документ из полки for shelf_docs in directories.values(): if number in shelf_docs: shelf_docs.remove(number) print("Документ удален. Текущий список документов:") print_documents() else: print("Документ не найден в базе. Текущий список документов:") print_documents() def move_document(): """Перемещает документ с одной полки на другую.""" number = input("Введите номер документа: ").strip() document = find_document(number) if not document: print("Документ не найден в базе. Текущий список документов:") print_documents() return new_shelf = input("Введите номер полки: ").strip() if new_shelf not in directories: print( f"Такой полки не существует. Текущий перечень полок: {', '.join(directories.keys())}." ) return old_shelf = find_shelf(number) if old_shelf: directories[old_shelf].remove(number) directories[new_shelf].append(number) print("Документ перемещен. Текущий список документов:") print_documents() def print_menu(): """Выводит меню команд.""" print("\nДоступные команды:") print("p - узнать владельца документа") print("s - узнать полку, на которой хранится документ") print("l - показать полный список документов") print("ads - добавить новую полку") print("ds - удалить пустую полку") print("ad - добавить новый документ") print("d - удалить документ") print("m - переместить документ на другую полку") print("q - выход из программы\n") def main(): """Основная функция для обработки пользовательских команд.""" command_handlers = { "q": lambda: print("Выход из программы."), "p": get_owner_by_number, "s": find_shelf_by_number, "l": print_documents, "ads": add_shelf, "ds": delete_shelf, "ad": add_document, "d": delete_document, "m": move_document, } while True: print_menu() command = input("Введите команду: ").strip().lower() handler = command_handlers.get(command) if handler: if command == "q": handler() break else: handler() else: print("Неизвестная команда. Пожалуйста, попробуйте еще раз.") if __name__ == "__main__": main()