{"id":27165980,"url":"https://github.com/viktorsvertoka/goit-pycore-hw-06","last_synced_at":"2025-04-09T03:37:23.135Z","repository":{"id":237546315,"uuid":"794700036","full_name":"ViktorSvertoka/goit-pycore-hw-06","owner":"ViktorSvertoka","description":"Home task for Python course🐍","archived":false,"fork":false,"pushed_at":"2024-05-03T20:27:06.000Z","size":5,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-05-03T21:37:19.237Z","etag":null,"topics":["goit","goit-pycore-hw-06","python"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ViktorSvertoka.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-05-01T19:08:49.000Z","updated_at":"2024-05-03T20:55:45.000Z","dependencies_parsed_at":"2024-05-03T21:52:52.554Z","dependency_job_id":null,"html_url":"https://github.com/ViktorSvertoka/goit-pycore-hw-06","commit_stats":null,"previous_names":["viktorsvertoka/goit-pycore-hw-06"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ViktorSvertoka%2Fgoit-pycore-hw-06","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ViktorSvertoka%2Fgoit-pycore-hw-06/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ViktorSvertoka%2Fgoit-pycore-hw-06/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ViktorSvertoka%2Fgoit-pycore-hw-06/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ViktorSvertoka","download_url":"https://codeload.github.com/ViktorSvertoka/goit-pycore-hw-06/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247974610,"owners_count":21026742,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["goit","goit-pycore-hw-06","python"],"created_at":"2025-04-09T03:37:22.477Z","updated_at":"2025-04-09T03:37:23.126Z","avatar_url":"https://github.com/ViktorSvertoka.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Тема 9. Домашня робота. Основи роботи з класами\n\nЗараз на вас чекає домашнє завдання, завдяки якому ви навчитеся наступним корисним навичкам:\n\n- Основи об'єктно-орієнтованого програмування (ООП)\n- Робота з класами та об'єктами\n- Робота з методами класу\n\n#### Формат здачі:\n\n- Розмістіть файли з розв'язанням у репозиторії `goit-pycore-hw-06`, та прикріпіть лінки до них у відповідь на домашнє завдання.\n- Прикріпіть файл репозиторію у форматi `zip` у відповідь на домашнє завдання.\n\n\u003e [!NOTE]\n\u003e\n\u003e ☝ У цій домашній роботі ми продовжимо розвивати нашого віртуального асистента з CLI інтерфейсом.\n\nНаш асистент вже вміє взаємодіяти з користувачем за допомогою командного рядка, отримуючи команди та аргументи, та виконуючи потрібні дії. У цьому завданні потрібно буде попрацювати над внутрішньою логікою асистента, над тим, як зберігаються дані, які саме дані і що з ними можна зробити.\n\n\u003e [!TIP]\n\u003e\n\u003e ☝ Саму логіку ми додамо в бота в наступному домашньому завданні.\n\nЗастосуємо для цих цілей об'єктно-орієнтоване програмування. Спершу виділимо декілька сутностей (моделей), з якими працюватимемо.\n\n- У **користувача** буде адресна книга або **книга контактів**. Ця **книга контактів** містить **записи**. Кожен **запис** містить деякий набір **полів**.\n\nТаким чином ми описали сутності (класи), які необхідно реалізувати. Далі розглянемо вимоги до цих класів та встановимо їх взаємозв'язок, правила, за якими вони будуть взаємодіяти.\n\n- Користувач взаємодіє з **книгою контактів**, додаючи, видаляючи та редагуючи **записи**. Також користувач повинен мати можливість шукати в **книзі контактів записи** за одним або кількома критеріями (полями).\n- Про **поля** також можна сказати, що вони можуть бути обов'язковими (ім'я) та необов'язковими (телефон або email наприклад). Також **записи** можуть містити декілька **полів** одного типу (декілька телефонів наприклад). Користувач повинен мати можливість додавати/видаляти/редагувати **поля** у будь-якому записі.\n\n## Технiчний опис завдання\n\nРозробіть систему для управління адресною книгою.\n\n#### Сутності:\n\n- `Field`: Базовий клас для полів запису.\n- `Name`: Клас для зберігання імені контакту. Обов'язкове поле.\n- `Phone`: Клас для зберігання номера телефону. Має валідацію формату (10 цифр).\n- `Record`: Клас для зберігання інформації про контакт, включаючи ім'я та список телефонів.\n- `AddressBook`: Клас для зберігання та управління записами.\n\n#### Функціональність:\n\n- `AddressBook`: Додавання записів.\n- Пошук записів за іменем.\n- Видалення записів за іменем.\n- `Record`: Додавання телефонів.\n- Видалення телефонів.\n- Редагування телефонів.\n- Пошук телефону.\n\n### Рекомендації для виконання\n\nВ якості старту ви можете взяти наступний базовий код для реалізації цього домашнього завдання:\n\n```bash\nfrom collections import UserDict\n\nclass Field:\ndef **init**(self, value):\nself.value = value\n\n    def __str__(self):\n        return str(self.value)\n\nclass Name(Field): # реалізація класу\npass\n\nclass Phone(Field): # реалізація класу\npass\n\nclass Record:\ndef **init**(self, name):\nself.name = Name(name)\nself.phones = []\n\n    # реалізація класу\n\n    def __str__(self):\n        return f\"Contact name: {self.name.value}, phones: {'; '.join(p.value for p in self.phones)}\"\n\nclass AddressBook(UserDict): # реалізація класу\npass\n```\n\nПісля реалізації ваш код має виконуватися наступним чином:\n\n```bash\n# Створення нової адресної книги\n\n    book = AddressBook()\n\n    # Створення запису для John\n    john_record = Record(\"John\")\n    john_record.add_phone(\"1234567890\")\n    john_record.add_phone(\"5555555555\")\n\n    # Додавання запису John до адресної книги\n    book.add_record(john_record)\n\n    # Створення та додавання нового запису для Jane\n    jane_record = Record(\"Jane\")\n    jane_record.add_phone(\"9876543210\")\n    book.add_record(jane_record)\n\n    # Виведення всіх записів у книзі\n    for name, record in book.data.items():\n        print(record)\n\n    # Знаходження та редагування телефону для John\n    john = book.find(\"John\")\n    john.edit_phone(\"1234567890\", \"1112223333\")\n\n    print(john)  # Виведення: Contact name: John, phones: 1112223333; 5555555555\n\n    # Пошук конкретного телефону у записі John\n    found_phone = john.find_phone(\"5555555555\")\n    print(f\"{john.name}: {found_phone}\")  # Виведення: 5555555555\n\n    # Видалення запису Jane\n    book.delete(\"Jane\")\n```\n\nВ наступному домашньому завданні ми додамо цю логіку до нашого бота.\n\n### Критерії оцінювання\n\n**Клас** `AddressBook`:\n\n- Реалізовано метод `add_record`, який додає запис до `self.data`.\n- Реалізовано метод `find`, який знаходить запис за ім'ям.\n- Реалізовано метод `delete`, який видаляє запис за ім'ям.\n\n**Клас** `Record`:\n\n- Реалізовано зберігання об'єкта `Name` в окремому атрибуті.\n- Реалізовано зберігання списку об'єктів Phone в окремому атрибуті.\n- Реалізовано методи для додавання - `add_phone`/видалення - `remove_phone`/редагування - `edit_phone`/пошуку об'єктів `Phone` - `find_phone`.\n\n**Клас** `Phone`:\n\n- Реалізовано валідацію номера телефону (має бути перевірка на 10 цифр).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fviktorsvertoka%2Fgoit-pycore-hw-06","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fviktorsvertoka%2Fgoit-pycore-hw-06","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fviktorsvertoka%2Fgoit-pycore-hw-06/lists"}